{"version":3,"sources":["framework/theme/shadows.js","framework/theme/index.js","framework/graphqlQueries/businessReadliness.js","framework/graphqlQueries/riskAssessmentMaster.js","framework/graphqlQueries/index.js","framework/graphqlQueries/user.js","framework/graphqlQueries/role.js","framework/graphqlQueries/permission.js","framework/graphqlQueries/businessUnit.js","framework/graphqlQueries/changeAssessmentMaster.js","framework/graphqlQueries/changeAssessmentDetails.js","framework/graphqlQueries/masterData.js","framework/graphqlQueries/masterDataValue.js","framework/graphqlQueries/project.js","framework/graphqlQueries/riskMatrixMaster.js","framework/graphqlQueries/riskAssesment.js","framework/graphqlQueries/changeAssessment.js","framework/graphqlQueries/assessmentValue.js","framework/graphqlQueries/assessmentSection.js","framework/graphqlQueries/assessmentSubType.js","framework/graphqlQueries/assessmentType.js","framework/graphqlQueries/kpiCriteria.js","framework/graphqlQueries/smeRequirement.js","framework/graphqlQueries/reports.js","framework/graphqlQueries/mileStone.js","framework/graphqlQueries/faq.js","framework/graphqlQueries/projectForecast.js","framework/graphqlQueries/toolsAndTemplate.js","framework/graphqlQueries/learningCentre.js","framework/graphqlQueries/themeCustomization.js","framework/graphqlQueries/exportPdf.js","framework/authProvider.js","utils/ErrorCard.js","utils/WithPermission.js","views/customComponents/formWizard.js","views/changeAssessment/reviewCard.js","views/changeAssessment/accordionActuals.js","views/changeAssessment/nonAccordionActuals.js","views/changeAssessment/changeManagementResourcing.js","views/changeAssessment/index.js","framework/dataProvider.js","views/customComponents/impactChart.js","views/changeAssessment/analysisOverview.js","views/changeHeatMap/allProjectsHeatMap_modified.js","views/changeHeatMap/allBusHeatMap.js","views/faq/index.js","views/impactAssesment/GovernanceAssessments.js","views/impactAssesment/RiskAssessmentModalTable.js","views/project/riskassementModal.js","views/impactAssesment/ResponsiveMatrixTable.js","views/impactAssesment/RiskAssessmentResponsiveModal.js","views/impactAssesment/RiskManagement.js","views/impactAssesment/businessReadliness.js","assets/images/cat_logo.png","assets/images/loginImage.png","views/login/forgotPassword.js","views/masterData/changeAssessmentMasterData.js","views/masterData/faq.js","views/masterData/projectMasterData.js","views/masterData/readinessGovernanceMaster.js","views/masterData/riskAssessmentMasterData.js","views/masterData/riskMatrixData.js","views/masterData/index.js","framework/pbiDataProvider.js","views/powerbiReports/changeImpactAssessmentReports.js","views/project/kpiCriteria.js","views/impactAssesment/environmentAssessment.js","views/impactAssesment/impactAssesment.js","views/project/ProjectFormButton.js","views/project/createMilestone.js","views/project/projectForecastsInputsContainer.js","views/project/projectForecasts.js","views/project/projectCreate.js","views/project/smeRequirementInputs.js","utils/useWindowDimensions.js","views/reports/changeStatusReport.js","views/user/changePassword.js","views/powerbiReports/riskAssessmentReport.js","views/powerbiReports/powerBiReportEmbed.js","views/powerbiReports/businessReadinessReport.js","views/powerbiReports/kpiCloseOutReport.js","views/powerbiReports/kpiGoNoGoReport.js","views/powerbiReports/enterpriseHealthSummary.js","views/powerbiReports/enterpriseReport.js","views/themeCustomization/index.js","views/projectReports/pbiEmbed.js","views/projectReports/ciaReport.js","views/projectReports/changeEnvironmentReport.js","views/projectReports/changeSaturation.js","views/projectReports/changeMaturity.js","views/projectReports/changeHeatmap.js","views/portfolioReport/pbiPortfolioEmbed.js","views/portfolioReport/smeReport.js","views/portfolioReport/riskManagementReport.js","views/portfolioReport/changeImpactReport.js","views/portfolioReport/changeEnvironment.js","views/portfolioReport/changeHeatmapReport.js","views/projectReports/goNoGo.js","views/projectReports/changeRiskAssessmentReport.js","views/projectReports/businessReadiness.js","views/projectReports/changeGovernance.js","views/projectReports/smeReqProject.js","views/projectReports/closeOut.js","views/learningCentre/contentPage.js","views/powerbiReports/Dashboard.js","framework/dashboard.js","framework/customRoutes.js","views/changeAssessment/useConstant.js","views/customComponents/menuItem.js","framework/sidebar.js","framework/layout.js","assets/images/not_found_logo.png","utils/NotFound.js","utils/ButtonWithPermission.js","utils/PostPagination.js","views/customComponents/moreActions.js","views/customComponents/customDrawer.js","views/businessUnit/businessUnitCreateDrawer.js","views/businessUnit/businessUnitEditDrawer.js","views/businessUnit/businessUnitTreeView.js","views/businessUnit/businessUnitList.js","views/businessUnit/index.js","assets/images/Page1 Image.svg","assets/images/Page2 Image.svg","assets/images/Page3 Image.svg","assets/images/Page4 Image.svg","assets/images/Page5 Image.svg","assets/images/FrontPageBackgroundTexture.svg","views/login/index.tsx","views/permission/permissionCreateDrawer.js","views/permission/permissionEditDrawer.js","views/permission/permissionList.js","views/permission/index.js","utils/ExportButton.js","utils/ManageChip.js","views/customComponents/MilestoneCustomChart.js","views/customComponents/wizard.js","views/project/projectCustomDrawer.js","views/project/projectCreateDrawer.js","views/project/projectCreateMilestone_modified.js","views/project/projectEditDrawer.js","views/project/projectEditMilestone_modified.js","views/project/projectList.js","views/project/index.js","views/role/roleCreateDrawer.js","views/role/roleEditDrawer.js","views/role/roleList.js","views/role/index.js","views/customer/customerCreateDrawer.js","views/customer/customerEditDrawer.js","views/customer/customerList.js","views/user/userCreateDrawer.js","views/user/userEditDrawer.js","views/user/userList.js","views/user/index.js","App.js","reportWebVitals.js","index.js","utils/AppUtils.js","utils/TokenStorage.ts","assets/images/cat_logo_white.png","framework/constants.js","framework/theme/palette.js","framework/theme/themeContext.js","views/toolsAndTemplates/index.js","views/learningCentre/index.js"],"names":["LIGHT_MODE","palette","grey","customShadows","color","transparent","alpha","z1","z8","z12","z16","z20","z24","primary","main","secondary","info","success","warning","error","createCustomShadow","commonThemeConfig","shadows","transparent1","transparent2","transparent3","createShadow","typography","body2","fontWeight","fontSize","fontFamily","join","subtitle1","themes","Blue","createTheme","lighter","darkLight","light","dark","darker","buttonContrast","paginationContrast","contrastText","Violet","Yellow","Rose","Green","PurpleDark","Gold","Bricks","GoldLighter","DarkGreen","Red","Purple","Cyan","Orange","DarkBlue","Object","keys","map","item","overrides","MuiButton","containedPrimary","height","spacing","width","outlinedPrimary","textPrimary","MuiIconButton","root","borderRadius","MuiTablePagination","MuiTabs","indicator","backgroundColor","MuiTab","selected","textColorInherit","RaFormInput","input","RaListToolbar","toolbar","breakpoints","up","paddingLeft","paddingRight","down","flexDirection","alignItems","RaFilterForm","form","RaTopToolbar","common","white","flexGrow","RaFilterFormInput","spacer","display","RaSearchInput","boxSizing","border","MuiInputBase","RaList","content","boxShadow","MuiTableCell","borderBottom","sizeSmall","textAlign","RaDatagrid","headerCell","borderLeft","letterSpacing","rowCell","borderRight","rowOdd","rowEven","rowBorder","expandIcon","transform","marginLeft","padding","expandIconCell","expanded","MuiAccordion","MuiChip","label","whiteSpace","MuiTypography","noWrap","MuiCssBaseline","BUSINESS_READLINESS_MASTER_DATA_QUERY_LIST","RISK_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY","Query","User","create","query_name","query","list","retrieve","update","delete","Role","Permission","BusinessUnit","ChangeAssessmentMaster","ChangeAssessmentDetails","MasterData","MasterDataDriver","ProjecDriverMasterData","MasterDataValue","Project","updateStep","ProjectForCA","ProjectHeatMap","RiskAssessmentMaster","RiskMatrixMaster","RiskAssessment","BusinessReadlinessMaster","BusinessReadliness","AllProjectsHeatMap","AllBusHeatMap","ChangeAssessment","AssessmentOverview","OverallAssessment","AssessmentValue","AssessmentSection","AssessmentSubType","AssessmentType","KpiCriteria","SmeRequirement","MonthlySmeRequirements","AllProjectsSmeReq","AllBusSmeReq","AllBusinessUnitsTree","ExportAllBusSmeReq","ExportAllProjectSmeReq","ExportMileStone","ExportChangeImpactAssesmentReport","ExportUsers","ExportClients","ExportBUs","ExportProjects","ExportChangeImpactOverview","ExportNumOfProjects","ExportSmeRequired","ExportSmeRequiredReport","BuWiseProjectForecasts","AllMonthlyBuHeatMap","ProjectDriverWiseProjectForecasts","ProjectCountByDriver","login","ChangePassword","changePassword","SetNewPassword","setNewPassword","Milestone","Faq","ProjectForecast","ExportAllProjectChangeStatus","ExportChangeAssessmentDataForPDF","AllBusinessUnitsWithLevel","ExportToolsAndTemplates","ExportLearningCentre","ThemeCustomize","ExportReportPdf","apiUrl","API_URL","username","password","resource","request","Request","method","body","JSON","stringify","operationName","variables","email","trim","headers","Headers","fetch","then","response","status","json","responseJson","error_message","onFailureMessage","Error","errors","length","extensions","responseStatusCode","code","formatResponse","data","token","user","pbi_refresh_token","pbi_access_token","TokenStorage","storeToken","pbiStoreToken","storeUserDetails","catch","message","NETWORK_ERROR_MESSAGE","logout","clear","Promise","resolve","checkError","reject","checkAuth","getToken","getPermissions","userDetails","getUserDetails","permissions","roles","ErrorCard","align","text","history","errorType","useHistory","classes","makeStyles","theme","errorCard","useStyles","Card","className","alignCenter","Typography","Button","variant","startIcon","onClick","goBack","WithPermission","props","bypassUser","action","React","useState","loading","setLoading","setError","useEffect","hasPermissions","hasPermission","Loading","children","FromWizard","next","values","setState","state","step","Math","min","window","scrollTo","top","left","behavior","previous","max","validate","activeStep","Children","toArray","onSuccess","handleSubmit","onSubmit","count","initialValues","isDesktop","updatePredicate","bind","this","addEventListener","removeEventListener","innerWidth","previousBtnEnabled","steps","isLastStep","style","overflowX","Stepper","stepperHeader","alternativeLabel","Step","StepLabel","mutators","submitting","actionToolbar","type","size","marginRight","disabled","Component","withStyles","background","marginBottom","marginTop","justifyContent","LightTooltip","tooltip","Tooltip","StyledSelectInput","styled","SelectInput","categoryCardHeader","fontStyle","categoryCardBody","cardOutStyle","cardMinimalText","outlineIcon","ReviewCard","title","select_choices","assessmentSectionId","assessmentTypeId","assessmentSubTypeId","description","onChange","handleActualsChange","assessmentValueId","isSmallScreen","useMediaQuery","assessmentValueDescription","setAssessmentValueDescription","Box","p","heading","placement","IconButton","Divider","flex","source","optionText","required","e","target","value","choices","helperText","orientation","flexItem","name","subscription","find","x","id","fontWeightRegular","accordionBorder","borderTopLeftRadius","borderTopRightRadius","accordionSummary","paddingBottom","accordionCard","AccordionActuals","isUpdateAssessment","assessmentTypes","useForm","initialPanelIndex","initialAssessmentExpanded","initialAssessmentType","setExpanded","currentAssessmentType","setCurrentAssessmentType","currentIndex","setCurrentIndex","getAccordionTitle","index","getAccordionDescription","getAccordionContent","assessmentSubTypes","handleContinueBtnClick","panelIndex","nextAccordionIndex","nextAccordionPanel","handleReviewChange","assessmentSubType","fieldSource","getFieldState","invalid","assessmentType","Accordion","event","isExpanded","panel","AccordionSummary","AccordionDetails","Grid","container","subType","lg","parseInt","assessmentValues","paddingTop","pxToRem","textTransform","nonAccordionCard","ChangeEnvironment","mainCard","stepperSection","backButton","instructions","inputWidthMargin","referenceInputWidth","dateValueText","margin","getStepContent","sectionData","Date","apiUrlForPDF","API_URL_FOR_PDF","axiosInstance","axios","interceptors","use","httpClient","url","options","impersonateUser","getImpersonateUserDetails","Authorization","Accept","IsJsonString","sanitizeJson","parse","resp","getList","params","pagination","page","perPage","sort","sortField","field","sortOrder","order","filter","items","total","totalCount","getOne","getMany","ids","record","hasOwnProperty","all","responses","getManyReference","limit","offset","ordering","qs","arrayFormat","results","updateMany","deleteMany","getExport","range","getRequest","postRequest","queryType","putRequest","postRequestForPDF","DoughnutChart","canvasRef","createRef","colors","myChart","datasets","d","Chart","current","events","responsive","layout","plugins","enabled","maintainAspectRatio","rotation","circumference","cutout","animation","onComplete","radianAngle","minValue","maxValue","PI","ctx","getContext","cw","offsetWidth","ch","offsetHeight","cx","cy","radius","translate","rotate","beginPath","moveTo","lineTo","fillStyle","fill","console","log","ref","topCard","bottomCard","bottomCardTitle","legends","responsivelegends","legendsMargin","impactChartStyle","resourcingBox","resourcingBox2","impactOverallBox","submitButton","minWidth","minHeight","drawerTitle","hrBar","position","hrBarResponsive","tableContainer","overallChangeText","overallResponsiveChangeText","tableBox","responsiveBoxAnalysis","paddingReponsive","titleFontSize","CellWithRightBorder","createStyles","borderRightWidth","borderRightColor","borderRightStyle","TableCell","AnalyzedDetail","changeAssessmentData","isSmall","getBarColor","useNotify","getImpactBtnBgColor","getImpactBtTxt","mt","changeAssessmentValues","changeManagementImpacts","changeAssessmentValue","assessmentValue","subTypeName","typeName","sectionId","_","defaultsDeep","changeMgtRows","CHANGE_COMPONENTS_ID","forEach","assessmentTypeName","scale_effort_value","rating","challenge_value","push","TableRow","component","scope","pl","project","projectSponsor","fullName","changeLeader","moment","startDate","format","endDate","pr","pb","overallChangeImpactValue","clsx","ml","TableContainer","Paper","Table","TableHead","TableBody","overallChangeMgtImpactValues","AnalysisOverview","setChangeAssessmentData","dataProvider","useDataProvider","notify","usePermissions","isCustomerAdmin","isSuperAdmin","isImpersonating","impersonatedURL","pdfRef","getChangeAssessment","projectId","businessUnitId","changeAssessmentDetails","handleExportChangeAssessmentPDF","changeAssesmentReportDataForPDF","saveChangeReport","Title","render","pristine","md","xs","sm","ReferenceInput","reference","change","fullWidth","AutocompleteInput","rowHeading","forecastRiskBox","opacity","forecastRiskBoxCSR","changeImpactBox","borderRightCSR","zIndex","borderBottomCSR","tableHeading1","tableHeading2","responsiveBox","responsiveTable","columnFreezed","columnFreezed1","columnLowPriority","HeatMapTableInCSReport","businessUnits","weeks","startEndDatesOfWeeks","slice","weekCount","table","responsiveTableHeight","week","i","isMainBu","changeStatusReport","ForecastRisks","forecasts","setForecasts","getForecasts","colSpan","LinearProgress","Boolean","forecast","risk","csr","RiskBox","responsiveTitleFrontSize","columnLowPriorityB","boxes","box","customsColor","creamium","MuiAccordionSummary","MuiAccordionDetails","Faqs","expandedPanel","setExpandedPanel","faqs","setFaqs","filteredFaqs","setFilteredFaqs","setQuery","handleAccordionChange","fetchFaqs","get","WORDPRESS_ENDPOINT","sx","TextField","placeholder","searchQuery","toLowerCase","filtered","post","rendered","includes","InputProps","endAdornment","InputAdornment","faq","dangerouslySetInnerHTML","__html","DOMPurify","sanitize","gutterBottom","textAreaInput","lineHeight","GovernanceForm","businessReadlinessList","onClose","assessmentChoice","businessReadlines","setBusinessReadliness","direction","buredline","initialValue","multiline","maxLength","RadioButtonGroupInput","row","TextInput","undefined","inputMargin","RiskAssessmentModalTable","tableResponse","overflowY","riskLabel","riskDescription","modal","paper","maxWidth","paperImage","RiskassementModal","open","handleClose","Modal","closeAfterTransition","BackdropComponent","Backdrop","BackdropProps","timeout","disableFocusRipple","disableRipple","Array","rowIdx","colIdx","getTableCellStyle","getTableCellName","borderTop","px","low","medium","high","extreme","likelihood","consequence","RiskAssessmentResponsiveModal","riskData","riskName","impactDescription","forecastTitle","forecastCard","forecastCardRow","forecastCardWeek","text_design","forecastRiskContainer","gridTemplateColumns","placeItems","forecastTitleText","commentary","formControl","overallImpact","textAreaBorder","BusinessReadlineForm","formLayout","fieldOptions","borderColor","fieldTags","ForgotPassword","matches","restart","error_messages","pt","src","cat_logo","alt","InputLabelProps","textDecorationColor","to","pathname","backgroundLogo","Notification","dataList","MainDataList","backgroundClor","dataValueList","dataValueName","dataValueNameSingle","dataValueDescription","navPadding","listSelected","listText","listTextSelected","secondboxTitle","containerBox","gridGap","inputBorder","containerBoxTwo","gap","deleteButton","addfieldButton","buttonFieldsContainer","cancelButton","MasterDataValuesInputs","setAssessmentValues","fields","level","notchedOutline","reset","ChangeAssessmentMasterDataList","handleSnackbarOpen","setData","valueCardData","setValueCardData","valueCardLoading","valueCardError","selectedIndex","setSelectedIndex","selectedImpact","setSelectedImpact","handleListItemClick","Autocomplete","disablePortal","getOptionLabel","option","newValue","indexOf","renderInput","List","ListItem","button","ListItemText","impactLevels","updatedData","arrayMutators","pop","CardHeader","masterData","FaqInputs","j","question","uniqueName","confirm","remove","FaqList","setValueCardLoading","setValueCardError","faqData","answer","autoCompleteBox","autocompleteInput","autocomplete","category","masterDataValues","setMasterDataValues","names","masterDataValue","hasDuplicates","FormControlLabel","control","Switch","checked","isDisabled","ProjectMasterDataList","users","setUsers","selectedOption","setSelectedOption","driversId","setDriverId","isDrivers","setIsDriversId","handleAutocompleteChange","clientId","getMasterData","master_data_id","apiNames","formValues","nameDescription","categoryDescription","initialize","companyName","location","PaperComponent","ReadinessGovernancetMasterDataList","changeRG","RiskAssessmentMasterDataList","riskAssessment","riskInfo","RiskMatrixDataList","overflow","tabPanel","tabItemStyle","MyTabScrollButton","other","ButtonBase","StyledTabs","Tabs","ScrollButtonComponent","TabIndicatorProps","StyledTab","Tab","TabPanel","role","hidden","a11yProps","powerBiApiBaseUrl","powerBiApi","endpoint","checkAccessTokenExpiration","accessToken","getPbiAccessToken","decodedToken","jwt","decode","complete","payload","exp","floor","now","checkExpiration","getNewPbiToken","pbiToken","ChangeImpactAssessmentReport","setProjectId","embedUrl","tokenType","models","TokenType","Aad","settings","panes","filters","visible","navContentPaneEnabled","eventHooks","accessTokenProvider","pbiEmbedConfig","setPbiEmbedConfig","handleProjectChange","filtersArray","$schema","column","operator","report","updateFilters","FiltersOperations","Replace","res","embedConfig","eventHandlers","Map","Add","detail","cssClassName","getEmbeddedComponent","embeddedReport","referenceMargin","gridsmeCard","unitTextHeading","gridItemPadding","smeButton","saveButton","responsiveTitle","KpiCriterias","kpiCriteriasData","kpi","assessment","kpiCriterias","setKpiCriterias","isArray","requirement","kpiChoice","marginY","setInitialValues","snackbarOpen","setSnackbarOpen","setPopupMessage","hanndleSnackbar","reason","vertical","horizontal","anchorOrigin","popupMessage","isXS","getKpiCriterias","kpiItem","kpiOverall","createdAt","kpiCriteria_errors","prev","isDraft","mb","meta","Snackbar","autoHideDuration","Alert","severity","selectedAssessment","boprderRadius","HtmlTooltip","EnvironmentAssessment","handleBack","handleNext","setIsUpdateProjectDetails","assessmentMasters","setAssessmentMaster","localProjectDetails","getProjectDetails","impactForcast","setImpactForcast","activeIndex","setActiveIndex","envCalculation","setEnvCalculation","mtCalculation","setMtCalculation","stCalculation","setStCalculation","setCommentary","overallCommentary","setOverallCommentary","setImpactResponse","setIsUpdatedAssesment","isImpactsLoading","setImpactsLoading","assessmentDetails","impactLevel","score","assessmentScores","handleRiskBtnClick","imp","activeIndx","calc","Number","dimensionWeight","dimensionScore","updateCalc","udpateIndex","changeAssessmentMasterId","updateImpacts","handleCommentary","updateCommentary","handleOverallCommentary","handleSteper","stepers","stepCount","clearProjectData","hasImpactLevel","validation","requestBody","com","overallAssessments","overallScore","reduce","acc","impact","activeRed","active","activeAmber","activeGreen","TextareaAutosize","minRows","split","Fragment","ImpactAssesment","impacts","setImpacts","calculation","setCalculation","overallCommentry","setOverallCommentry","oldObject","ProjectFormButton","deleteIcon","amber","removeMileston","MilestoneForm","milestonesValues","projectStartDate","projectEndDate","projectPhases","milestones","setMilestones","milestone","optionValue","DateInput","projectPhase","phaseStartDate","phaseEndDate","isBefore","isSameOrAfter","isBetween","validateStartDate","CreateMilestone","useRefresh","milestoneLoading","setMilestoneLoading","projectPhasesArray","setProjectPhasesArray","isNext","createMilestoneView","milestoneDate","mr","milestoneData","formWidth","selectedForcast","ProjectForecastsInputsContainer","projectForecasts","setProjectForecasts","isCreate","getState","firstImpactedBu","impactedBusinessUnits","isAllWeeksForecasted","isForecasted","handleSkipForecast","skip","impactedUnits","weeksCount","mainBuForecasts","batch","impactedUnit","forecastsLength","impactedForeCasts","projectForecast","elevation","FormGroup","Checkbox","subTitle","inputWidthChange","gridBoxMargin","phaseDateWidth","gridContainer","gridColumnGap","between","forecastTopDiv","projectNoteText","tabsComponentDiv","ProjectForecastsInputs","bu","savedForecasts","availableForecasts","forecastsCount","updatedForecasts","rest","splice","ForecastToolbar","setProject","setValue","valuedUnits","setvaluedUnits","handleChange","uniqueBusinessUnitIds","Set","entry","buBaseForcasts","ForecastPanel","flat","diff","impactedBuCount","forecastsValues","scrollButtons","unit","touched","labelDisbale","referenceInputWidthOvr","phaseDateInput","isUpdateProjectDetails","setActiveStep","ProjectDetails","projectDriverChoices","setProjectDriverChoices","setProjectDriversLoading","driverName","setDriverName","singleProject","setSingleProject","showImpBus","setShowImpBus","setProjectPhases","setProjectPhasesLoading","setProjectPhasesError","pstatus","setPstatus","cstatus","setCtatus","changeStatusError","setChangeStatusError","projectStatusError","setProjectStatusError","PROJECT_PHASE_MASTER_DATA_ID","changeStatus","projectStatus","validateEndDate","validateGoLiveDate","goLiveDate","PROJECT_DRIVERS_MASTER_DATA_ID","phases","projectValues","storeProjectDetails","shrink","STATUS_INACTIVE_ACTIVE_CHOICES","prePhaseIndex","prePhaseEndDate","toLocaleDateString","validatePhaseStartDate","validatePhaseEndDate","BusinessUnitCP","FormDataConsumer","formData","ReferenceArrayInput","AutocompleteArrayInput","impactedBUs","updateMonthsBasedOnRequirements","months","requirements","month","matchingRequirement","req","BusinessUnitRequirements","businessUnit","requirementValues","setRequirements","from","currentDate","currentMonth","getMonth","currentYear","getFullYear","currentMonthYear","toString","padStart","monthYearString","add","setMonth","getMonthsBetweenDates","selectedMonths","setSelectedMonths","handleMonthChange","changedRequirement","smeRequirements","updatedMonths","maxDigits","NumberInput","SmeRequirementInputs","updateSme","setUpdateSme","setBusinessUnits","smeRequirementsData","setSmeRequirementsData","getProject","getSmeRequirements","transformData","transformedData","groupedSmeRequirements","forecastEmployees","employees","uniqueBusinessUnits","self","findIndex","t","isSmeReqAvailable","smeRequirementsForForm","groupedBu","groupBy","forOwn","modifiedSmes","smeRequirement","transformDataToFormValues","updatedAt","smeRequirements_errors","getWindowDimensions","innerHeight","Report","exportRef","projectChangeState","keyMilestonesState","changeReadinessState","changeImpactCommentState","goNoGoState","subjectExpersReqCommentState","assessmentValuesInCSR","windowWidth","windowDimensions","setWindowDimensions","handleResize","useWindowDimensions","handleCharacterLimit","characterLimit","substr","today","dd","String","getDate","mm","yyyy","catLogo","businessOwner","projectDriver","rows","onKeyUp","onKeyDown","impactBu","ChangeAssessmentReport","getRisk","assessments","filteredAssessments","Avatar","LabelField","SmeReqTable","projectSmeRequirements","setProjectSmeRequirements","getAllProjectsSmeReq","allProjectsSmeReq","cell","ChangeStatusReport","useRef","projectChangeOverviewState","setProjectChangeOverviewState","setKeyMilestonesState","setChangeReadinessState","setChangeImpactCommentState","setGoNoGoState","setSubExperstReqCommentState","setAssessmentValuesInCSR","changeStatusProjectDataArr","changeStatusProjectData","refresh","validate_confirm_password","confirmPassword","newPassword","oldPassword","PasswordInput","RiskAssessmentReport","PowerBiReportEmbed","reportId","BusinessReadinessReport","KpiCloseOutReport","KpiGoNoGoReport","EnterpriseHealthSummary","EnterpriseReport","uploadButton","ThemeCustomization","themeConfig","setThemeConfig","isShowButton","setIsShowButton","imgSrc","setImgSrc","imgRef","crop","setCrop","completedCrop","setCompletedCrop","scale","aspect","defaultTheme","setDefaultTheme","defaultLogo","setDefaultLogo","useContext","ThemeContext","setTheme","themeObject","getClientId","oldState","image","canvas","document","createElement","scaleX","naturalWidth","scaleY","naturalHeight","drawImage","y","base64Image","toDataURL","err","delteThemeCustomization","img","cat_logo_white","accept","multiple","files","reader","FileReader","result","readAsDataURL","htmlFor","percentCrop","c","maxHeight","onLoad","currentTarget","mediaWidth","mediaHeight","centerCrop","makeAspectCrop","centerAspectCrop","flexWrap","CustomsThemePalette","cursor","handleChooseTheme","require","PBIEmbed","pageName","defaultProjectId","setDefaultProjectId","pdfFilter","setPdfFilter","buttonLoader","setButtonLoader","pageNavigation","defaultValue","filterArray","transformToPowerBIFilter","downloadPDF","CircularProgress","setPage","visual","allFilter","selectedFilter","dataPoints","visualName","pbiFilterNoDuplicate","CIAReport","ChangeEnvironmentReport","ChangeSaturationReport","ChangeMaturityReport","ChangeHeatmapReport","PBIPortfolioEmbed","SMEReport","RiskManagementReport","ChangeImpactReport","ChangeEnvironmentPortfolioReport","ChangeHeatmapPortfolioReport","GoNoGoReport","CRAProjectReport","BusinessReadinessProjectReport","ChangeGovernanceProjectReport","SMEReqProjectReport","CloseOutReport","ViewLearningContent","slug","useParams","setPost","fetchPost","textDecoration","DashboardPowerBI","Dashboard","exact","path","CHANGE_ASSESSMENT","IMPACT","ENVIRONMENT","assessmentMasterData","setAssessmentMasterData","setIsUpdateAssessment","setBusinessUnitId","topMainForm","init","initiated","useConstant","createForm","getChangeAssessmentList","changeAssessmentId","handleProjectIdChange","project_unit_id","handleBUChange","business_unit_id","subTypeId","typeId","_sectionId","replace","_typeId","_subTypeId","formValuesToData","updateChangeAssessment","createChangeAssessment","section","riskMaster","setRiskMaster","riskModal","setRiskModal","setContent","setRiskData","setTitle","modalOpen","setModalOpen","riskManagemnetLoading","setRiskManagementLoading","riskMatirxMasters","setRiskMatrixMasters","responseModifed","riskAssesments","handleCloseImageModal","handleHeaderModal","riskAssessmentMasterId","otherRequestBody","r_values","riskAssessments","otherRiskAssessments","handleResponsiveModal","handleTooltipOpen","handleImpactModal","consequenceChoice","masterId","handleConsequencesScore","likelihoodChoice","handleLikelihoodScore","handlePush","businessReadlineLoading","setBusinessReadlineLoading","businessReadlinesListByuser","readiness","read","readinessOverall","readinessGovernanceAssessments","buread","governanceLoading","setGovernanceLoading","governances","governanceOverall","KPI_CRITERIA_TYPE","GONOGO","CLOSEOUT","ToolsAndTemplates","getPorject","completed","showProjectInfo","setShowProjectInfo","proojectExists","setProjectExits","handleStep","handleProjectInfo","nonLinear","StepButton","LearningCentre","RouteWithoutLayout","useSidebarStyles","popover","pointerEvents","popoverBody","popoverContent","menuItem","listItemIcon","subMenuRoot","subSubMenuRoot","menuActive","menuIcon","MainMenuItem","useLocation","key","primaryText","leftIcon","isDrawerOpen","handleDrawerOpen","setOpen","show","setShow","loadingPermissions","hasChildren","allowedPermissions","bypassUsers","permission","checkedPermissions","allowed","startsWith","ListItemIcon","in","unmountOnExit","dense","MenuItemLink","icon","onMobileMenuClick","SubMenuItem","isSubSubMenuOpen","SubSubMenuItem","drawerWidth","appBar","drawer","transition","transitions","easing","sharp","duration","leavingScreen","appBarShift","enteringScreen","menuButton","hide","flexShrink","drawerOpen","drawerClose","mixins","toggleToolbar","toggleMenu","borderBottomRightRadius","borderBottomLeftRadius","bottom","menu","hamburgerMenu","navIcon","iconHover","chevDown","menuTypography","profileName","profileDesc","profileNmenu","hamburgerProfile","formatProfileDetail","user_role","Sidebar","handleDrawer","handleDrwerClose","profileArrowOpen","setProfileArrowOpen","subAchorEl","setSubAnchorEl","subMenuOpen","handleClick","handleCloseSubMenu","setIsSuperAdmin","setIsCustomerAdmin","handleClickOutside","contains","handleProfileClose","profile","setProfile","menuName","setMenuName","anchorEl","setAnchorEl","handleOpenSubMenu","useLogout","authProvider","useAuthProvider","handleProfileLogoutClick","handleStopImpersonationClick","clearImpersonateUserDetails","hash","reload","formattedProfile","handleProfileClick","ListItemButton","Collapse","disablePadding","HoverDashboard","Link","hoverTools","hoverLearningCentre","hoverFAQ","HoverProject","HoverAssessment","HoverReports","HoverSetup","nested","hoverAccounts","handleHoverDomMenu","mainId","subId","getElementById","submenu","rect","getBoundingClientRect","offsetTop","pageYOffset","offsetBottom","Drawer","onMouseEnter","hoverContent","edge","PaperProps","navMenu","titleBar","rightContent","profileContent","MiniDrawer","useTheme","contextUser","customerAdminId","CssBaseline","NotFound","CardMedia","not_found_logo","CardContent","ButtonWithPermission","endIcon","setHasPermission","right","PostPagination","useListContext","setPerPage","nbPages","ceil","setRowsPerPage","Toolbar","InputLabel","Select","rowsPerPageOption","MenuItem","Pagination","hidePrevButton","hideNextButton","warningIcon","IconButtonOverride","MoreActions","setItems","handleMoreActionClick","handleMoreActionsClose","getAttribute","choice","Menu","keepMounted","transformOrigin","ITEM_HEIGHT","formContent","fullList","drawerTitleBar","CustomDrawer","drawerAnchor","anchor","mobileBtn","BusinessUnitCreateDrawer","showSaveButton","setShowSaveButton","buNameChange","setBuNameChange","locationChange","setLocationChange","parentBu","setParentBu","totalFte","setTotalFte","nameField","handleBUName","locationField","handleLocation","parentBuField","handleParentBu","totalFteField","handleTotalFte","BusinessUnitEditDrawer","parentBusinessUnitId","excludeIds","expand","short","expandOpen","avatar","horizontalScroll","Organization","org","onCollapse","collapsed","Badge","showZero","invisible","overlap","badgeContent","childBU","buName","Node","o","parent","setCollapsed","handleCollapse","T","TreeNode","lineWidth","lineColor","lineBorderRadius","BusinessUnitTreeView","buHolder","element","parentBU","childObject","ThemeProvider","bgcolor","ListActions","exporter","maxResults","handleCreateDrawerOpen","currentSort","displayedFilters","filterValues","showFilter","basePath","TopToolbar","sanitizeListRestProps","cloneElement","context","saveFileFromBinary","paddingX","BusinessUnitFilter","Filter","SearchInput","alwaysOn","CreateBusinessUnitBtn","Empty","m","paragraph","BusinessUnitList","createDrawerOpen","setCreateDrawerOpen","editDrawerOpen","setEditDrawerOpen","setRecord","handleEditDrawerOpen","ActionButtonSM","records","useRecordContext","handleEditBU","handleDeleteBU","hasCreate","empty","actions","bulkActionButtons","Datagrid","sortable","AccountBalanceIcon","images","imgPath","page1","page2","page3","page4","page5","mainLogo","buttonOptions","buttonDiv","loginRoot","backgroundImage","backgroundImages","repeat","loginBox","Input","inputProps","Item","Login","redirectTo","useSafeSetState","useCallback","isFirstTimeLogin","useLogin","useTranslate","screenBelowMd","py","noValidate","autoComplete","disableElevation","thickness","fullHeightHover","navButtonsAlwaysInvisible","navButtonsProps","navButtonsWrapperProps","PermissionCreateDrawer","SelectArrayInput","ACTIONS_CHOICES","PermissionEditDrawer","CreatePermissionBtn","PermissionFilter","ActionField","ChipField","ActionFieldSmallSc","SelectField","YES_NO_CHOICES","ExportButton","handleExport","filename","node2Export","btnName","varient","exportFile","chipfield_yes","chipfield_status_yes","chipfield_no","centerChip","ManageChip","inactiveChip","Chip","ManageChipForStatus","LineChart","labels","chartData","milestonesData","phasesData","indexAxis","aspectRatio","abs","legend","interaction","mode","callbacks","raw","date","dataset","scales","borderWidth","stacked","startOf","endOf","time","beginAtZero","showBorder","suggestedMin","suggestedMax","ticks","stepSize","Wizard","toggleDrawer","activePage","setProjectInfo","isLastPage","previousButton","nextButton","Page","projectCard","drawerOverflow","backDrop","ProjectCustomDrawer","projectInfo","ProjectCreateInputs","ProjectPhasesInputs","projectTitle","variableInputs","variableName","ProjectCreateDrawer","projectPhasesLoading","projectPhasesError","WizardFromError","newForecastsValues","MilestoneCreateDrawer","ProjectEditInputs","driverDefalt","setDefaultDriver","selectedDrover","freeSolo","INACTIVE_ACTIVE_CHOICES","ProjectEditDrawer","defaulDrriver","WizardFormError","buArrays","allForecasts","el","MilestoneEditDrawer","updateMilestonesView","phaseBgColors","stylingTitle","projects","setProjects","projectsData","ProjectFilter","CreateProjectBtn","ProjectPanel","setChartData","nominated","setNominated","mileStone","setMileStone","createMilestoneDrawerOpen","setCreateMilestoneDrawerOpen","editMilestoneDrawerOpen","setEditMilestoneDrawerOpen","setLegends","getProjectData","milestoneAndProject","milestoneObj","excelData","Status","chart_data","phase","barThickness","mileStonePointBackgroundColor","mileStonePointBorderColor","pointRadius","pointStyle","pointHoverRadius","pointBorderColor","pointBackgroundColor","handleCreateMilestoneDrawerOpen","isSubmitted","handleEditMilestoneDrawerOpen","projectMileStoneData","MilestoneCustomChart","CustomStatusField","handleDeleteProject","ActionButtonSmallScreen","handleEditProject","hover","FunctionField","textHeadings","RoleCreateDrawer","choicess","view","edit","permissionParentName","setPermissionParentName","showCreateButton","setShowCreateButton","roleName","setRoleName","hasAnyPermission","setHasAnyPermission","newVales","viewPermissions","editPermissions","handleRoleName","newPermission","ViewGroup","handleChangeView","CheckboxGroupInput","handlePermissionView","EditGroup","handleChangeEdit","handlePermissionEdit","RoleEditDrawer","viewsData","groupPermissions","editData","RoleFilter","CreateRoleBtn","RoleList","permissionList","setPermissionList","groupByAction","PermissionsField","PermissionsFieldSC","permissionsText","handleDeleteRole","industries","UserCreateDrawer","firstName","UserEditDrawer","setChecked","newValues","handleSwitchChange","CreateUserBtn","setContextUser","UserFilter","UserList","rowActionsChoices","handleMoreActionsClick","InfoField","ImpersonateUser","storeImpersonateUserDetails","href","ActionButtons","float","isManagedService","handleEditClient","handleDeleteClient","fallback","showButton","setShowButton","setFirstName","lastName","setLastName","setEmail","bU","setBu","surname","inputField","handleFirstName","handleLastName","handleEmail","handleBu","handleRole","UserAndRoleTabs","handleEditUser","handleDeleteUser","wordWrap","DateField","showTime","isNonAdminUser","App","handleLoad","Skeleton","Consumer","Admin","loginPage","catchAll","customRoutes","dashboard","Resource","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","tagManagerArgs","gtmId","REACT_APP_GTM_ID","TagManager","ReactDOM","StrictMode","FileSaver","str","object","entries","k","v","statusText","array","tempStartDate","clone","startDateOfWeek","endDateOfWeek","isAfter","args","condition","allow","s","fileName","buf","ArrayBuffer","Uint8Array","charCodeAt","saveAs","Blob","byteCharecters","atob","byteNumbers","byteArr","blob","formatDate","projectInfoArray","projectInfoString","origin","updatedURL","StyledTextInput","getFormatExtension","groupChoices","rolePermissions","groupIds","base64Data","binaryString","len","bytes","filterMap","identity","equalsValue","equals","has","set","yearVisual","REFRESH_TOKEN_RESOURCE","getRefreshToken","access","refreshToken","getPbiRefreshToken","localStorage","setItem","LOCAL_STORAGE_TOKEN","LOCAL_STORAGE_PROJECT","LOCAL_STORAGE_PBI_ACCESS_TOKEN","LOCAL_STORAGE_PBI_REFRESH_TOKEN","LOCAL_STORAGE_REFRESH_TOKEN","user_details","LOCAL_STORAGE_USER","LOCAL_STORAGE_IMPERSONATE_USER","removeItem","LOCAL_STORAGE_PROJECT_DATA","getItem","userStr","projectData","getEnv","process","errMsg","createGradient","color1","color2","GREY","PRIMARY","SECONDARY","teal","INFO","SUCCESS","WARNING","ERROR","GRADIENTS","black","gray","darkBlue","darkGray","lightGray","gradients","divider","default","neutral","disabledBackground","focus","hoverOpacity","disabledOpacity","createContext","Provider","handleToolsAndTemplateDownload","file","downloadFile","arrayBuffer","ContentType","Body","buffer","Buffer","templateData","fileDetails","summary","posts","setPosts","filteredPosts","setFilteredPosts","fetchPosts"],"mappings":"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ACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEIC,EAA4B,CAChC,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAIIzF,EACJpyB,GAAcA,EAAW/3B,OACrB+3B,EAAW9iC,KAAI,SAACgjC,EAAWvsB,GAAK,MAAM,CACtCrS,MAAO,GACPgH,KAAM,CAAC43B,EAAUkB,eACjBlvB,KAAMguB,EAAUhuB,KAChBhU,gBAAiB,QACjBkuB,YAAa,QACb0rC,YAAa,EACbC,WAAY,SACZC,iBAAkB,GAClBL,aAAc,GACdM,iBAAkBJ,EAA0BlkD,GAC5CukD,qBAAsBN,EAA8BjkD,GACpD8+C,OAAQ,CACNhzD,SAAS,GAEXoX,QAAS,CAAC,EACV0D,QAAS,CAeP,EAEF1L,KAAM,UACP,IACC,KAEN4oD,EAAWz9C,SAAW,CAAEq4C,aAAYD,kBACpCsE,EAAae,GACb/rD,GAAW,GAAO,4CACjB,CAAC4V,EAAc/I,EAAOjG,KAEnB6lD,GAAkC,SAAC1uC,GAA+B,IAAzB2uC,EAAW,wDACxDpB,EAA6BvtC,GACzB2uC,GAAahB,IACnB,EAEMiB,GAAgC,SAAC5uC,GAA+B,IAAzB2uC,EAAW,wDACtDlB,EAA2BztC,GACvB2uC,GAAahB,IACnB,EAEA7rD,aAAgB,WACV1B,EAAYA,cACSA,EAAYA,YAAYuI,MAC7C,SAACi5C,GAAO,OAAmB,IAAdA,EAAQ/4C,IAA0B,IAAd+4C,EAAQ/4C,EAAQ,KAEjCskD,GAAa,GAEnC,GAAG,CAAC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","file":"static/js/main.ff65605a.chunk.js","sourcesContent":["import { alpha } from '@material-ui/core/styles';\nimport palette from './palette';\n\nconst LIGHT_MODE = palette.grey[500];\n\nconst createShadow = (color) => {\n const transparent1 = alpha(color, 0.2);\n const transparent2 = alpha(color, 0.14);\n const transparent3 = alpha(color, 0.12);\n return [\n 'none',\n `0px 2px 1px -1px ${transparent1},0px 1px 1px 0px ${transparent2},0px 1px 3px 0px ${transparent3}`,\n `0px 3px 1px -2px ${transparent1},0px 2px 2px 0px ${transparent2},0px 1px 5px 0px ${transparent3}`,\n `0px 3px 3px -2px ${transparent1},0px 3px 4px 0px ${transparent2},0px 1px 8px 0px ${transparent3}`,\n `0px 2px 4px -1px ${transparent1},0px 4px 5px 0px ${transparent2},0px 1px 10px 0px ${transparent3}`,\n `0px 3px 5px -1px ${transparent1},0px 5px 8px 0px ${transparent2},0px 1px 14px 0px ${transparent3}`,\n `0px 3px 5px -1px ${transparent1},0px 6px 10px 0px ${transparent2},0px 1px 18px 0px ${transparent3}`,\n `0px 4px 5px -2px ${transparent1},0px 7px 10px 1px ${transparent2},0px 2px 16px 1px ${transparent3}`,\n `0px 5px 5px -3px ${transparent1},0px 8px 10px 1px ${transparent2},0px 3px 14px 2px ${transparent3}`,\n `0px 5px 6px -3px ${transparent1},0px 9px 12px 1px ${transparent2},0px 3px 16px 2px ${transparent3}`,\n `0px 6px 6px -3px ${transparent1},0px 10px 14px 1px ${transparent2},0px 4px 18px 3px ${transparent3}`,\n `0px 6px 7px -4px ${transparent1},0px 11px 15px 1px ${transparent2},0px 4px 20px 3px ${transparent3}`,\n `0px 7px 8px -4px ${transparent1},0px 12px 17px 2px ${transparent2},0px 5px 22px 4px ${transparent3}`,\n `0px 7px 8px -4px ${transparent1},0px 13px 19px 2px ${transparent2},0px 5px 24px 4px ${transparent3}`,\n `0px 7px 9px -4px ${transparent1},0px 14px 21px 2px ${transparent2},0px 5px 26px 4px ${transparent3}`,\n `0px 8px 9px -5px ${transparent1},0px 15px 22px 2px ${transparent2},0px 6px 28px 5px ${transparent3}`,\n `0px 8px 10px -5px ${transparent1},0px 16px 24px 2px ${transparent2},0px 6px 30px 5px ${transparent3}`,\n `0px 8px 11px -5px ${transparent1},0px 17px 26px 2px ${transparent2},0px 6px 32px 5px ${transparent3}`,\n `0px 9px 11px -5px ${transparent1},0px 18px 28px 2px ${transparent2},0px 7px 34px 6px ${transparent3}`,\n `0px 9px 12px -6px ${transparent1},0px 19px 29px 2px ${transparent2},0px 7px 36px 6px ${transparent3}`,\n `0px 10px 13px -6px ${transparent1},0px 20px 31px 3px ${transparent2},0px 8px 38px 7px ${transparent3}`,\n `0px 10px 13px -6px ${transparent1},0px 21px 33px 3px ${transparent2},0px 8px 40px 7px ${transparent3}`,\n `0px 10px 14px -6px ${transparent1},0px 22px 35px 3px ${transparent2},0px 8px 42px 7px ${transparent3}`,\n `0px 11px 14px -7px ${transparent1},0px 23px 36px 3px ${transparent2},0px 9px 44px 8px ${transparent3}`,\n `0px 11px 15px -7px ${transparent1},0px 24px 38px 3px ${transparent2},0px 9px 46px 8px ${transparent3}`\n ];\n};\n\nconst createCustomShadow = (color) => {\n const transparent = alpha(color, 0.24);\n\n return {\n z1: `0 1px 2px 0 ${transparent}`,\n z8: `0 8px 16px 0 ${transparent}`,\n z12: `0 0 2px 0 ${transparent}, 0 12px 24px 0 ${transparent}`,\n z16: `0 0 2px 0 ${transparent}, 0 16px 32px -4px ${transparent}`,\n z20: `0 0 2px 0 ${transparent}, 0 20px 40px -4px ${transparent}`,\n z24: `0 0 4px 0 ${transparent}, 0 24px 48px 0 ${transparent}`,\n primary: `0 8px 16px 0 ${alpha(palette.primary.main, 0.24)}`,\n secondary: `0 8px 16px 0 ${alpha(palette.secondary.main, 0.24)}`,\n info: `0 8px 16px 0 ${alpha(palette.info.main, 0.24)}`,\n success: `0 8px 16px 0 ${alpha(palette.success.main, 0.24)}`,\n warning: `0 8px 16px 0 ${alpha(palette.warning.main, 0.24)}`,\n error: `0 8px 16px 0 ${alpha(palette.error.main, 0.24)}`\n };\n};\n\nexport const customShadows = createCustomShadow(LIGHT_MODE);\n\nconst shadows = createShadow(LIGHT_MODE);\n\nexport default shadows;","import '@fontsource/roboto/300.css';\r\nimport '@fontsource/roboto/400.css';\r\nimport '@fontsource/roboto/500.css';\r\nimport '@fontsource/roboto/700.css';\r\nimport { createTheme } from '@material-ui/core/styles';\r\nimport palette from \"./palette\";\r\nimport shadows, { customShadows } from \"./shadows\";\r\n\r\n\r\n\r\n\r\nconst blueTheme = {\r\n lighter: '#97b9f0',\r\n darkLight: \"#97b9f0\",\r\n light: '#19aadd',\r\n main: \"#028FC2\",\r\n dark: '#0693c6',\r\n darker: '#495057',\r\n buttonContrast: \"#027aa6\",\r\n paginationContrast: \"#3f51b5\",\r\n contrastText: '#ffffff',\r\n};\r\nconst DarkBlueTheme = {\r\n lighter: '#45458f',\r\n darkLight: \"#37377a\",\r\n light: '#1c1c85',\r\n main: \"#000080\",\r\n dark: '#02026e',\r\n darker: '#030357',\r\n buttonContrast: \"#45458f\",\r\n paginationContrast: \"#45458f\",\r\n contrastText: '#ffffff',\r\n}\r\nconst violeteTheme = {\r\n main: \"#800080\",\r\n light: \"#800085\",\r\n lighter: \"#800099\",\r\n dark: \"#800079\",\r\n darker: \"#800060\",\r\n buttonContrast: \"#cc45cc\",\r\n paginationContrast: \"#d45fd4\",\r\n contrastText: '#ffffff'\r\n}\r\nconst YellowTheme = {\r\n main: \"#FFA500\",\r\n light: \"#edb245\",\r\n lighter: \"#f2b950\",\r\n dark: \"#db8f04\",\r\n darker: \"#c98404\",\r\n buttonContrast: \"##dbb56e\",\r\n paginationContrast: \"##dbb56e\",\r\n contrastText: '#ffffff'\r\n};\r\nconst RoseTheme = {\r\n main: \"#800000\",\r\n light: \"#f74545\",\r\n lighter: \"#f05454\",\r\n dark: \"#800505\",\r\n darker: \"#6e0303\",\r\n buttonContrast: \"#f05454\",\r\n paginationContrast: \"#f05454\",\r\n contrastText: '#ffffff'\r\n};\r\nconst GreenTheme = {\r\n main: \"#006400\",\r\n light: \"#5beb5b\",\r\n lighter: \"#6eeb6e\",\r\n dark: \"#024f02\",\r\n darker: \"#033b03\",\r\n buttonContrast: \"#6eeb6e\",\r\n paginationContrast: \"#6eeb6e\",\r\n contrastText: '#ffffff'\r\n};\r\nconst PurpleDarkTheme = {\r\n main: \"#800080\",\r\n light: \"#f55df5\",\r\n lighter: \"#fa7dfa\",\r\n dark: \"#660466\",\r\n darker: \"#520452\",\r\n buttonContrast: \"#fa7dfa\",\r\n paginationContrast: \"#fa7dfa\",\r\n contrastText: '#ffffff'\r\n}\r\nconst GoldTheme = {\r\n main: \"#8B4513\",\r\n light: \"#f59e5f\",\r\n lighter: \"#f7a972\",\r\n dark: \"#733509\",\r\n darker: \"#612c07\",\r\n buttonContrast: \"#f7a972\",\r\n paginationContrast: \"#f7a972\",\r\n contrastText: '#ffffff'\r\n}\r\nconst BricksTheme = {\r\n main: \"#A0522D\",\r\n light: \"#e3916b\",\r\n lighter: \"#eba07c\",\r\n dark: \"#874424\",\r\n darker: \"#6b351c\",\r\n buttonContrast: \"#eba07c\",\r\n paginationContrast: \"#eba07c\",\r\n contrastText: '#ffffff'\r\n}\r\nconst GoldLighterTheme = {\r\n main: \"#CD853F\",\r\n light: \"#f59e5f\",\r\n lighter: \"#f7a972\",\r\n dark: \"#733509\",\r\n darker: \"#612c07\",\r\n buttonContrast: \"#f7a972\",\r\n paginationContrast: \"#f7a972\",\r\n contrastText: '#ffffff'\r\n}\r\nconst DarkGreenTheme = {\r\n main: \"#556B2F\",\r\n light: \"#88a15d\",\r\n lighter: \"#899e64\",\r\n dark: \"#455726\",\r\n darker: \"#38471e\",\r\n buttonContrast: \"#899e64\",\r\n paginationContrast: \"#899e64\",\r\n contrastText: '#ffffff'\r\n}\r\nconst RedTheme = {\r\n main: \"#FF4500\",\r\n light: \"#f0541a\",\r\n lighter: \"#f75c23\",\r\n dark: \"#d93c02\",\r\n darker: \"#c43702\",\r\n buttonContrast: \"#f75c23\",\r\n paginationContrast: \"#f75c23\",\r\n contrastText: '#ffffff'\r\n}\r\nconst PurpleTheme = {\r\n main: \"#DA70D6\",\r\n light: \"#d96fd5\",\r\n lighter: \"#d175ce\",\r\n dark: \"#bf5ebc\",\r\n darker: \"#ad55aa\",\r\n buttonContrast: \"#ad62b3\",\r\n paginationContrast: \"#d175ce\",\r\n contrastText: '#ffffff'\r\n}\r\nconst CyanTheme = {\r\n main: \"#00CED1\",\r\n darkLight: \"#bdf0ec\",\r\n light: \"#0bbdbf\",\r\n lighter: \"#1dbfc2\",\r\n dark: \"#02b2b5\",\r\n darker: \"#03999c\",\r\n buttonContrast: \"#1dbfc2\",\r\n paginationContrast: \"#1dbfc2\",\r\n contrastText: '#ffffff'\r\n}\r\nconst OrangeTheme = {\r\n main: \"#FF8C00\",\r\n light: \"#eb8f1e\",\r\n lighter: \"#e3912d\",\r\n dark: \"#cf7304\",\r\n darker: \"#ab5f02\",\r\n buttonContrast: \"#e3912d\",\r\n paginationContrast: \"#e3912d\",\r\n contrastText: '#ffffff'\r\n}\r\nconst commonThemeConfig = {\r\n shadows,\r\n customShadows,\r\n typography: {\r\n body2: {\r\n color: \"#2E3B52\",\r\n fontWeight: 400,\r\n fontSize: 14,\r\n },\r\n fontSize: 12,\r\n fontFamily: [\r\n \"Roboto\",\r\n \"Helvetica\",\r\n \"Arial\",\r\n \"sans-serif\"\r\n ].join(','),\r\n subtitle1: {\r\n fontWeight: 600,\r\n }\r\n },\r\n}\r\n\r\nexport const themes = \r\n{\r\n Blue: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...blueTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Violet: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...violeteTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Yellow: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...YellowTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Rose: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...RoseTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Green: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...GreenTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n PurpleDark: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...PurpleDarkTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Gold: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...GoldTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Bricks: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...BricksTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n GoldLighter: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...GoldLighterTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n DarkGreen: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...DarkGreenTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Red: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...RedTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Purple: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...PurpleTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Cyan: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...CyanTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n Orange: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...OrangeTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n DarkBlue: createTheme({\r\n palette: {\r\n ...palette,\r\n primary: {...DarkBlueTheme}\r\n },\r\n ...commonThemeConfig\r\n }),\r\n}\r\nObject.keys(themes).map((item) => {\r\n// ['Blue', 'Yellow', 'Rose', 'Green', 'PurpleDark', 'Gold', 'Bricks', 'GoldLighter', 'DarkGreen', 'Red', 'Purple', 'Cyan', 'Violet', 'Orange'].map((item) => {\r\n themes[`${item}`].overrides = {\r\n MuiButton: {\r\n containedPrimary: {\r\n height: themes[`${item}`].spacing(5),\r\n width: themes[`${item}`].spacing(22),\r\n },\r\n outlinedPrimary: {\r\n height: themes[`${item}`].spacing(5),\r\n width: themes[`${item}`].spacing(22),\r\n },\r\n textPrimary: {\r\n color: themes[`${item}`].palette.primary.dark\r\n }\r\n },\r\n MuiIconButton: {\r\n root: {\r\n color: themes[`${item}`].palette.secondary.main,\r\n borderRadius: 5,\r\n }\r\n },\r\n \r\n MuiTablePagination: {\r\n root: {\r\n color: themes[`${item}`].palette.secondary.main,\r\n },\r\n \r\n },\r\n MuiTabs: {\r\n indicator: {\r\n backgroundColor: themes[`${item}`].palette.primary.darker,\r\n height: 4,\r\n }\r\n },\r\n MuiTab: {\r\n selected: {\r\n color: themes[`${item}`].palette.primary.darker,\r\n },\r\n textColorInherit: {\r\n color: themes[`${item}`].palette.primary.dark,\r\n }\r\n },\r\n RaFormInput: {\r\n input: {\r\n width: \"auto\",\r\n },\r\n },\r\n RaListToolbar: {\r\n toolbar: {\r\n backgroundColor: themes[`${item}`].palette.lighter,\r\n [themes[`${item}`].breakpoints.up('md')]: {\r\n paddingLeft: themes[`${item}`].spacing(4),\r\n paddingRight: themes[`${item}`].spacing(4),\r\n },\r\n [themes[`${item}`].breakpoints.down('md')]: {\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n paddingRight: themes[`${item}`].spacing(2),\r\n paddingLeft: themes[`${item}`].spacing(2),\r\n \"& .filter-field\": {\r\n width: \"100%\",\r\n }\r\n },\r\n },\r\n },\r\n RaFilterForm: {\r\n form: {\r\n width: \"100%\",\r\n },\r\n },\r\n RaTopToolbar: {\r\n root: {\r\n [themes[`${item}`].breakpoints.down(\"md\")]: {\r\n width: \"100%\",\r\n paddingRight: 0,\r\n paddingLeft: 0,\r\n \"& button\": {\r\n backgroundColor: themes[`${item}`].palette.primary.main,\r\n color: themes[`${item}`].palette.common.white,\r\n borderRadius: '5px',\r\n flexGrow: 1,\r\n },\r\n }\r\n }\r\n },\r\n RaFilterFormInput: {\r\n spacer: {\r\n display: \"none\"\r\n }\r\n },\r\n RaSearchInput: {\r\n input: {\r\n boxSizing: \"border-box\",\r\n width: \"300px\",\r\n [themes[`${item}`].breakpoints.down(\"sm\")]: {\r\n width: \"100%\",\r\n },\r\n \"& .MuiOutlinedInput-root\": {\r\n // borderRadius: 20,\r\n border: \"1px solid #F2F2F2\",\r\n // boxShadow: \"0px 2px 4px rgba(0, 0, 0, 0.1)\",\r\n backgroundColor: \"#F3F3F9\",\r\n \"&:focus\": {\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"1px solid #F2F2F2\",\r\n },\r\n },\r\n },\r\n \"& .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline\": {\r\n border: \"1px solid #F3F3F9\",\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"1px solid #F2F2F2\",\r\n \r\n },\r\n \"@media (hover: none)\": {\r\n \"& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n border: \"1px solid #F2F2F2\", // Adjust the border as needed\r\n }\r\n }\r\n }\r\n },\r\n MuiInputBase: {\r\n root: {\r\n backgroundColor: \"#FFFFFF\",\r\n },\r\n },\r\n RaList: {\r\n content: {\r\n boxShadow: \"none\",\r\n },\r\n root: {\r\n // backgroundColor: \"#DDF6FF\",\r\n backgroundColor: \"#FFF\",\r\n borderRadius: 5,\r\n boxShadow: \"rgb(0 0 0 / 20%) 0px 2px 1px -1px, rgb(0 0 0 / 14%) 0px 1px 1px 0px, rgb(0 0 0 / 12%) 0px 1px 3px 0px;\",\r\n },\r\n },\r\n MuiTableCell: {\r\n root: {\r\n borderBottom: \"none\",\r\n },\r\n sizeSmall: {\r\n \"&:last-child\": {\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n },\r\n textAlign: 'center'\r\n // padding: \"6px 0px 6px 60px\",\r\n },\r\n },\r\n RaDatagrid: {\r\n headerCell: {\r\n backgroundColor: \"#FFF\",\r\n color: themes[`${item}`].palette.primary.darker,\r\n borderBottom: '1px solid #E9EbEC',\r\n // borderLeft: \"1px solid #E9EbEC\",\r\n fontWeight: 700,\r\n \"&:first-child\": {\r\n borderLeft: \"none\"\r\n },\r\n fontSize: 14,\r\n letterSpacing: '0.11562em'\r\n },\r\n rowCell: {\r\n borderBottom: \"1px solid #E9EbEC\",\r\n borderRight: \"1px solid #E9EbEC\"\r\n },\r\n rowOdd: {\r\n backgroundColor: \"#ffffff\",\r\n },\r\n rowEven: {\r\n backgroundColor: \"#FBFBFB\",\r\n \"&:hover\": {\r\n backgroundColor: \"inherit\",\r\n },\r\n },\r\n rowBorder: {\r\n border: '1px solid #000'\r\n },\r\n expandIcon: {\r\n transform: 'rotate(0deg)',\r\n marginLeft: 20,\r\n border: '1px solid #4F4F4F',\r\n padding: 0\r\n },\r\n expandIconCell: {\r\n borderBottom: \"1px solid #E9EbEC\"\r\n },\r\n expanded: {\r\n transform: 'rotate(180deg)',\r\n }\r\n },\r\n MuiAccordion: {\r\n root: {\r\n \"&::before\": {\r\n backgroundColor: 'unset'\r\n }\r\n }\r\n },\r\n MuiChip: {\r\n label: {\r\n whiteSpace: 'normal'\r\n }\r\n },\r\n MuiTypography: {\r\n noWrap: {\r\n \"@media only screen and (max-width: 600px)\": {\r\n whiteSpace: \"normal\",\r\n textAlign: 'center',\r\n }\r\n }\r\n },\r\n MuiCssBaseline: {\r\n '@global': {\r\n '*': {\r\n 'scrollbar-width': 'thin',\r\n },\r\n '*::-webkit-scrollbar': {\r\n width: '4px',\r\n height: '4px',\r\n }\r\n }\r\n }\r\n };\r\n})\r\n\r\n\r\nexport default themes;","export const BUSINESS_READLINESS_MASTER_DATA_QUERY_LIST = `query($type: ReadinessGovernance!){\n getReadinessGovernanceMasters(type: $type){\n id\n name\n }\n }`\nexport const BUSINESS_READLINESS_UPDATE_MUTATION = `mutation (\n $id: ID!\n $name: String!\n ){\n updateReadinessGovernanceMaster(\n id: $id\n name: $name\n ){\n id\n name\n }\n }`\nexport const BUSINESS_READLINESS_CREATE_MUTATION = `mutation (\n $projectId: Int!\n $type: ReadinessGovernance!\n $readinessGovernanceAssessments: [ReadinessGovernanceAssessmentInput!]\n ) {\n createReadinessGovernanceAssessments(\n projectId: $projectId\n type: $type\n readinessGovernanceAssessments: $readinessGovernanceAssessments\n ) {\n id\n name\n assessment\n commentary\n }\n }`;\n\nexport const BUSINESS_READLINESS_QUERY = `query(\n $projectId: Int!, \n $type: ReadinessGovernance!\n ) {\n getReadinessGovernanceAssessments(\n projectId: $projectId, \n type: $type) {\n id\n name\n assessment\n commentary\n type\n createdAt\n }\n }\n `\n\n\n","\nexport const RISK_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY = `query( $projectId: Int) {\n getRiskAssessmentMasters(projectId: $projectId) {\n id\n riskName\n riskInfo\n riskDescription\n impactDescription\n }\n }`\n\nexport const RISK_ASSESSMENT_MASTER_UPDATE_MUTATION = `mutation(\n $id: ID!\n $riskInfo: String!\n $riskDescription: String!\n $impactDescription: String!\n) {\n updateRiskAssessmentMaster(\n id: $id\n riskInfo: $riskInfo\n riskDescription: $riskDescription\n impactDescription: $impactDescription\n ) {\n id\n riskName\n riskInfo\n riskDescription\n impactDescription\n }\n}\n`","import {\n ASSESSMENT_SECTION_CREATE_MUTATION, ASSESSMENT_SECTION_DELETE_MUTATION, ASSESSMENT_SECTION_LIST_QUERY,\n ASSESSMENT_SECTION_RETRIEVE_QUERY,\n ASSESSMENT_SECTION_UPDATE_MUTATION\n} from \"./assessmentSection\";\nimport {\n ASSESSMENT_SUB_TYPE_LIST_QUERY,\n ASSESSMENT_SUB_TYPE_RETRIEVE_QUERY\n} from \"./assessmentSubType\";\nimport {\n ASSESSMENT_TYPE_RETRIEVE_QUERY, ASSESSMENT_TYPE_UPDATE_MUTATION\n} from \"./assessmentType\";\nimport {\n ASSESSMENT_VALUE_CREATE_MUTATION, ASSESSMENT_VALUE_DELETE_MUTATION, ASSESSMENT_VALUE_LIST_QUERY,\n ASSESSMENT_VALUE_RETRIEVE_QUERY,\n ASSESSMENT_VALUE_UPDATE_MUTATION\n} from \"./assessmentValue\";\nimport { BUSINESS_READLINESS_CREATE_MUTATION, BUSINESS_READLINESS_MASTER_DATA_QUERY_LIST, BUSINESS_READLINESS_QUERY, BUSINESS_READLINESS_UPDATE_MUTATION } from \"./businessReadliness\";\nimport {\n ALL_BUSINESS_UNITS_TREE_RETRIEVE_QUERY,\n ALL_BUSINESS_UNITS_WITH_LEVEL_RETRIEVE_QUERY, BUSINESS_UNIT_CREATE_MUTATION, BUSINESS_UNIT_DELETE_MUTATION, BUSINESS_UNIT_LIST_QUERY,\n BUSINESS_UNIT_RETRIEVE_QUERY,\n BUSINESS_UNIT_UPDATE_MUTATION, EXPORT_BU_QUERY\n} from \"./businessUnit\";\nimport {\n ASSESSMENT_OVERVIEW_RETRIEVE_QUERY, CHANGE_ASSESSMENT_CREATE_MUTATION, CHANGE_ASSESSMENT_DELETE_MUTATION, CHANGE_ASSESSMENT_LIST_QUERY,\n CHANGE_ASSESSMENT_RETRIEVE_QUERY,\n CHANGE_ASSESSMENT_UPDATE_MUTATION, EXPORT_ALL_PROJECT_CHANGE_STATUS,\n EXPORT_CHANGE_ASSESSMENT_DATA_FOR_PDF, EXPORT_PROJECT_CHANGE_IMPACT_ASSESMENT_REPORT, OVERALL_ASSESSMENT_QUERY\n} from \"./changeAssessment\";\nimport { CHANGE_ASSESSMENT_MASTERS_BY_PROJECT_TYPE_QUERY, CHANGE_ASSESSMENT_MASTERS_BY_TYPE_UPDATE_MUTATION } from './changeAssessmentDetails';\nimport { CHANGE_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY, CHANGE_ASSESSMENT_MASTER_UPDATE_MUTATION } from \"./changeAssessmentMaster\";\nimport { EXPORT_REPORT_PDF } from \"./exportPdf\";\nimport {\n FAQ_CREATE_MUTATION, FAQ_DELETE_MUTATION, FAQ_LIST_QUERY, FAQ_UPDATE_BULK_MUTATION\n} from \"./faq\";\nimport { KPI_CRITERIA_CREATE_MUTATION, KPI_CRITERIA_LIST_QUERY } from \"./kpiCriteria\";\nimport { EXPORT_LEARNING_CENTRE_QUERY } from \"./learningCentre\";\nimport {\n DRIVER_MASTER_DATA_RETRIEVE_QUERY,\n MASTER_DATA_CREATE_MUTATION, MASTER_DATA_DELETE_MUTATION, MASTER_DATA_DRIVERS_UPDATE_MUTATION, MASTER_DATA_DRIVER_QUERY, MASTER_DATA_LIST_QUERY,\n MASTER_DATA_RETRIEVE_QUERY,\n MASTER_DATA_UPDATE_MUTATION\n} from \"./masterData\";\nimport {\n MASTER_DATA_VALUES_LIST_QUERY,\n MASTER_DATA_VALUE_RETRIEVE_QUERY\n} from \"./masterDataValue\";\nimport {\n MILESTONE_CREATE_MUTATION, MILESTONE_DELETE_MUTATION, MILESTONE_LIST_QUERY,\n MILESTONE_UPDATE_MUTATION\n} from \"./mileStone\";\nimport {\n PERMISSION_CREATE_MUTATION, PERMISSION_DELETE_MUTATION, PERMISSION_LIST_QUERY,\n PERMISSION_RETRIEVE_QUERY,\n PERMISSION_UPDATE_MUTATION\n} from \"./permission\";\nimport {\n ALL_BUS_HEAT_MAP_QUERY, ALL_PROJECTS_HEAT_MAP_QUERY, EXPORT_CHANGE_IMPACT_QUERY,\n EXPORT_NUM_OF_PROJECTS_QUERY, EXPORT_PROJECT_MILESTONE, EXPORT_PROJECT_QUERY,\n MONTHLY_BU_HEAT_MAP_QUERY,\n POJECT_STEP_COUNTER_MUTATION,\n PROJECT_CREATE_MUTATION, PROJECT_DELETE_MUTATION, PROJECT_FOR_CHANGE_ASSESSMENTS_LIST_QUERY,\n PROJECT_FOR_CHANGE_ASSESSMENTS_RETRIEVE_QUERY, PROJECT_HEAT_MAP_QUERY, PROJECT_LIST_QUERY,\n PROJECT_RETRIEVE_QUERY,\n PROJECT_UPDATE_MUTATION\n} from \"./project\";\nimport { PROJECT_FORECAST_CREATE_MUTATION, PROJECT_FORECAST_LIST_QUERY } from \"./projectForecast\";\nimport {\n BU_WISE_PROJECT_FORECASTS_RETRIEVE_QUERY, PROJECT_COUNT_BY_DRIVER_RETRIEVE_QUERY, PROJECT_DRIVER_WISE_PROJECT_FORECASTS_RETRIEVE_QUERY\n} from \"./reports\";\nimport { RISK_ASSESSMENT_CREATE_MUTATION, RISK_ASSESSMENT_QUERY } from \"./riskAssesment\";\nimport { RISK_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY, RISK_ASSESSMENT_MASTER_UPDATE_MUTATION } from \"./riskAssessmentMaster\";\nimport { RISK_MATRIX_MASTERS_BY_TYPE_LIST_QUERY, RISK_MATRIX_MASTER_UPDATE_MUTATION } from \"./riskMatrixMaster\";\nimport {\n ROLE_CREATE_MUTATION, ROLE_DELETE_MUTATION, ROLE_LIST_QUERY,\n ROLE_RETRIEVE_QUERY,\n ROLE_UPDATE_MUTATION\n} from \"./role\";\nimport {\n ALL_BU_SME_REQ_RETRIEVE_QUERY, ALL_PROJECT_SME_REQ_RETRIEVE_QUERY, EXPORT_All_BUS_SME_REQ,\n EXPORT_All_PROJECT_SME_REQ, EXPORT_SME_REQUIRED, EXPORT_SME_REQUIRED_REPORT, MONTHLY_SME_REQUIREMENTS_RETRIEVE_QUERY, SME_REQUIREMENT_CREATE_MUTATION, SME_REQUIREMENT_DELETE_MUTATION, SME_REQUIREMENT_LIST_QUERY,\n SME_REQUIREMENT_RETRIEVE_QUERY,\n SME_REQUIREMENT_UPDATE_MUTATION\n} from \"./smeRequirement\";\nimport { THEME_CUSTOMIZATION_CREATE_MUTATION, THEME_CUSTOMIZATION_DELETE_MUTATION, THEME_CUSTOMIZATION_UPDATE_MUTATION, THEME_CUSTOMIZATION_VALUE_RETRIEVE_QUERY } from \"./themeCustomization\";\nimport { EXPORT_TOOLS_AND_TEMPLATE_QUERY } from \"./toolsAndTemplate\";\nimport {\n CHANGE_PASSWORD_MUTATION, EXPORT_CLIENT_QUERY, EXPORT_USER_QUERY, LOGIN_MUTATION, SET_NEW_PASSWORD_MUTATION, USER_CREATE_MUTATION, USER_DELETE_MUTATION, USER_LIST_QUERY,\n USER_RETRIEVE_QUERY,\n USER_UPDATE_MUTATION\n} from \"./user\";\n\nexport const Query = {\n User: {\n create: {\n query_name: \"createUser\",\n query: USER_CREATE_MUTATION,\n },\n list: {\n query_name: \"allUsers\",\n query: USER_LIST_QUERY,\n },\n retrieve: {\n query_name: \"user\",\n query: USER_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateUser\",\n query: USER_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteUser\",\n query: USER_DELETE_MUTATION,\n },\n },\n Role: {\n create: {\n query_name: \"createRole\",\n query: ROLE_CREATE_MUTATION,\n },\n list: {\n query_name: \"allRoles\",\n query: ROLE_LIST_QUERY,\n },\n retrieve: {\n query_name: \"role\",\n query: ROLE_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateRole\",\n query: ROLE_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteRole\",\n query: ROLE_DELETE_MUTATION,\n },\n },\n Permission: {\n create: {\n query_name: \"createPermission\",\n query: PERMISSION_CREATE_MUTATION,\n },\n list: {\n query_name: \"allPermissions\",\n query: PERMISSION_LIST_QUERY,\n },\n retrieve: {\n query_name: \"permission\",\n query: PERMISSION_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updatePermission\",\n query: PERMISSION_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deletePermission\",\n query: PERMISSION_DELETE_MUTATION,\n },\n },\n BusinessUnit: {\n create: {\n query_name: \"createBusinessUnit\",\n query: BUSINESS_UNIT_CREATE_MUTATION,\n },\n list: {\n query_name: \"allBusinessUnits\",\n query: BUSINESS_UNIT_LIST_QUERY,\n },\n retrieve: {\n query_name: \"businessUnit\",\n query: BUSINESS_UNIT_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateBusinessUnit\",\n query: BUSINESS_UNIT_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteBusinessUnit\",\n query: BUSINESS_UNIT_DELETE_MUTATION,\n },\n },\n ChangeAssessmentMaster: {\n retrieve: {\n query_name: \"getAllChangeAssessmentMastersByType\",\n query: CHANGE_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY,\n },\n update: {\n query_name: \"updateChangesAssessmentMaster\",\n query: CHANGE_ASSESSMENT_MASTER_UPDATE_MUTATION,\n }\n\n },\n ChangeAssessmentDetails: {\n retrieve: {\n query_name: 'getChangeAssessmentDetails',\n query: CHANGE_ASSESSMENT_MASTERS_BY_PROJECT_TYPE_QUERY\n },\n update: {\n query_name: \"updateChangeAssessmentDetails\",\n query: CHANGE_ASSESSMENT_MASTERS_BY_TYPE_UPDATE_MUTATION\n }\n },\n MasterData: {\n create: {\n query_name: \"createMasterData\",\n query: MASTER_DATA_CREATE_MUTATION,\n },\n list: {\n query_name: \"allMasterData\",\n query: MASTER_DATA_LIST_QUERY,\n },\n retrieve: {\n query_name: \"masterData\",\n query: MASTER_DATA_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateMasterData\",\n query: MASTER_DATA_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteMasterData\",\n query: MASTER_DATA_DELETE_MUTATION,\n }\n },\n MasterDataDriver: {\n retrieve: {\n query_name: 'masterDataForDriver',\n query: MASTER_DATA_DRIVER_QUERY\n },\n update: {\n query_name: \"updateMasterDataForDriver\",\n query: MASTER_DATA_DRIVERS_UPDATE_MUTATION,\n },\n },\n ProjecDriverMasterData: {\n retrieve: {\n query_name: 'driverMasterData',\n query: DRIVER_MASTER_DATA_RETRIEVE_QUERY\n },\n },\n MasterDataValue: {\n list: {\n query_name: \"allMasterDataValues\",\n query: MASTER_DATA_VALUES_LIST_QUERY,\n },\n retrieve: {\n query_name: \"masterDataValue\",\n query: MASTER_DATA_VALUE_RETRIEVE_QUERY,\n },\n },\n Project: {\n create: {\n query_name: \"createProject\",\n query: PROJECT_CREATE_MUTATION,\n },\n list: {\n query_name: \"allProjects\",\n query: PROJECT_LIST_QUERY,\n },\n retrieve: {\n query_name: \"project\",\n query: PROJECT_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateProject\",\n query: PROJECT_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteProject\",\n query: PROJECT_DELETE_MUTATION,\n },\n updateStep: {\n query_name: \"updateProjectStatusAndStep\",\n query: POJECT_STEP_COUNTER_MUTATION\n }\n },\n ProjectForCA: {\n list: {\n query_name: \"allProjectsForChangeAssessments\",\n query: PROJECT_FOR_CHANGE_ASSESSMENTS_LIST_QUERY,\n },\n\n retrieve: {\n query_name: \"projectChangeAssessment\",\n query: PROJECT_FOR_CHANGE_ASSESSMENTS_RETRIEVE_QUERY,\n },\n },\n ProjectHeatMap: {\n retrieve: {\n query_name: \"projectHeatMap\",\n query: PROJECT_HEAT_MAP_QUERY,\n },\n },\n RiskAssessmentMaster: {\n update: {\n query_name: \"updateRiskAssessmentMaster\",\n query: RISK_ASSESSMENT_MASTER_UPDATE_MUTATION\n },\n list: {\n query_name: \"getRiskAssessmentMasters\",\n query: RISK_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY\n },\n },\n RiskMatrixMaster: {\n list: {\n query_name: \"getRiskMatrixMasters\",\n query: RISK_MATRIX_MASTERS_BY_TYPE_LIST_QUERY\n },\n update: {\n query_name: \"updateRiskMatrixMaster\",\n query: RISK_MATRIX_MASTER_UPDATE_MUTATION\n }\n },\n RiskAssessment: {\n list: {\n query_name: \"getRiskAssessmentMasters\",\n query: RISK_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY\n },\n create: {\n query_name: \"createRiskAssessment\",\n query: RISK_ASSESSMENT_CREATE_MUTATION\n },\n retrieve: {\n query_name: \"getRiskAssessments\",\n query: RISK_ASSESSMENT_QUERY\n }\n },\n BusinessReadlinessMaster: {\n list: {\n query_name: \"getReadinessGovernanceMasters\",\n query: BUSINESS_READLINESS_MASTER_DATA_QUERY_LIST\n },\n update: {\n query_name: \"updateReadinessGovernanceMaster\",\n query: BUSINESS_READLINESS_UPDATE_MUTATION\n }\n },\n BusinessReadliness: {\n list: {\n query_name: \"getReadinessGovernanceMasters\",\n query: BUSINESS_READLINESS_MASTER_DATA_QUERY_LIST\n },\n create: {\n query_name: \"createReadinessGovernanceAssessments\",\n query: BUSINESS_READLINESS_CREATE_MUTATION\n },\n retrieve: {\n query_name: \"getReadinessGovernanceAssessments\",\n query: BUSINESS_READLINESS_QUERY\n }\n },\n AllProjectsHeatMap: {\n retrieve: {\n query_name: \"allProjectsHeatMap\",\n query: ALL_PROJECTS_HEAT_MAP_QUERY,\n },\n },\n AllBusHeatMap: {\n retrieve: {\n query_name: \"allBuHeatMap\",\n query: ALL_BUS_HEAT_MAP_QUERY,\n },\n },\n ChangeAssessment: {\n create: {\n query_name: \"createChangeAssessment\",\n query: CHANGE_ASSESSMENT_CREATE_MUTATION,\n },\n list: {\n query_name: \"allChangeAssessments\",\n query: CHANGE_ASSESSMENT_LIST_QUERY,\n },\n retrieve: {\n query_name: \"changeAssessment\",\n query: CHANGE_ASSESSMENT_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateChangeAssessment\",\n query: CHANGE_ASSESSMENT_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteChangeAssessment\",\n query: CHANGE_ASSESSMENT_DELETE_MUTATION,\n },\n },\n AssessmentOverview: {\n retrieve: {\n query_name: \"assessmentOverview\",\n query: ASSESSMENT_OVERVIEW_RETRIEVE_QUERY,\n },\n },\n OverallAssessment: {\n retrieve: {\n query_name: \"overallAssessment\",\n query: OVERALL_ASSESSMENT_QUERY,\n },\n },\n AssessmentValue: {\n create: {\n query_name: \"createAssessmentValue\",\n query: ASSESSMENT_VALUE_CREATE_MUTATION,\n },\n list: {\n query_name: \"allAssessmentValues\",\n query: ASSESSMENT_VALUE_LIST_QUERY,\n },\n retrieve: {\n query_name: \"assessmentValue\",\n query: ASSESSMENT_VALUE_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateAssessmentValue\",\n query: ASSESSMENT_VALUE_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteAssessmentValue\",\n query: ASSESSMENT_VALUE_DELETE_MUTATION,\n },\n },\n AssessmentSection: {\n create: {\n query_name: \"createAssessmentSection\",\n query: ASSESSMENT_SECTION_CREATE_MUTATION,\n },\n list: {\n query_name: \"allAssessmentSections\",\n query: ASSESSMENT_SECTION_LIST_QUERY,\n },\n retrieve: {\n query_name: \"assessmentSection\",\n query: ASSESSMENT_SECTION_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateAssessmentSection\",\n query: ASSESSMENT_SECTION_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteAssessmentSection\",\n query: ASSESSMENT_SECTION_DELETE_MUTATION,\n },\n },\n AssessmentSubType: {\n list: {\n query_name: \"allAssessmentSubTypes\",\n query: ASSESSMENT_SUB_TYPE_LIST_QUERY,\n },\n retrieve: {\n query_name: \"assessmentSubType\",\n query: ASSESSMENT_SUB_TYPE_RETRIEVE_QUERY,\n },\n },\n AssessmentType: {\n update: {\n query_name: \"updateAssessmentType\",\n query: ASSESSMENT_TYPE_UPDATE_MUTATION,\n },\n retrieve: {\n query_name: \"assessmentType\",\n query: ASSESSMENT_TYPE_RETRIEVE_QUERY,\n },\n },\n KpiCriteria: {\n create: {\n query_name: \"createKpiCriterias\",\n query: KPI_CRITERIA_CREATE_MUTATION,\n },\n list: {\n query_name: \"getKpiCriterias\",\n query: KPI_CRITERIA_LIST_QUERY,\n },\n },\n SmeRequirement: {\n create: {\n query_name: \"createSmeRequirements\",\n query: SME_REQUIREMENT_CREATE_MUTATION,\n },\n list: {\n query_name: \"allSmeRequirements\",\n query: SME_REQUIREMENT_LIST_QUERY,\n },\n retrieve: {\n query_name: \"assessmentSmeRequirement\",\n query: SME_REQUIREMENT_RETRIEVE_QUERY,\n },\n update: {\n query_name: \"updateSmeRequirements\",\n query: SME_REQUIREMENT_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteSmeRequirements\",\n query: SME_REQUIREMENT_DELETE_MUTATION,\n },\n },\n MonthlySmeRequirements: {\n retrieve: {\n query_name: \"monthlySmeRequirements\",\n query: MONTHLY_SME_REQUIREMENTS_RETRIEVE_QUERY,\n },\n },\n AllProjectsSmeReq: {\n retrieve: {\n query_name: \"allProjectsSmeReq\",\n query: ALL_PROJECT_SME_REQ_RETRIEVE_QUERY,\n },\n },\n AllBusSmeReq: {\n retrieve: {\n query_name: \"allBusinessUnitsSmeReq\",\n query: ALL_BU_SME_REQ_RETRIEVE_QUERY,\n },\n },\n AllBusinessUnitsTree: {\n retrieve: {\n query_name: \"allBusinessUnitChildren\",\n query: ALL_BUSINESS_UNITS_TREE_RETRIEVE_QUERY,\n },\n },\n ExportAllBusSmeReq: {\n retrieve: {\n query_name: \"exportAllBusSmeReq\",\n query: EXPORT_All_BUS_SME_REQ,\n },\n },\n ExportAllProjectSmeReq: {\n retrieve: {\n query_name: \"exportAllProjectSmeReq\",\n query: EXPORT_All_PROJECT_SME_REQ,\n },\n },\n ExportMileStone: {\n retrieve: {\n query_name: \"exportMileStone\",\n query: EXPORT_PROJECT_MILESTONE,\n },\n },\n ExportChangeImpactAssesmentReport: {\n retrieve: {\n query_name: \"exportchangeImpactAssesmentReport\",\n query: EXPORT_PROJECT_CHANGE_IMPACT_ASSESMENT_REPORT,\n },\n },\n ExportUsers: {\n retrieve: {\n query_name: \"exportUsers\",\n query: EXPORT_USER_QUERY,\n },\n },\n ExportClients: {\n retrieve: {\n query_name: \"exportClients\",\n query: EXPORT_CLIENT_QUERY,\n },\n },\n ExportBUs: {\n retrieve: {\n query_name: \"exportBUs\",\n query: EXPORT_BU_QUERY,\n },\n },\n ExportProjects: {\n retrieve: {\n query_name: \"exportProjects\",\n query: EXPORT_PROJECT_QUERY,\n },\n },\n ExportChangeImpactOverview: {\n retrieve: {\n query_name: \"exportChangeImpactOverview\",\n query: EXPORT_CHANGE_IMPACT_QUERY,\n },\n },\n ExportNumOfProjects: {\n retrieve: {\n query_name: \"exportNumOfProjects\",\n query: EXPORT_NUM_OF_PROJECTS_QUERY,\n },\n },\n ExportSmeRequired: {\n retrieve: {\n query_name: \"exportSmeRequired\",\n query: EXPORT_SME_REQUIRED,\n },\n },\n ExportSmeRequiredReport: {\n retrieve: {\n query_name: \"exportSmeRequiredReport\",\n query: EXPORT_SME_REQUIRED_REPORT,\n },\n },\n BuWiseProjectForecasts: {\n retrieve: {\n query_name: \"projectForecastsByBu\",\n query: BU_WISE_PROJECT_FORECASTS_RETRIEVE_QUERY,\n },\n },\n AllMonthlyBuHeatMap: {\n retrieve: {\n query_name: \"allMonthlyBuHeatMap\",\n query: MONTHLY_BU_HEAT_MAP_QUERY,\n },\n },\n ProjectDriverWiseProjectForecasts: {\n retrieve: {\n query_name: \"projectForecastsByProjectDriver\",\n query: PROJECT_DRIVER_WISE_PROJECT_FORECASTS_RETRIEVE_QUERY,\n },\n },\n ProjectCountByDriver: {\n retrieve: {\n query_name: \"projectCountByDriver\",\n query: PROJECT_COUNT_BY_DRIVER_RETRIEVE_QUERY,\n },\n },\n login: {\n login: {\n query_name: \"login\",\n query: LOGIN_MUTATION,\n },\n },\n ChangePassword: {\n changePassword: {\n query_name: \"changePassword\",\n query: CHANGE_PASSWORD_MUTATION,\n },\n },\n SetNewPassword: {\n setNewPassword: {\n query_name: \"setNewPassword\",\n query: SET_NEW_PASSWORD_MUTATION,\n },\n },\n Milestone: {\n create: {\n query_name: \"createMilestones\",\n query: MILESTONE_CREATE_MUTATION,\n },\n list: {\n query_name: \"allMilestones\",\n query: MILESTONE_LIST_QUERY,\n },\n update: {\n query_name: \"updateMilestones\",\n query: MILESTONE_UPDATE_MUTATION,\n },\n delete: {\n query_name: \"deleteMilestone\",\n query: MILESTONE_DELETE_MUTATION,\n },\n },\n Faq: {\n create: {\n query_name: \"createFaq\",\n query: FAQ_CREATE_MUTATION,\n },\n list: {\n query_name: \"allFaqs\",\n query: FAQ_LIST_QUERY,\n },\n update: {\n query_name: \"createOrUpdateFaqs\",\n query: FAQ_UPDATE_BULK_MUTATION,\n },\n delete: {\n query_name: \"deleteFaq\",\n query: FAQ_DELETE_MUTATION,\n },\n },\n ProjectForecast: {\n list: {\n query_name: \"allProjectForecasts\",\n query: PROJECT_FORECAST_LIST_QUERY,\n },\n create: {\n query_name: \"createProjectForecasts\",\n query: PROJECT_FORECAST_CREATE_MUTATION\n }\n },\n ExportAllProjectChangeStatus: {\n retrieve: {\n query_name: \"exportAllProjectChangeStatus\",\n query: EXPORT_ALL_PROJECT_CHANGE_STATUS,\n },\n },\n ExportChangeAssessmentDataForPDF: {\n retrieve: {\n query_name: \"exportChangeAssessmentDataForPDF\",\n query: EXPORT_CHANGE_ASSESSMENT_DATA_FOR_PDF,\n },\n },\n AllBusinessUnitsWithLevel: {\n retrieve: {\n query_name: \"allBusinessUnitsWithLevel\",\n query: ALL_BUSINESS_UNITS_WITH_LEVEL_RETRIEVE_QUERY,\n },\n },\n ExportToolsAndTemplates: {\n retrieve: {\n query_name: \"exportToolsAndTemplate\",\n query: EXPORT_TOOLS_AND_TEMPLATE_QUERY\n }\n },\n ExportLearningCentre: {\n retrieve: {\n query_name: \"exportTrainingCentreGuide\",\n query: EXPORT_LEARNING_CENTRE_QUERY\n }\n },\n ThemeCustomize: {\n create: {\n query_name: \"createThemeCustomization\",\n query: THEME_CUSTOMIZATION_CREATE_MUTATION\n },\n update: {\n query_name: \"updateThemeCustomization\",\n query: THEME_CUSTOMIZATION_UPDATE_MUTATION\n },\n retrieve: {\n query_name: \"getTheme\",\n query: THEME_CUSTOMIZATION_VALUE_RETRIEVE_QUERY,\n },\n delete: {\n query_name: \"delteThemeCustomization\",\n query: THEME_CUSTOMIZATION_DELETE_MUTATION\n }\n },\n ExportReportPdf: {\n retrieve: {\n query_name: \"exportPDF\",\n query: EXPORT_REPORT_PDF\n }\n }\n};\n","export const LOGIN_MUTATION = `mutation($email: String!, $password: String!) {\n login(email: $email, password: $password) {\n token\n user {\n id\n fullName\n email\n isSuperAdmin\n isCustomerAdmin\n isFirstTimeLogin\n customerAdminId\n roles {\n id\n name\n }\n permissions {\n id\n name\n resource\n action\n allow\n }\n }\n pbi_access_token\n pbi_refresh_token\n }\n}`\n\nexport const USER_CREATE_MUTATION = `mutation(\n $surname: String\n $firstName: String!\n $fullName: String!\n $email: String!\n $companyName: String\n $location: String\n $industry: String\n $isManagedService: Boolean\n $customerAdminName: String\n $description: String\n $businessUnitId: Int\n $roles: [Int!]\n ) {\n createUser(\n surname: $surname\n firstName: $firstName\n fullName: $fullName\n email: $email\n companyName: $companyName\n location: $location\n industry: $industry\n isManagedService: $isManagedService\n customerAdminName: $customerAdminName\n description: $description\n businessUnitId: $businessUnitId\n roles: $roles\n ) {\n id\n surname\n firstName\n fullName\n email\n companyName\n location\n industry\n isManagedService\n customerAdminName\n description\n status\n isFirstTimeLogin\n businessUnit {\n id\n name\n }\n roles {\n id\n name\n }\n }\n }`\n\nexport const USER_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: UserFilter!\n ) {\n allUsers(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n surname\n firstName\n fullName\n email\n companyName\n location\n industry\n isManagedService\n customerAdminName\n description\n status\n isDisabled\n isFirstTimeLogin\n lastLoggedInAt\n businessUnit {\n id\n name\n }\n roles {\n id\n name\n }\n }\n totalCount\n }\n }`\n\n\nexport const USER_RETRIEVE_QUERY = `query($id: Int!) {\n user(id: $id) {\n id\n surname\n firstName\n fullName\n email\n companyName\n location\n industry\n isManagedService\n customerAdminName\n description\n status\n isCustomerAdmin\n isSuperAdmin\n isFirstTimeLogin\n isDisabled\n businessUnit {\n id\n name\n }\n roles {\n id\n name\n }\n permissions{\n id\n name\n resource\n action\n allow\n }\n }\n }`\n\nexport const USER_UPDATE_MUTATION = `mutation(\n $id: Int!\n $surname: String\n $firstName: String!\n $fullName: String\n $email: String!\n $companyName: String\n $location: String\n $industry: String\n $isManagedService: Boolean\n $customerAdminName: String\n $description: String\n $businessUnitId: Int\n $status: Boolean!\n $roles: [Int!]\n $isDisabled: Boolean\n ) {\n updateUser(\n id: $id\n surname: $surname\n firstName: $firstName\n fullName: $fullName\n email: $email\n companyName: $companyName\n location: $location\n industry: $industry\n isManagedService: $isManagedService\n customerAdminName: $customerAdminName\n description: $description\n businessUnitId: $businessUnitId\n status: $status\n roles: $roles\n isDisabled: $isDisabled\n ) {\n id\n surname\n firstName\n fullName\n email\n companyName\n location\n industry\n isManagedService\n customerAdminName\n description\n status\n isFirstTimeLogin\n \n businessUnit {\n id\n name\n }\n roles {\n id\n name\n }\n }\n }`\n\nexport const USER_DELETE_MUTATION = `mutation($id: Int!) {\n deleteUser(id: $id)\n }`\n\nexport const CHANGE_PASSWORD_MUTATION = `mutation($oldPassword: String!, $newPassword: String!) {\n changePassword(oldPassword: $oldPassword, newPassword: $newPassword) {\n token\n user {\n id\n fullName\n email\n isSuperAdmin\n isCustomerAdmin\n isFirstTimeLogin\n }\n }\n}`\n\nexport const SET_NEW_PASSWORD_MUTATION = `mutation($email: String!) {\n setNewPassword(email: $email)\n}`\n\nexport const EXPORT_USER_QUERY = `\n query{\n exportUsers\n }`\n\nexport const EXPORT_CLIENT_QUERY = `\n query{\n exportClients\n }`","export const ROLE_CREATE_MUTATION = `mutation(\n $name: String!\n $description: String\n $parentId: Int\n $permissions: [Int!]!\n ) {\n createRole(\n name: $name\n description: $description\n parentId: $parentId\n permissions: $permissions\n ) {\n id\n name\n description\n parentId\n permissions{\n id\n name\n }\n }\n }`\n\nexport const ROLE_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: RoleFilter!\n ) {\n allRoles(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n description\n parentId\n permissions{\n id\n name\n }\n }\n totalCount\n }\n }`\n\n\nexport const ROLE_RETRIEVE_QUERY = `query($id: Int!) {\n role(id: $id) {\n id\n name\n description\n permissions{\n id\n name\n }\n }\n }`\n\nexport const ROLE_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String!\n $description: String\n $parentId: Int\n $permissions: [Int!]!\n ) {\n updateRole(\n id: $id\n name: $name\n description: $description\n parentId: $parentId\n permissions: $permissions\n ) {\n id\n name\n description\n parentId\n permissions{\n id\n name\n }\n }\n }`\n\nexport const ROLE_DELETE_MUTATION = `mutation($id: Int!) {\n deleteRole(id: $id)\n }`","export const PERMISSION_CREATE_MUTATION = `mutation(\n $name: String!\n $description: String\n $resource: String!\n $action: [String!]!\n ) {\n createPermission(\n name: $name\n description: $description\n resource: $resource\n action: $action\n ) {\n id\n name\n description\n resource\n action\n allow\n }\n }`\n\nexport const PERMISSION_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: PermissionFilter!\n ) {\n allPermissions(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n description\n resource\n action\n allow\n }\n totalCount\n }\n }`\n\n\nexport const PERMISSION_RETRIEVE_QUERY = `query($id: Int!) {\n permission(id: $id) {\n id\n name\n description\n resource\n action\n allow\n }\n }`\n\nexport const PERMISSION_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String!\n $description: String\n $resource: String!\n $action: [String!]!\n ) {\n updatePermission(\n id: $id\n name: $name\n description: $description\n resource: $resource\n action: $action\n ) {\n id\n name\n description\n resource\n action\n allow\n }\n }`\n\nexport const PERMISSION_DELETE_MUTATION = `mutation($id: Int!) {\n deletePermission(id: $id)\n }`","export const BUSINESS_UNIT_LIST_QUERY = `query($page: Int, $perPage: Int, $sortField: String, $sortOrder: String, $filter: BusinessUnitFilter!){\n allBusinessUnits(page:$page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter:$filter){\n items{\n id\n name\n geography\n fte\n description\n status\n parentBusinessUnitId\n parentBusinessUnit{\n id\n name\n }\n }\n totalCount\n }\n }`\n\nexport const BUSINESS_UNIT_RETRIEVE_QUERY = `query($id: Int!) {\n businessUnit(id: $id) {\n id\n name\n geography\n fte\n description\n status\n parentBusinessUnitId\n }\n }`\n\nexport const BUSINESS_UNIT_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String\n $geography: String\n $fte: Int\n $description: String\n $status: Boolean\n $parentBusinessUnitId: Int\n) {\n updateBusinessUnit(\n id: $id\n name: $name\n geography: $geography\n fte: $fte\n description: $description\n status: $status\n parentBusinessUnitId: $parentBusinessUnitId\n ) {\n id\n name\n geography\n fte\n description\n status\n parentBusinessUnitId\n }\n}`\n\nexport const BUSINESS_UNIT_CREATE_MUTATION = `mutation(\n $name: String\n $geography: String\n $fte: Int\n $description: String\n $status: Boolean\n $parentBusinessUnitId: Int\n ) {\n createBusinessUnit(\n name: $name\n geography: $geography\n fte: $fte\n description: $description\n status: $status\n parentBusinessUnitId: $parentBusinessUnitId\n ) {\n id\n name\n geography\n fte\n description\n status\n parentBusinessUnitId\n }\n }`\n\nexport const BUSINESS_UNIT_DELETE_MUTATION = `mutation($id: Int!) {\n deleteBusinessUnit(id: $id)\n }`\n\n\nexport const EXPORT_BU_QUERY = `\nquery{\n exportBUs\n}`\n\nexport const ALL_BUSINESS_UNITS_TREE_RETRIEVE_QUERY = `query{\n allBusinessUnitChildren\n }`\n\nexport const ALL_BUSINESS_UNITS_WITH_LEVEL_RETRIEVE_QUERY = `\nquery(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: BusinessUnitLevelFilter\n) {\n allBusinessUnitsWithLevel(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n geography\n fte\n description\n status\n level\n parentBusinessUnitId\n }\n totalCount\n }\n}`","\nexport const CHANGE_ASSESSMENT_MASTERS_BY_TYPE_LIST_QUERY = `query($type: [String!]) {\n getAllChangeAssessmentMastersByType (type: $type) {\n id\n name\n type\n description\n dimensionWeight\n impactLevels {\n id\n name\n description\n dimensionScore\n }\n }\n }`\n\nexport const CHANGE_ASSESSMENT_MASTER_UPDATE_MUTATION = `mutation(\n $id: ID!\n $description: String!\n $impactLevels: [ImpactLevelInput!]!\n){\n updateChangesAssessmentMaster(\n id: $id\n description: $description\n impactLevels: $impactLevels\n ){\n id\n name\n type\n description\n impactLevels {\n id\n name\n description\n }\n }\n}`","export const CHANGE_ASSESSMENT_MASTERS_BY_TYPE_UPDATE_MUTATION = `mutation(\n $projectId: Int!\n $assessmentDetails: [ChangeAssessmentDetailsInput!]\n $assessmentScores: [AssessmentScoresInput]\n $type: [ChangeAssessmentType!]\n) {\n updateChangeAssessmentDetails(\n projectId: $projectId\n assessmentDetails: $assessmentDetails\n assessmentScores: $assessmentScores\n type: $type\n ) {\n projectId\n assessmentDetails {\n id\n projectId\n changeAssessmentMasterId\n impactLevel\n commentary\n type\n score\n }\n assessmentScores{\n id\n projectId\n overallScore\n commentary\n type\n }\n }\n }`\n\nexport const CHANGE_ASSESSMENT_MASTERS_BY_PROJECT_TYPE_QUERY = `query(\n $projectId: Int!\n $type: [ChangeAssessmentType!]\n) {\n getChangeAssessmentDetails(\n projectId: $projectId\n type: $type\n ) {\n projectId\n assessmentDetails {\n id\n projectId\n changeAssessmentMasterId\n impactLevel\n commentary\n type\n score\n }\n assessmentScores{\n id\n projectId\n overallScore\n commentary\n type\n }\n }\n}`","export const MASTER_DATA_CREATE_MUTATION = `mutation(\n $name: String!\n $type: String!\n $category: String!\n $nameDescription: String!\n $categoryDescription: String!\n $masterDataValues: [MasterDataValueInput!]\n ) {\n createMasterData(\n name: $name\n type: $type\n category: $category\n nameDescription: $nameDescription\n categoryDescription: $categoryDescription\n masterDataValues: $masterDataValues\n ) {\n id\n name\n type\n category\n nameDescription\n categoryDescription\n masterDataValues{\n id\n name\n description\n }\n }\n }`\n\nexport const MASTER_DATA_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: MasterDataFilter!\n ) {\n allMasterData(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n type\n category\n nameDescription\n categoryDescription\n }\n totalCount\n }\n }`\nexport const MASTER_DATA_DRIVER_QUERY = `query($id: Int! $clientId: Int!) {\n masterDataForDriver(\n id: $id\n clientId: $clientId) {\n id\n name\n type\n category\n nameDescription\n categoryDescription\n masterDataValues{\n id\n name\n description\n isDisabled\n }\n }\n }`\n\nexport const MASTER_DATA_RETRIEVE_QUERY = `query($id: Int!) {\n masterData(id: $id) {\n id\n name\n type\n category\n nameDescription\n categoryDescription\n masterDataValues{\n id\n name\n description\n }\n }\n }`\n export const DRIVER_MASTER_DATA_RETRIEVE_QUERY = `query($id: Int!) {\n driverMasterData(id: $id) {\n id\n name\n type\n category\n nameDescription\n categoryDescription\n masterDataValues{\n id\n name\n description\n }\n }\n }`\nexport const MASTER_DATA_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String!\n $type: String!\n $category: String!\n $nameDescription: String!\n $categoryDescription: String!\n $masterDataValues: [MasterDataValueInput!]\n ) {\n updateMasterData(\n id: $id\n name: $name\n type: $type\n category: $category\n nameDescription: $nameDescription\n categoryDescription: $categoryDescription\n masterDataValues: $masterDataValues\n\n ) {\n id\n name\n type\n category\n nameDescription\n categoryDescription\n masterDataValues{\n id\n name\n description\n }\n \n }\n }`\nexport const MASTER_DATA_DRIVERS_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String!\n $type: String!\n $category: String!\n $nameDescription: String!\n $categoryDescription: String!\n $masterDataValues: [MasterDataValueInput!]\n $clientId: Int!\n ) {\n updateMasterDataForDriver(\n id: $id\n name: $name\n type: $type\n category: $category\n nameDescription: $nameDescription\n categoryDescription: $categoryDescription\n masterDataValues: $masterDataValues\n clientId: $clientId\n\n ) {\n id\n name\n type\n category\n nameDescription\n categoryDescription\n masterDataValues{\n id\n name\n description\n isDisabled\n }\n \n }\n }`\nexport const MASTER_DATA_DELETE_MUTATION = `mutation($id: Int!) {\n deleteMasterData(id: $id)\n }`","export const MASTER_DATA_VALUES_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: MasterDataValueFilter!\n ) {\n allMasterDataValues(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n }\n totalCount\n }\n }`\n\nexport const MASTER_DATA_VALUE_RETRIEVE_QUERY = `query($id: Int!) {\n masterDataValue(id: $id) {\n id\n name\n description\n masterDataId\n }\n }`","export const PROJECT_CREATE_MUTATION = `mutation(\n $name: String!\n $projectSponsorId: Int\n $businessOwnerId: Int\n $projectDriver: String\n $startDate: Date\n $endDate: Date\n $businessUnitId: Int\n $impactedBusinessUnits: [Int]\n $changeLeaderId: Int\n $projectPhases: [ProjectPhaseInput]\n $goLiveDate: Date\n $driverDisplayName: String\n $projectStatus: String\n $changeStatus: String\n $summary: String\n $commentary: String\n $isDraft: Boolean!\n \n ) {\n createProject(\n name: $name\n projectSponsorId: $projectSponsorId\n businessOwnerId: $businessOwnerId\n projectDriver: $projectDriver\n startDate: $startDate\n endDate: $endDate\n businessUnitId: $businessUnitId\n impactedBusinessUnits: $impactedBusinessUnits\n changeLeaderId: $changeLeaderId\n projectPhases: $projectPhases\n goLiveDate: $goLiveDate\n\t driverDisplayName: $driverDisplayName\n\t projectStatus: $projectStatus\n\t changeStatus: $changeStatus\n\t summary: $summary\n\t commentary: $commentary\n\t isDraft: $isDraft\n ) {\n id\n name\n projectSponsorId\n businessOwnerId\n projectDriver\n startDate\n endDate\n businessUnitId\n businessUnit {\n id\n name\n }\n impactedBusinessUnits {\n id\n name\n }\n changeLeaderId\n changeLeader {\n id\n fullName\n }\n projectPhases {\n id\n name\n startDate\n endDate\n }\n status\n goLiveDate\n isDraft\n stepCount\n }\n }`\n\nexport const PROJECT_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: ProjectFilter!\n ) {\n allProjects(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n stepCount\n isDraft\n id\n name\n projectSponsorId\n projectSponsor {\n id\n isCustomerAdmin\n fullName\n }\n businessOwnerId\n projectDriver\n startDate\n endDate\n goLiveDate\n changeLeaderId\n businessUnitId\n changeLeader {\n id\n fullName\n }\n businessOwner {\n id\n isCustomerAdmin\n fullName\n }\n status\n impactedBusinessUnits {\n id\n name\n }\n impactedBusinessUnitIds\n }\n totalCount\n \n }\n }`\n\n\nexport const PROJECT_RETRIEVE_QUERY = `query($id: Int!) {\n project(id: $id) {\n id\n name\n projectSponsorId\n projectSponsor {\n id\n isCustomerAdmin\n fullName\n }\n businessOwnerId\n projectDriver\n driverDisplayName\n startDate\n endDate\n goLiveDate\n businessUnitId\n businessUnit {\n id\n name\n }\n businessOwner {\n id\n isCustomerAdmin\n fullName\n }\n impactedBusinessUnits {\n id\n name\n }\n changeLeaderId\n changeLeader {\n id\n fullName\n }\n projectPhases{\n id\n name\n startDate\n endDate\n }\n status\n changeStatus\n projectStatus\n isDraft\n stepCount\n commentary\n summary\n }\n }`\nexport const PROJECT_FOR_CHANGE_ASSESSMENTS_RETRIEVE_QUERY = `query($id: Int!) {\n projectChangeAssessment(id: $id) {\n id\n name\n projectSponsorId\n projectSponsor {\n id\n isCustomerAdmin\n fullName\n }\n businessOwnerId\n projectDriver\n startDate\n endDate\n goLiveDate\n businessUnitId\n businessUnit {\n id\n name\n }\n businessOwner {\n id\n isCustomerAdmin\n fullName\n }\n impactedBusinessUnits {\n id\n name\n }\n changeLeaderId\n changeLeader {\n id\n fullName\n }\n projectPhases{\n id\n name\n startDate\n endDate\n }\n projectForecasts{\n id\n week\n risk\n startDate\n endDate\n businessUnitId\n businessUnit{\n id\n name\n }\n }\n status\n }\n }`\n\nexport const PROJECT_FOR_CHANGE_ASSESSMENTS_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: ProjectFilter!\n ) {\n allProjectsForChangeAssessments(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n projectSponsorId\n projectSponsor {\n id\n isCustomerAdmin\n fullName\n }\n businessOwnerId\n projectDriver\n startDate\n endDate\n goLiveDate\n changeLeaderId\n businessUnitId\n changeLeader {\n id\n fullName\n }\n businessOwner {\n id\n isCustomerAdmin\n fullName\n }\n status\n }\n totalCount\n }\n }`\n\nexport const PROJECT_HEAT_MAP_QUERY = `query($id: Int!) {\n projectHeatMap(id: $id) {\n id\n name\n projectSponsorId\n businessOwnerId\n projectDriver\n startDate\n endDate\n businessUnitId\n businessUnit {\n id\n name\n forecasts {\n id\n week\n risk\n startDate\n endDate\n }\n }\n impactedBusinessUnits {\n id\n name\n forecasts {\n id\n week\n risk\n startDate\n endDate\n }\n }\n status\n }\n }`\n\nexport const ALL_PROJECTS_HEAT_MAP_QUERY = `query($page: Int!, $perPage: Int!, $sortField: String, $sortOrder: String, $filter: ProjectFilter) {\n allProjectsHeatMap(page: $page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) {\n totalCount\n items {\n id\n name\n projectSponsorId\n businessOwnerId\n projectDriver\n startDate\n endDate\n businessUnitId\n businessUnit {\n id\n name\n forecasts {\n id\n week\n risk\n startDate\n endDate\n }\n }\n impactedBusinessUnits {\n id\n name\n forecasts {\n id\n week\n risk\n startDate\n endDate\n }\n }\n status\n changeAssessments {\n id\n projectId\n businessUnitId\n overallChangeImpactValue\n overallChangeMgtImpactValues\n }\n }\n }\n }`\n\nexport const ALL_BUS_HEAT_MAP_QUERY = `query($businessUnitId: Int!, $startDate: Date!, $endDate: Date!) {\n allBuHeatMap(\n businessUnitId: $businessUnitId\n startDate: $startDate\n endDate: $endDate\n ) {\n startDate\n endDate\n risk\n week\n }\n }`\n\nexport const MONTHLY_BU_HEAT_MAP_QUERY = `query($businessUnitId: Int!, $startDate: Date!, $endDate: Date!) {\n allMonthlyBuHeatMap(\n businessUnitId: $businessUnitId\n startDate: $startDate\n endDate: $endDate\n ){\n risk\n startOfMonth\n endOfMonth\n }\n }`\n\nexport const PROJECT_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String!\n $projectSponsorId: Int\n $businessOwnerId: Int\n $projectDriver: String\n $startDate: Date\n $endDate: Date\n $businessUnitId: Int\n $impactedBusinessUnits: [Int]\n $changeLeaderId: Int\n $projectPhases: [ProjectPhaseInput]\n $goLiveDate: Date\n $driverDisplayName: String\n $projectStatus: String\n $changeStatus: String\n $summary: String\n $commentary: String\n $isDraft: Boolean!\n ) {\n updateProject(\n id: $id\n name: $name\n projectSponsorId: $projectSponsorId\n businessOwnerId: $businessOwnerId\n projectDriver: $projectDriver\n startDate: $startDate\n endDate: $endDate\n businessUnitId: $businessUnitId\n impactedBusinessUnits: $impactedBusinessUnits\n changeLeaderId: $changeLeaderId\n projectPhases: $projectPhases\n goLiveDate: $goLiveDate\n\t driverDisplayName: $driverDisplayName\n\t projectStatus: $projectStatus\n\t changeStatus: $changeStatus\n\t summary: $summary\n\t commentary: $commentary\n\t isDraft: $isDraft\n\n ) {\n id\n name\n projectSponsorId\n businessOwnerId\n projectDriver\n startDate\n endDate\n businessUnitId\n businessUnit {\n id\n name\n }\n impactedBusinessUnits {\n id\n name\n }\n changeLeaderId\n changeLeader {\n id\n fullName\n }\n projectPhases {\n id\n name\n startDate\n endDate\n }\n status\n goLiveDate\n }\n }`\nexport const POJECT_STEP_COUNTER_MUTATION = `mutation(\n $id: Int!,\n $isDraft: Boolean!,\n $stepCount: Int!) {\n updateProjectStatusAndStep(\n id: $id,\n isDraft: $isDraft,\n stepCount: $stepCount) {\n id\n name\n isDraft\n stepCount\n }\n}`\nexport const PROJECT_DELETE_MUTATION = `mutation($id: Int!) {\n deleteProject(id: $id)\n }`\n\nexport const EXPORT_PROJECT_QUERY = `\n query($projectsData: String!){\n exportProjects(projectsData: $projectsData)\n }`\n\nexport const EXPORT_CHANGE_IMPACT_QUERY = `\n query($changeImpactData: String!){\n exportChangeImpactOverview(changeImpactData: $changeImpactData)\n }`\n\nexport const EXPORT_NUM_OF_PROJECTS_QUERY = `\nquery($numOfProjects: String!){\n exportNumOfProjects(numOfProjects: $numOfProjects)\n}`\n\nexport const EXPORT_PROJECT_MILESTONE = `\nquery($projectMileStoneData: String!){\n exportMileStone(projectMileStoneData: $projectMileStoneData)\n}`\n\n","\nexport const RISK_MATRIX_MASTERS_BY_TYPE_LIST_QUERY = `query {\n getRiskMatrixMasters {\n id\n riskLabel\n riskDescription\n riskScore\n type\n }\n }`\n\n export const RISK_MATRIX_MASTER_UPDATE_MUTATION = `mutation(\n $id: ID!\n $riskDescription: String!\n ) {\n updateRiskMatrixMaster(\n id: $id\n riskDescription: $riskDescription\n ) {\n id\n riskLabel\n riskDescription\n riskScore\n type\n }\n }\n `","\nexport const RISK_ASSESSMENT_CREATE_MUTATION = `mutation($projectId: Int!, $riskAssessments: [RiskAssessmentInput!]!,$otherRiskAssessments: [OtherRiskAssessmentMasterInput]) {\n createRiskAssessment(\n projectId: $projectId\n riskAssessments: $riskAssessments\n otherRiskAssessments: $otherRiskAssessments\n ) {\n id\n projectId\n riskAssessmentMasterId\n consequence\n likelihood\n score\n commentary\n }\n }`;\n\n export const RISK_ASSESSMENT_QUERY = `query($projectId: Int!) {\n getRiskAssessments(\n projectId: $projectId\n ) {\n id\n projectId\n riskAssessmentMasterId\n consequence\n likelihood\n score\n commentary\n createdAt\n }\n }\n `\n\n\n ","export const CHANGE_ASSESSMENT_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: ChangeAssessmentFilter!\n) {\n allChangeAssessments(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n projectId\n businessUnitId\n createdAt\n updatedAt\n }\n totalCount\n }\n}`;\n\nexport const CHANGE_ASSESSMENT_RETRIEVE_QUERY = `query($id: Int!) {\n changeAssessment(id: $id) {\n id\n projectId\n businessUnitId\n createdAt\n updatedAt\n changeAssessmentValues {\n assessmentSectionId\n assessmentTypeId\n assessmentSubTypeId\n assessmentValueId\n assessmentSection {\n id\n name\n }\n assessmentType {\n id\n name\n }\n assessmentSubType {\n id\n name\n }\n assessmentValue {\n id\n nature\n signific\n description\n rating\n }\n }\n }\n}`;\n\nexport const CHANGE_ASSESSMENT_UPDATE_MUTATION = `mutation(\n $id: Int!\n $projectId: Int!\n $businessUnitId: Int!\n $changeAssessmentValues: [ChangeAssessmentValueInput!]\n) {\n updateChangeAssessment(\n id: $id\n projectId: $projectId\n businessUnitId: $businessUnitId\n changeAssessmentValues: $changeAssessmentValues\n ) {\n id\n }\n}`;\n\nexport const CHANGE_ASSESSMENT_CREATE_MUTATION = `mutation(\n $projectId: Int!\n $businessUnitId: Int!\n $changeAssessmentValues: [ChangeAssessmentValueInput!]\n ) {\n createChangeAssessment(\n projectId: $projectId\n businessUnitId: $businessUnitId\n changeAssessmentValues: $changeAssessmentValues\n ) {\n id\n }\n }`;\n\nexport const CHANGE_ASSESSMENT_DELETE_MUTATION = `mutation($id: Int!) {\n deleteChangeAssessment(id: $id)\n }`;\n\nexport const ASSESSMENT_OVERVIEW_RETRIEVE_QUERY = `query($projectId: Int!, $businessUnitId: Int!) {\n assessmentOverview(projectId: $projectId, businessUnitId: $businessUnitId) {\n id\n projectId\n project {\n id\n name\n startDate\n endDate\n changeLeader {\n id\n firstName\n surname\n fullName\n }\n projectSponsor {\n id\n fullName\n }\n }\n businessUnitId\n overallImpact\n overallScope\n overallChallenge\n createdAt\n updatedAt\n overallChangeImpactValue\n overallChangeMgtImpactValues\n changeManagementImpacts {\n id\n assessmentSectionId\n assessmentTypeId\n assessmentType {\n id\n name\n }\n assessmentSubTypeId\n assessmentValueId\n assessmentSubType {\n id\n name\n }\n assessmentValue {\n id\n nature\n signific\n description\n rating\n }\n }\n }\n }`;\n\nexport const OVERALL_ASSESSMENT_QUERY = `query($projectId: Int!) {\n overallAssessment(projectId: $projectId) {\n id\n projectId\n businessUnitId\n overallImpact\n overallScope\n overallChallenge\n }\n }`;\n\nexport const EXPORT_PROJECT_CHANGE_IMPACT_ASSESMENT_REPORT = `\nquery($changeAssesmentReportData: String!){\n exportchangeImpactAssesmentReport(changeAssesmentReportData: $changeAssesmentReportData)\n}`;\n\nexport const EXPORT_ALL_PROJECT_CHANGE_STATUS = `\nquery($changeStatusProjectData: String!){\n exportAllProjectChangeStatus(changeStatusProjectData: $changeStatusProjectData)\n}`;\n\nexport const EXPORT_CHANGE_ASSESSMENT_DATA_FOR_PDF = `\nquery($changeAssesmentReportDataForPDF: String!){\n exportChangeAssessmentDataForPDF(changeAssesmentReportDataForPDF: $changeAssesmentReportDataForPDF)\n}`;","export const ASSESSMENT_VALUE_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: AssessmentValueFilter!\n ) {\n allAssessmentValues(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n impactNature\n description\n significance\n rating\n assessmentSubTypes {\n id\n name\n }\n }\n totalCount\n }\n }\n `\n\nexport const ASSESSMENT_VALUE_RETRIEVE_QUERY = `query($id: Int!) {\n assessmentValue(id: $id) {\n id\n impactNature\n significance\n rating\n }\n }`\n\nexport const ASSESSMENT_VALUE_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String\n $geography: String\n $fte: Int\n $description: String\n $status: Boolean\n $parentAssessmentValueId: Int\n) {\n updateAssessmentValue(\n id: $id\n name: $name\n geography: $geography\n fte: $fte\n description: $description\n status: $status\n parentAssessmentValueId: $parentAssessmentValueId\n ) {\n id\n name\n geography\n fte\n description\n status\n parentAssessmentValueId\n }\n}`\n\nexport const ASSESSMENT_VALUE_CREATE_MUTATION = `mutation(\n $projectId: Int!\n $assessmentValueId: Int!\n $changeAssessmentValues: [AssessmentValueValueInput!]\n ) {\n createAssessmentValue(\n projectId: $projectId\n assessmentValueId: $assessmentValueId\n changeAssessmentValues: $changeAssessmentValues\n ) {\n id\n }\n }`\n\nexport const ASSESSMENT_VALUE_DELETE_MUTATION = `mutation($id: Int!) {\n deleteAssessmentValue(id: $id)\n }`","export const ASSESSMENT_SECTION_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: AssessmentSectionFilter!\n) {\n allAssessmentSections(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n assessmentTypes {\n id\n name\n description\n assessmentSubTypes {\n id\n name\n description\n assessmentValues {\n id\n nature\n description\n rating\n signific\n }\n }\n }\n }\n totalCount\n }\n}`\n\nexport const ASSESSMENT_SECTION_RETRIEVE_QUERY = `query($id: Int!) {\n assessmentValue(id: $id) {\n id\n impactNature\n significance\n rating\n }\n }`\n\nexport const ASSESSMENT_SECTION_UPDATE_MUTATION = `mutation(\n $id: Int!\n $name: String\n $geography: String\n $fte: Int\n $description: String\n $status: Boolean\n $parentAssessmentSectionId: Int\n) {\n updateAssessmentSection(\n id: $id\n name: $name\n geography: $geography\n fte: $fte\n description: $description\n status: $status\n parentAssessmentSectionId: $parentAssessmentSectionId\n ) {\n id\n name\n geography\n fte\n description\n status\n parentAssessmentSectionId\n }\n}`\n\nexport const ASSESSMENT_SECTION_CREATE_MUTATION = `mutation(\n $projectId: Int!\n $assessmentValueId: Int!\n $changeAssessmentSections: [AssessmentSectionValueInput!]\n ) {\n createAssessmentSection(\n projectId: $projectId\n assessmentValueId: $assessmentValueId\n changeAssessmentSections: $changeAssessmentSections\n ) {\n id\n }\n }`\n\nexport const ASSESSMENT_SECTION_DELETE_MUTATION = `mutation($id: Int!) {\n deleteAssessmentSection(id: $id)\n }`","export const ASSESSMENT_SUB_TYPE_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: AssessmentSubTypeFilter\n ) {\n allAssessmentSubTypes(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n name\n description\n assessmentTypeId\n assessmentType {\n id\n name\n description\n assessmentSectionId\n }\n assessmentValues {\n id\n nature\n description\n signific\n rating\n }\n }\n totalCount\n }\n }`\n\nexport const ASSESSMENT_SUB_TYPE_RETRIEVE_QUERY = `query($id: Int!) {\n assessmentSubType(id: $id) {\n id\n name\n description\n assessmentTypeId\n assessmentType {\n id\n name\n description\n assessmentSectionId\n }\n assessmentValues {\n id\n nature\n description\n signific\n rating\n }\n }\n }`","export const ASSESSMENT_TYPE_UPDATE_MUTATION = `mutation(\n $id: Int!\n $assessmentTypeDescription: String!\n $assessmentSubTypeId: Int!\n $assessmentSubTypeDescription: String!\n $assessmentValues: [AssessmentValueInput!]!\n ) {\n updateAssessmentType(\n id: $id\n assessmentTypeDescription: $assessmentTypeDescription\n assessmentSubTypeId: $assessmentSubTypeId\n assessmentSubTypeDescription: $assessmentSubTypeDescription\n assessmentValues: $assessmentValues\n ) {\n id\n name\n description\n assessmentSectionId\n assessmentSubTypes {\n id\n name\n description\n assessmentTypeId\n assessmentValues {\n id\n nature\n description\n signific\n rating\n }\n }\n }\n }`\n\nexport const ASSESSMENT_TYPE_RETRIEVE_QUERY = `query($id: Int!) {\n assessmentType(id: $id) {\n id\n name\n description\n assessmentSectionId\n assessmentSubTypes {\n id\n name\n description\n assessmentTypeId\n assessmentValues {\n id\n nature\n description\n signific\n rating\n }\n }\n }\n }`","export const KPI_CRITERIA_LIST_QUERY = `query(\n $projectId: Int!, \n $type: KpiType!\n ) {\n getKpiCriterias(\n projectId: $projectId, \n type: $type) {\n projectId\n kpi\n assessment\n commentary\n type\n createdAt\n }\n }`\n\nexport const KPI_CRITERIA_CREATE_MUTATION = ` mutation (\n $projectId: Int!\n $type: KpiType!\n $kpiCriterias: [KpiCriteriasInput!]\n ) {\n createKpiCriterias(\n projectId: $projectId\n type: $type\n kpiCriterias: $kpiCriterias\n ) {\n id\n kpi\n assessment\n commentary\n }\n }`\n","export const SME_REQUIREMENT_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: SmeRequirementFilter!\n ) {\n allSmeRequirements(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n projectId\n businessUnitId\n businessUnit{\n id\n name\n }\n month\n forecastEmployees\n employees\n commentary\n updatedAt\n }\n totalCount\n }\n }`\n\nexport const SME_REQUIREMENT_RETRIEVE_QUERY = `query($id: Int!) {\n smeRequirement(id: $id) {\n id\n projectId\n businessUnitId\n startDate\n endDate\n employees\n }\n }`\n\nexport const SME_REQUIREMENT_UPDATE_MUTATION = `mutation(\n $projectId: Int!\n $smeRequirements: [SmeRequirementUpdInput!]!\n ) {\n updateSmeRequirements(\n projectId: $projectId\n smeRequirements: $smeRequirements\n ) {\n id\n projectId\n businessUnitId\n month\n forecastEmployees\n employees\n commentary\n }\n }`\n\nexport const SME_REQUIREMENT_CREATE_MUTATION = `mutation(\n $projectId: Int!\n $smeRequirements: [SmeRequirementInput!]!\n ) {\n createSmeRequirements(\n projectId: $projectId\n smeRequirements: $smeRequirements\n ) {\n id\n projectId\n businessUnitId\n month\n forecastEmployees\n employees\n commentary\n }\n }`\n\nexport const SME_REQUIREMENT_DELETE_MUTATION = `mutation($id: Int!) {\n deleteSmeRequirement(id: $id)\n }`\n\nexport const MONTHLY_SME_REQUIREMENTS_RETRIEVE_QUERY = `query($projectId: Int, $startDate: Date, $months: Int!) {\n monthlySmeRequirements(\n projectId: $projectId\n startDate: $startDate\n months: $months\n ) {\n businessUnitId\n businessUnit {\n id\n name\n }\n reqMonth\n sme\n }\n }`\n\nexport const ALL_PROJECT_SME_REQ_RETRIEVE_QUERY = `query( $startDate: Date!, $projectId: Int) {\n allProjectsSmeReq(startDate: $startDate, projectId: $projectId)\n}`\n\nexport const ALL_BU_SME_REQ_RETRIEVE_QUERY = `query( $startDate: Date!) {\n allBusinessUnitsSmeReq(startDate: $startDate)\n}`\n\n\nexport const EXPORT_SME_REQUIRED = `\nquery($smeReqData: String!){\n exportSmeRequired(smeReqData: $smeReqData)\n}`\n\nexport const EXPORT_SME_REQUIRED_REPORT = `\nquery($smeReqReportData: String!){\n exportSmeRequiredReport(smeReqReportData: $smeReqReportData)\n}`\n\nexport const EXPORT_All_BUS_SME_REQ = `\nquery($buSmeReqData: String!){\n exportAllBusSmeReq(buSmeReqData: $buSmeReqData)\n}`\n\nexport const EXPORT_All_PROJECT_SME_REQ = `\nquery($projectSmeReqData: String!){\n exportAllProjectSmeReq(projectSmeReqData: $projectSmeReqData)\n}`\n\n","export const BU_WISE_PROJECT_FORECASTS_RETRIEVE_QUERY = `query($startDate: Date!, $endDate: Date!) {\n projectForecastsByBu(startDate: $startDate, endDate: $endDate) {\n forecasts{\n name,id,buData{risk,month,projects{name,risk}}\n }\n }\n }`\n\nexport const PROJECT_DRIVER_WISE_PROJECT_FORECASTS_RETRIEVE_QUERY = `query($startDate: Date!, $endDate: Date!) {\n projectForecastsByProjectDriver(startDate: $startDate, endDate: $endDate) {\n high_risk\n medium_risk\n low_risk\n projectDriver\n }\n }`\n \nexport const PROJECT_COUNT_BY_DRIVER_RETRIEVE_QUERY = `query($startDate: Date!, $endDate: Date!) {\n projectCountByDriver(startDate: $startDate, endDate: $endDate) {\n projectDriver\n projectCount\n }\n }`","export const MILESTONE_LIST_QUERY = `query($page: Int, $perPage: Int, $sortField: String, $sortOrder: String, $filter: MilestoneFilter!){\n allMilestones(page:$page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter:$filter){\n items{\n id\n name\n projectPhase\n milestoneDate\n projectId\n project {\n id\n }\n }\n totalCount\n projectPhases{\n id\n name\n startDate\n endDate \n }\n }\n }`\n\nexport const MILESTONE_RETRIEVE_QUERY = `query($id: Int!) {\n businessUnit(id: $id) {\n id\n name\n geography\n fte\n description\n status\n parentBusinessUnitId\n }\n }`\n\nexport const MILESTONE_UPDATE_MUTATION = `mutation(\n $projectId: Int!\n $milestones: [MilestoneInput!]!\n ) {\n updateMilestones(\n projectId: $projectId\n milestones: $milestones\n ) {\n id\n name\n projectPhase\n milestoneDate\n projectId\n }\n }`\n\n export const MILESTONE_CREATE_MUTATION = `mutation(\n $projectId: Int!\n $milestones: [MilestoneInput!]!\n ) {\n createMilestones(\n projectId: $projectId\n milestones: $milestones\n ) {\n id\n name\n projectPhase\n milestoneDate\n projectId\n }\n }`\n\nexport const MILESTONE_DELETE_MUTATION = `mutation($id: Int!) {\n deleteMilestone(\n id: $id\n )\n }`","export const FAQ_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: FaqFilter\n ) {\n allFaqs(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n question\n answer\n }\n totalCount\n } \n }`;\n\nexport const FAQ_UPDATE_MUTATION = `mutation($id: Int!, $question: String, $answer: String) {\n updateFaq(id: $id, question: $question, answer: $answer) {\n id\n question\n answer\n }\n }`;\n\nexport const FAQ_CREATE_MUTATION = `mutation($question: String!, $answer: String!) {\n createFaq(question: $question, answer: $answer) {\n id\n question\n answer\n } \n }`;\n\nexport const FAQ_DELETE_MUTATION = `mutation($id: Int!) {\n deleteFaq(\n id: $id\n )\n }`;\n\nexport const FAQ_UPDATE_BULK_MUTATION = `mutation($faqs: [FaqInput!]) {\n createOrUpdateFaqs(faqs: $faqs) { \n question\n answer\n }\n }`;\n","export const PROJECT_FORECAST_LIST_QUERY = `query(\n $page: Int\n $perPage: Int\n $sortField: String\n $sortOrder: String\n $filter: ProjectForecastFilter\n ) {\n allProjectForecasts(\n page: $page\n perPage: $perPage\n sortField: $sortField\n sortOrder: $sortOrder\n filter: $filter\n ) {\n items {\n id\n week\n startDate\n endDate\n risk\n projectId\n businessUnitId\n }\n totalCount\n } \n }`;\n\nexport const PROJECT_FORECAST_CREATE_MUTATION = `mutation(\n $projectId: Int!\n $clientId: Int!\n $projectForecasts: [ProjectForecastInput!]\n) {\n createProjectForecasts(\n projectId: $projectId\n clientId: $clientId\n projectForecasts: $projectForecasts\n ) {\n id\n startDate\n endDate\n risk\n week\n businessUnit {\n name\n }\n businessUnitId\n projectId\n }\n}\n`;","export const EXPORT_TOOLS_AND_TEMPLATE_QUERY = `query($filename: String!){\n exportToolsAndTemplate(filename: $filename)\n}\n`","export const EXPORT_LEARNING_CENTRE_QUERY = `query($filename: String!){\n exportTrainingCentreGuide(filename: $filename)\n}\n`","export const THEME_CUSTOMIZATION_CREATE_MUTATION = `mutation(\n $url: String\n $theme: String\n $clientId: Int!\n ) {\n createThemeCustomization(\n url: $url\n theme: $theme\n clientId: $clientId\n ) {\n id\n url\n theme\n clientId\n }\n }`\n export const THEME_CUSTOMIZATION_UPDATE_MUTATION = `mutation(\n $id: ID!\n $url: String\n $theme: String\n $clientId: Int!\n ) {\n updateThemeCustomization(\n id: $id\n url: $url\n theme: $theme\n clientId: $clientId\n ) {\n id\n url\n theme\n clientId\n }\n }`\n\n\n export const THEME_CUSTOMIZATION_DELETE_MUTATION = `mutation(\n $id: ID!\n ) {\n delteThemeCustomization(\n id: $id\n ) {\n id\n url\n theme\n clientId\n }\n }`\n\n export const THEME_CUSTOMIZATION_VALUE_RETRIEVE_QUERY = `query($clientId: Int!) {\n getTheme(clientId: $clientId) {\n id\n url\n theme\n clientId\n }\n }`","export const EXPORT_REPORT_PDF = `query (\n $accessToken: String!,\n $reportId: String!,\n $pageName: String!, \n $filter: ReportFilter!\n) {\n exportPDF(\n accessToken: $accessToken,\n reportId: $reportId,\n pageName:$pageName,\n filter: $filter)\n }`;","import { formatResponse, onFailureMessage } from \"../utils/AppUtils\";\nimport { TokenStorage } from \"../utils/TokenStorage\";\nimport { API_URL, NETWORK_ERROR_MESSAGE } from './constants';\nimport { Query } from './graphqlQueries';\n\nconst apiUrl = API_URL;\n\nexport default {\n login: async({ username, password }) => {\n const resource = \"login\";\n const url = apiUrl;\n\n const request = new Request(url, {\n method: \"POST\",\n body: JSON.stringify({\n operationName: null,\n query: Query[resource][\"login\"][\"query\"],\n variables: {\n email: username.trim(),\n password: password\n }\n }),\n headers: new Headers({ 'Content-Type': 'application/json' }),\n });\n return await fetch(request)\n .then(async response => {\n if (response.status < 200 || response.status >= 300) {\n const responseJson = await response.json()\n const error_message = responseJson ? onFailureMessage(responseJson) : \"something went wrong\";\n throw new Error(error_message)\n }\n return response.json();\n })\n .then((response) => {\n if (response.errors && response.errors.length > 0 && response.errors[0].extensions) {\n const responseStatusCode = response.errors[0].extensions.code;\n formatResponse(response, responseStatusCode);\n throw new Error(onFailureMessage({\n response: {\n status: response.status,\n data: response,\n },\n }));\n }\n const { token, user ,pbi_refresh_token,pbi_access_token} = response.data[Query[resource][\"login\"][\"query_name\"]]\n TokenStorage.storeToken(token);\n TokenStorage.pbiStoreToken(pbi_access_token,pbi_refresh_token)\n TokenStorage.storeUserDetails(JSON.stringify(user));\n // TokenStorage.storeRefreshToken(refresh);\n return user;\n }).catch(error => {\n if (error.message === \"Failed to fetch\")\n throw new Error(NETWORK_ERROR_MESSAGE)\n throw new Error(error.message);\n })\n },\n logout: () => {\n TokenStorage.clear();\n return Promise.resolve();\n },\n checkError: (error) => {\n const status = error.response.status;\n if (status === 401 || status === 403) {\n TokenStorage.clear();\n return Promise.reject();\n }\n return Promise.resolve();\n },\n checkAuth: () => {\n return TokenStorage.getToken() ? Promise.resolve() : Promise.reject();\n },\n getPermissions: () => {\n const userDetails = TokenStorage.getUserDetails();\n const { permissions, roles } = userDetails ? userDetails : {};\n return (permissions || roles) ? Promise.resolve({ permissions, roles }) : Promise.reject();\n },\n getUserDetails: () => {\n const user = TokenStorage.getUserDetails();\n return user ? Promise.resolve(user) : Promise.reject();\n },\n};","import { Card, Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Button } from '@material-ui/core';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport { useHistory } from \"react-router-dom\";\n\n\nconst ErrorCard = ({ message, align, text, errorType }) => {\n let history = useHistory();\n\n const useStyles = makeStyles((theme) => ({\n errorCard: {\n padding: 32,\n textAlign: align ? align : 'left',\n color: theme.palette.error.main\n },\n }));\n\n const classes = useStyles();\n\n return \n {message}\n {text}\n
\n }\n onClick={() => history.goBack(-1)}\n >Go Back\n
\n}\n\nexport default ErrorCard;","import React from 'react';\r\nimport { hasPermissions } from './AppUtils';\r\nimport ErrorCard from './ErrorCard';\r\nimport { Loading } from 'react-admin';\r\n\r\n\r\nconst WithPermission = (props) => {\r\n const { bypassUser, permissions, resource, action, ...rest } = props;\r\n // console.log(bypassUser, permissions, resource, action);\r\n const [loading, setLoading] = React.useState(true)\r\n const [error, setError] = React.useState(false)\r\n React.useEffect(async () => {\r\n const hasPermission = permissions ? await hasPermissions(permissions.permissions, { resource, action }) : null\r\n if (!bypassUser && !hasPermission) {\r\n setError(true)\r\n } else {\r\n setError(false)\r\n }\r\n setLoading(false)\r\n }, [permissions])\r\n if (loading) {\r\n return (\r\n // \r\n \r\n )\r\n }\r\n if (error) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return props.children;\r\n}\r\n\r\nexport default WithPermission","import { Button } from \"@material-ui/core\";\nimport Step from \"@material-ui/core/Step\";\nimport StepLabel from \"@material-ui/core/StepLabel\";\nimport Stepper from \"@material-ui/core/Stepper\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { Form } from \"react-final-form\";\n\nconst useStyles = (theme) => ({\n stepperHeader: {\n background: \"none\",\n padding: 0,\n marginBottom: 60,\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n});\n\nclass FromWizard extends React.Component {\n static propTypes = {\n onSubmit: PropTypes.func.isRequired,\n };\n static Step = ({ children }) => children;\n\n constructor(props) {\n super(props);\n this.state = {\n step: 0,\n values: props.initialValues || {},\n isDesktop: false \n };\n this.updatePredicate = this.updatePredicate.bind(this);\n }\n\n componentDidMount() {\n this.updatePredicate();\n window.addEventListener(\"resize\", this.updatePredicate);\n }\n \n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.updatePredicate);\n }\n \n updatePredicate() {\n this.setState({ isDesktop: window.innerWidth > 768 });\n }\n \n next = (values) => {\n this.setState((state) => ({\n step: Math.min(state.step + 1, this.props.children.length - 1),\n values,\n }));\n\n // move to top of the page on previous or next button is clicked\n window.scrollTo({\n top: 0,\n left: 0,\n behavior: \"smooth\"\n });\n };\n\n previous = () => {\n this.setState((state) => ({\n step: Math.max(state.step - 1, 0),\n }));\n\n // move to top of the page on previous or next button is clicked\n window.scrollTo({\n top: 0,\n left: 0,\n behavior: \"smooth\"\n });\n }\n\n\n /**\n * NOTE: Both validate and handleSubmit switching are implemented\n * here because 🏁 Redux Final Form does not accept changes to those\n * functions once the form has been defined.\n */\n\n validate = (values) => {\n const activeStep = React.Children.toArray(this.props.children)[\n this.state.step\n ];\n return activeStep.props.validate ? activeStep.props.validate(values) : {};\n };\n\n onSuccess = () => {\n this.setState((state) => ({\n step: 0,\n values: null,\n }));\n };\n\n handleSubmit = (values, form) => {\n const { children, onSubmit } = this.props;\n const { step } = this.state;\n const isLastStep = step === React.Children.count(children) - 1;\n if (isLastStep) {\n return onSubmit(values, form, this.onSuccess);\n } else {\n this.next(values);\n }\n };\n\n render() {\n const { classes } = this.props;\n const { children, previousBtnEnabled = false, steps } = this.props;\n const { step, values } = this.state;\n const activeStep = React.Children.toArray(children)[step];\n const isLastStep = step === React.Children.count(children) - 1;\n const isDesktop = this.state.isDesktop;\n\n\n return (\n
\n
\n \n {steps.map((label) => (\n \n {label}\n \n ))}\n \n
\n \n {({ handleSubmit, submitting, values }) => (\n
\n {activeStep}\n
\n {previousBtnEnabled && step > 0 && (\n \n Previous\n \n )}\n {!isLastStep && (\n \n Next\n \n )}\n {isLastStep && (\n \n Submit\n \n )}\n
\n\n {/*
{JSON.stringify(values, 0, 2)}
*/}\n
\n )}\n \n
\n );\n }\n}\n\nexport default withStyles(useStyles)(FromWizard);\n","import {\n Box, Card,\n Divider, IconButton, makeStyles, Tooltip, Typography, useMediaQuery, withStyles\n} from \"@material-ui/core\";\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\nimport { useState } from \"react\";\nimport { required, SelectInput } from \"react-admin\";\nimport { Field } from 'react-final-form';\nimport styled from \"styled-components\";\n\nconst LightTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 11,\n },\n}))(Tooltip);\n\nconst StyledSelectInput = styled(SelectInput)`\n .MuiOutlinedInput-root {\n background-color: #ffffff;\n font-size: 14px;\n line-height: 18px;\n }\n`;\n\nconst useStyles = makeStyles((theme) => ({\n categoryCardHeader: {\n textAlign: \"center\",\n backgroundColor: \"#F2F2F2\",\n color: \"#333333\",\n fontSize: 16,\n fontStyle: \"bold\",\n },\n categoryCardBody: {\n textAlign: \"center\",\n backgroundColor: \"#F2F2F2\",\n },\n cardOutStyle: {\n boxShadow: 'none',\n borderRadius: 12,\n backgroundColor: '#F2F2F2'\n },\n cardMinimalText: {\n padding: 15,\n [theme.breakpoints.down(\"md\")]: {\n textAlign: \"center\",\n display: \"none\"\n },\n textAlign: 'left'\n },\n outlineIcon: {\n width: 16,\n height: 16,\n marginTop: 3\n }\n}));\n\nexport const ReviewCard = ({\n title,\n select_choices,\n assessmentSectionId,\n assessmentTypeId,\n assessmentSubTypeId,\n description,\n onChange,\n}) => {\n const classes = useStyles();\n const handleActualsChange = (assessmentValueId) => {\n if (typeof onChange === \"function\") {\n onChange(assessmentSectionId, assessmentTypeId, assessmentSubTypeId, assessmentValueId)\n }\n }\n\n const isSmallScreen = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [assessmentValueDescription, setAssessmentValueDescription] = useState(\"\");\n\n return (\n \n \n \n \n {title}\n \n \n \n \n \n \n \n \n \n \n \n Rating\n \n handleActualsChange(e.target.value)}\n choices={select_choices}\n helperText={isSmallScreen && `${assessmentValueDescription}`}\n />\n \n \n {!isSmallScreen && }\n \n \n \n \n {({ input: { value } }) => {\n if (value) {\n let text = select_choices.find(x => x.id == value).description;\n setAssessmentValueDescription(text);\n return text;\n }\n return null;\n }}\n \n \n \n \n \n \n );\n};\n\nexport default ReviewCard;","import {\n Accordion, AccordionDetails, AccordionSummary, Box, Grid, IconButton, makeStyles, Tooltip, Typography, withStyles\n} from \"@material-ui/core\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\nimport React from \"react\";\nimport { useForm } from \"react-final-form\";\nimport ReviewCard from \"./reviewCard\";\n\nconst LightTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 11,\n },\n}))(Tooltip);\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n },\n heading: {\n fontSize: 16,\n [theme.breakpoints.down(\"md\")]: {\n fontSize: 11,\n },\n fontWeight: theme.typography.fontWeightRegular,\n textTransform: \"uppercase\",\n },\n accordionBorder: {\n \"&:first-child\": {\n borderTopLeftRadius: '6px !important',\n borderTopRightRadius: '6px !important'\n },\n boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.12)',\n [theme.breakpoints.up(\"md\")]: {\n paddingLeft: 50,\n paddingRight: 50,\n },\n paddingTop: 24,\n marginBottom: 30,\n borderRadius: 6,\n \"&:before\": {\n backgroundColor: 'none'\n }\n },\n accordionSummary: {\n paddingBottom: 20,\n height: 0\n },\n accordionCard: {\n \"&:nth-child(odd)\": {\n paddingRight: 57\n },\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n paddingBottom: 30,\n \"&:nth-child(odd)\": {\n paddingRight: 0\n },\n },\n paddingBottom: 30,\n boxShadow: 'none'\n },\n outlineIcon: {\n width: 16,\n height: 16,\n marginTop: 3\n }\n}));\n\n// const StyledSelectInput = withStyles({\n// label: {\n// backgroundColor: \"#FFFFFF\",\n// },\n// })(SelectInput);\n\n\nexport default function AccordionActuals({ isUpdateAssessment, assessmentSectionId, assessmentTypes }) {\n const classes = useStyles();\n const form = useForm();\n\n // set the initial expanded to accordion to the fist assessment type name\n const initialPanelIndex = isUpdateAssessment ? null : 0;\n const initialAssessmentExpanded = isUpdateAssessment ? false : assessmentTypes[initialPanelIndex].name;\n const initialAssessmentType = isUpdateAssessment ? null : assessmentTypes[initialPanelIndex];\n\n const [expanded, setExpanded] = React.useState(initialAssessmentExpanded);\n const [currentAssessmentType, setCurrentAssessmentType] = React.useState(initialAssessmentType);\n const [currentIndex, setCurrentIndex] = React.useState(initialPanelIndex);\n\n const getAccordionTitle = (index) => assessmentTypes[index].name;\n\n const getAccordionDescription = (index) => assessmentTypes[index].description;\n\n const getAccordionContent = (index) => assessmentTypes[index].assessmentSubTypes;\n\n const handleChange = (panelIndex) => (event, isExpanded) => {\n const panel = getAccordionTitle(panelIndex);\n setExpanded(isExpanded ? panel : false);\n setCurrentAssessmentType(isExpanded ? assessmentTypes[panelIndex] : false)\n setCurrentIndex(isExpanded ? panelIndex : false)\n };\n\n const handleContinueBtnClick = (panelIndex) => {\n const nextAccordionIndex = panelIndex + 1;\n if (nextAccordionIndex === assessmentTypes.length) {\n return;\n }\n const nextAccordionPanel = getAccordionTitle(nextAccordionIndex);\n setExpanded(nextAccordionPanel);\n setCurrentAssessmentType(assessmentTypes[nextAccordionIndex])\n setCurrentIndex(nextAccordionIndex)\n };\n\n // automatically expand the accordion to the next one if all the inputs are valid\n const handleReviewChange = async (assessmentSectionId, assessmentTypeId, assessmentSubTypeId) => {\n\n if (!isUpdateAssessment && currentAssessmentType && currentAssessmentType.id) {\n for (const assessmentSubType of currentAssessmentType.assessmentSubTypes) {\n const fieldSource = `changeAssessmentValues[_${assessmentSectionId}][_${currentAssessmentType.id}][_${assessmentSubType.id}].assessmentValueId`;\n const fieldState = form.getFieldState(fieldSource);\n if (fieldState.invalid) {\n return;\n }\n }\n handleContinueBtnClick(currentIndex);\n }\n };\n\n return (\n
\n {assessmentTypes.map((assessmentType, index) => (\n \n }\n aria-controls={`${getAccordionTitle(index)}-panel-content`}\n id={`${getAccordionTitle(index)}-panel-header`}\n className={classes.accordionSummary}\n >\n \n \n {getAccordionTitle(index)}\n \n \n \n \n \n \n \n \n \n \n {getAccordionContent(index).map(subType => (\n \n \n \n ))}\n {/*\n \n */}\n \n \n \n ))}\n
\n );\n}","import {\n Grid, makeStyles\n} from \"@material-ui/core\";\nimport ReviewCard from \"./reviewCard\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n },\n heading: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightRegular,\n textTransform: \"uppercase\",\n },\n nonAccordionCard: {\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n}));\n\nexport default function ChangeEnvironment({ assessmentSectionId, assessmentTypes }) {\n const classes = useStyles();\n const assessmentTypeIndex = 0;\n\n return (\n
\n \n {assessmentTypes[assessmentTypeIndex].assessmentSubTypes.map(subType => (\n \n \n \n ))}\n \n
\n );\n}\n","import React from \"react\";\nimport { SelectInput, RadioButtonGroupInput, required, NumberInput } from \"react-admin\";\nimport {\n\n Typography,\n Card,\n Divider,\n Box,\n makeStyles,\n} from \"@material-ui/core\";\nimport styled from \"styled-components\";\nimport { YES_NO_CHOICES } from \"../../framework/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding: 16,\n paddingLeft: 40,\n paddingTop: 35,\n boxShadow: 'none',\n borderRadius: 12\n },\n}));\n\nexport const ChangeManagementResourcing = () => {\n const classes = useStyles();\n\n return (\n \n \n \n Have you budgeted for change management resourcing in your Business Case?\n \n \n \n \n \n \n \n Did the results of the Change Assessment roughly align to the Change Management resource estimates in your Business Case?\n \n \n \n \n \n \n \n What is your Change Management budget for resourcing? (Express in FTE)\n \n \n \n \n \n \n \n Total dollars to be allocated in Business Case for Change Management (salary and non-salary costs, including Communications)\n \n \n \n \n \n \n );\n};\n\nexport default ChangeManagementResourcing;","import Card from \"@material-ui/core/Card\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { createForm } from \"final-form\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport React from \"react\";\nimport {\n AutocompleteInput, Loading,\n ReferenceInput, required, Title, useDataProvider,\n useNotify, usePermissions, useRefresh\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport FormWizard from \"../customComponents/formWizard\";\nimport AccordionActuals from \"./accordionActuals\";\nimport ChangeManagementResourcing from \"./changeManagementResourcing\";\nimport NonAccordionActuals from \"./nonAccordionActuals\";\nimport useConstant from \"./useConstant\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n },\n mainCard: {\n padding: theme.spacing(2),\n },\n stepperSection: {\n marginTop: 60,\n marginBottom: '6em'\n },\n stepperHeader: {\n background: \"none\",\n padding: 0\n },\n backButton: {\n marginRight: theme.spacing(1),\n },\n instructions: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n inputWidthMargin: {\n marginRight: 40,\n },\n referenceInputWidth: {\n width: 350,\n },\n dateValueText: {\n fontSize: 16,\n fontWeight: 400,\n color: \"#B5B5B5\",\n margin: 0\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nfunction getStepContent(sectionData, isUpdateAssessment) {\n switch (sectionData.name) {\n case \"Overall Change Assessment\":\n return (\n \n );\n case \"Change Environment\":\n return (\n \n );\n case \"Planned Implementation Approach\":\n return (\n \n );\n case \"Change Components\":\n return (\n \n );\n // case \"Change Management Resourcing\":\n // return ;\n default:\n return \"Unknown stepIndex\";\n }\n}\n\nconst currentDate = new Date();\n\nexport default function HorizontalLabelPositionBelowStepper(props) {\n // const projectId = parseInt(props.match.params.projectId);\n // console.log(projectId);\n const classes = useStyles();\n const [assessmentMasterData, setAssessmentMasterData] = React.useState();\n const [isUpdateAssessment, setIsUpdateAssessment] = React.useState(false);\n const [changeAssessmentData, setChangeAssessmentData] = React.useState();\n const [businessUnitId, setBusinessUnitId] = React.useState();\n const [projectId, setProjectId] = React.useState();\n const [loading, setLoading] = React.useState(false);\n const notify = useNotify();\n const refresh = useRefresh();\n const dataProvider = useDataProvider();\n const resource = \"ChangeAssessment\";\n const { loading: loadingPermissions, permissions } = usePermissions();\n\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n impersonatedURL(isImpersonating, '#/ChangeImpactAssessment?impersonated');\n\n const topMainForm = useConstant(() =>\n createForm({\n onSubmit: (values) => console.log(values),\n initialValues: {\n projectId,\n businessUnitId: changeAssessmentData\n ? changeAssessmentData.businessUnitId\n : businessUnitId,\n },\n })\n );\n\n const formValuesToData = (values) => {\n let assessmentValues = [];\n\n // convert flat array to tree structure\n for (let sectionId in values.changeAssessmentValues) {\n for (let typeId in values.changeAssessmentValues[sectionId]) {\n for (let subTypeId in values.changeAssessmentValues[sectionId][\n typeId\n ]) {\n const _sectionId = sectionId.replace(/[\"'_]/g, \"\");\n const _typeId = typeId.replace(/[\"'_]/g, \"\");\n const _subTypeId = subTypeId.replace(/[\"'_]/g, \"\");\n\n assessmentValues.push({\n assessmentSectionId: parseInt(_sectionId),\n assessmentTypeId: parseInt(_typeId),\n assessmentSubTypeId: parseInt(_subTypeId),\n assessmentValueId: parseInt(\n values.changeAssessmentValues[sectionId][typeId][subTypeId]\n .assessmentValueId\n ),\n });\n }\n }\n }\n\n // transform the data according to the API document\n const transformData = {\n projectId: projectId,\n businessUnitId: businessUnitId,\n changeAssessmentValues: assessmentValues,\n };\n return transformData;\n };\n\n const createChangeAssessment = (formValues, form, onSuccess) => {\n dataProvider\n .create(resource, {\n data: formValues,\n })\n .then((response) => {\n topMainForm.restart();\n form.restart();\n setBusinessUnitId(null);\n onSuccess();\n notify(\"change assessment added successfully\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n };\n\n const updateChangeAssessment = (formValues, form, onSuccess) => {\n dataProvider\n .update(resource, {\n id: changeAssessmentData.id,\n data: {\n ...formValues,\n id: changeAssessmentData.id,\n },\n })\n .then((response) => {\n topMainForm.restart();\n form.restart();\n setIsUpdateAssessment(false);\n setChangeAssessmentData(null);\n setBusinessUnitId(null);\n onSuccess();\n notify(\"change assessment updated successfully\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n };\n\n const onSubmit = (values, form, onSuccess) => {\n const formValues = formValuesToData(values);\n // update the change assessment details if the details already exists else create it\n if (changeAssessmentData) {\n updateChangeAssessment(formValues, form, onSuccess);\n } else {\n createChangeAssessment(formValues, form, onSuccess);\n }\n };\n\n const getChangeAssessmentList = async (businessUnitId) => {\n return dataProvider\n .getList(\"ChangeAssessment\", {\n pagination: { page: 1, perPage: 1 },\n sort: { field: \"id\", order: \"DESC\" },\n filter: { projectId, businessUnitId },\n })\n .then((response) => {\n return response.data;\n })\n .catch((error) => {\n console.log(error);\n });\n };\n\n const getChangeAssessment = async (changeAssessmentId) => {\n return dataProvider\n .getOne(\"ChangeAssessment\", { id: changeAssessmentId })\n .then((response) => {\n return response.data;\n })\n .catch((error) => {\n notify(\n `Change Assessment details are unavailable: ${error.message}`,\n \"error\"\n );\n });\n };\n const handleProjectIdChange = async (project_unit_id) => {\n // setLoading(true);\n setBusinessUnitId(null)\n if (project_unit_id) {\n setProjectId(project_unit_id)\n }\n }\n const handleBUChange = async (business_unit_id) => {\n setLoading(true);\n setBusinessUnitId(business_unit_id);\n const data = await getChangeAssessmentList(business_unit_id);\n if (data && data.length > 0) {\n const changeAssessmentId = data[0].id;\n const changeAssessmentDetails = await getChangeAssessment(\n changeAssessmentId\n );\n if (changeAssessmentDetails) {\n const transformedData = transformDataToFormValues(\n changeAssessmentDetails\n );\n setIsUpdateAssessment(true);\n setChangeAssessmentData(transformedData);\n setLoading(false);\n return;\n }\n }\n setIsUpdateAssessment(false);\n setChangeAssessmentData(null);\n setLoading(false);\n };\n\n const transformDataToFormValues = (data) => {\n const transformedData = { ...data };\n const changeAssessmentValues = {};\n for (const changeAssessmentValue of data.changeAssessmentValues) {\n const valueId = changeAssessmentValue.assessmentValueId;\n const subTypeId = changeAssessmentValue.assessmentSubTypeId;\n const typeId = changeAssessmentValue.assessmentTypeId;\n const sectionId = changeAssessmentValue.assessmentSectionId;\n _.defaultsDeep(changeAssessmentValues, {\n [`_${sectionId}`]: {\n [`_${typeId}`]: { [`_${subTypeId}`]: changeAssessmentValue },\n },\n });\n }\n\n transformedData.changeAssessmentValues = changeAssessmentValues;\n\n return transformedData;\n };\n\n React.useEffect(() => {\n dataProvider\n .getList(\"AssessmentSection\", {\n filter: {},\n pagination: { page: 1, perPage: 10 },\n sort: { field: \"id\", order: \"ASC\" },\n })\n .then((response) => {\n setAssessmentMasterData(response.data);\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n }, []);\n\n if (!assessmentMasterData) return ;\n\n return (\n \n \n <Form\n form={topMainForm}\n render={({ handleSubmit, form, submitting, pristine, values }) => (\n <form onSubmit={handleSubmit}>\n <Card className={classes.mainCard}>\n <Grid container spacing={2}>\n <Grid item xs={12} md={3}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"ProjectForCA\"\n initialValue={projectId}\n onChange={handleProjectIdChange}\n // disabled={true}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n <Grid item xs={12} md={3}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n filter={{ projectId: projectId }}\n onChange={handleBUChange}\n disabled={!projectId}\n validate={[required()]}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n <Grid item xs={12} md={3}>\n <div style={{ textAlign: 'center' }}>\n <h6 className={classes.dateValueText}>Original Date</h6>\n <h6 className={classes.dateValueText} style={{ marginTop: 8 }}>\n {changeAssessmentData ?\n moment(changeAssessmentData.createdAt).format(\n \"YYYY-MM-DD\") : \"\"}\n </h6>\n </div>\n </Grid>\n <Grid item xs={12} md={3}>\n <div style={{ textAlign: 'center' }}>\n <h6 className={classes.dateValueText}>Updated Date</h6>\n <h6 className={classes.dateValueText} style={{ marginTop: 8 }}>\n {changeAssessmentData ?\n moment(changeAssessmentData.updatedAt).format(\n \"YYYY-MM-DD\") : \"\"}\n </h6>\n </div>\n </Grid>\n </Grid>\n </Card>\n </form>\n )}\n />\n {Boolean(businessUnitId) &&\n (loading ? (\n <Loading />\n ) : (\n <div className={classes.stepperSection}>\n <FormWizard\n onSubmit={onSubmit}\n initialValues={changeAssessmentData ? changeAssessmentData : null}\n previousBtnEnabled={true}\n steps={assessmentMasterData.map((section) => section.name)}\n >\n {assessmentMasterData.map((section) => (\n <div key={section.id}>\n <FormWizard.Step>\n {getStepContent(section, isUpdateAssessment)}\n </FormWizard.Step>\n </div>\n ))}\n </FormWizard>\n </div>\n ))}\n </WithPermission>\n );\n}\n","import axios from \"axios\";\nimport qs from \"qs\";\nimport { formatResponse, IsJsonString, sanitizeJson } from \"../utils/AppUtils\";\nimport { TokenStorage } from \"../utils/TokenStorage\";\nimport { API_URL, API_URL_FOR_PDF } from \"./constants\";\nimport { Query } from \"./graphqlQueries\";\n\nconst apiUrl = API_URL;\nconst apiUrlForPDF = API_URL_FOR_PDF;\nconst axiosInstance = axios.create();\n\naxiosInstance.interceptors.response.use(\n (response) => {\n // Return a successful response back to the calling service\n\n /**\n * since graphql sends success response for all the requests\n * modified response should be sent by checking the status code on the response body\n */\n if (\n response.data.errors &&\n response.data.errors.length > 0 &&\n response.data.errors[0].extensions\n ) {\n const responseStatusCode = response.data.errors[0].extensions.code;\n formatResponse(response, responseStatusCode);\n }\n\n if (response.status >= 400) {\n return new Promise((resolve, reject) => {\n reject({ response: response });\n });\n }\n\n return response;\n },\n (error) => {\n if (\n error.response.data.errors &&\n error.response.data.errors.length > 0 &&\n error.response.data.errors[0].extensions\n ) {\n const responseStatusCode =\n error.response.data.errors[0].extensions.code;\n formatResponse(error.response, responseStatusCode);\n }\n\n return new Promise((resolve, reject) => {\n reject(error);\n });\n }\n);\n\nexport const httpClient = async (url, options = {}) => {\n const token = TokenStorage.getToken();\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n\n options.headers = {\n Authorization: `Bearer ${token}`,\n Accept: \"application/json, text/plain, */*\",\n };\n\n if (impersonateUser) {\n options.headers[\"impersonateid\"] = impersonateUser.id;\n }\n\n return await axiosInstance({\n ...options,\n url: url,\n data:\n options.body && IsJsonString(options.body)\n ? sanitizeJson(JSON.parse(options.body))\n : options.body,\n // timeout: REQUEST_TIMEOUT\n }).then((resp) => {\n return { headers: resp.headers, json: resp.data, status: resp.status };\n });\n};\n\nexport default {\n getList: (resource, params) => {\n const { page, perPage } = params.pagination;\n const { field, order } = params.sort;\n const { filter } = params;\n\n const query = {\n page,\n perPage,\n sortField: field,\n sortOrder: order,\n filter,\n };\n\n const body = {\n operationName: null,\n query: Query[resource][\"list\"][\"query\"],\n variables: query,\n };\n\n const url = apiUrl;\n\n return httpClient(url, {\n method: \"POST\",\n body: body,\n }).then(({ headers, json }) => {\n if (\"data\" in json) {\n return {\n data: json.data[Query[resource][\"list\"][\"query_name\"]]\n .items,\n total: json.data[Query[resource][\"list\"][\"query_name\"]]\n .totalCount,\n };\n } else {\n throw new Error(\n \"The total number of results is unknown. The DRF data provider \" +\n \"expects responses for lists of resources to contain this \" +\n \"information to build the pagination. If you're not using the \" +\n \"default PageNumberPagination class, please include this \" +\n 'information using the Content-Range header OR a \"count\" key ' +\n \"inside the response.\"\n );\n }\n });\n },\n\n getOne: (resource, params) => {\n return httpClient(apiUrl, {\n method: \"POST\",\n body: {\n operationName: null,\n query: Query[resource][\"retrieve\"][\"query\"],\n variables: {\n id: params.id, ...params.data\n },\n },\n }).then(({ json }) => ({\n data: {\n ...json.data[Query[resource][\"retrieve\"][\"query_name\"]],\n id: json.data[Query[resource][\"retrieve\"][\"query_name\"]].id || params.id,\n },\n }));\n },\n\n getMany: (resource, params) => {\n const ids = params.ids.map((record) => {\n if (record.hasOwnProperty(\"id\")) return record.id;\n return record;\n });\n\n return Promise.all(\n ids.map((id) =>\n httpClient(apiUrl, {\n method: \"POST\",\n body: {\n operationName: null,\n query: Query[resource][\"retrieve\"][\"query\"],\n variables: { id: id },\n },\n })\n )\n ).then((responses) => ({\n data: responses.map(\n (response) =>\n response.json.data[\n Query[resource][\"retrieve\"][\"query_name\"]\n ]\n ),\n }));\n },\n\n getManyReference: (resource, params) => {\n const { page, perPage } = params.pagination;\n const { field, order } = params.sort;\n const { filter, target, id } = params;\n\n const query = {\n limit: perPage,\n offset: (page - 1) * perPage - 1,\n ordering: `${order === \"ASC\" ? \"\" : \"-\"}${field}`,\n ...filter,\n [target]: id,\n };\n const url = `${apiUrl}/${resource}/?${qs.stringify(query, {\n arrayFormat: \"comma\",\n })}`;\n\n return httpClient(url).then(({ headers, json }) => ({\n data: json.results,\n total: json.count,\n }));\n },\n\n update: (resource, params) =>\n httpClient(apiUrl, {\n method: \"POST\",\n body: JSON.stringify({\n operationName: null,\n query: Query[resource][\"update\"][\"query\"],\n variables: { id: params.id, ...params.data },\n }),\n }).then(({ json }) => {\n return {\n data: json.data[Query[resource][\"update\"][\"query_name\"]],\n };\n }),\n\n updateMany: (resource, params) => {\n return Promise.all(\n params.ids.map((id) =>\n httpClient(`${apiUrl}/${resource}/${id}/`, {\n method: \"PUT\",\n body: JSON.stringify(params.data),\n })\n )\n ).then((responses) => ({\n data: responses.map((response) => response.json),\n }));\n },\n\n create: (resource, params) => {\n return httpClient(apiUrl, {\n method: \"POST\",\n body: JSON.stringify({\n operationName: null,\n query: Query[resource][\"create\"][\"query\"],\n variables: params.data,\n }),\n }).then(({ json }) => ({\n data: json.data[Query[resource][\"create\"][\"query_name\"]],\n }));\n },\n\n delete: (resource, params) =>\n httpClient(apiUrl, {\n method: \"POST\",\n body: JSON.stringify({\n operationName: null,\n query: Query[resource][\"delete\"][\"query\"],\n variables: { id: params.id },\n }),\n }).then(({ json }) => ({ data: json })),\n\n deleteMany: (resource, params) => {\n return Promise.all(\n params.ids.map((id) =>\n httpClient(`${apiUrl}/${resource}/${id}/`, {\n method: \"DELETE\",\n })\n )\n ).then((responses) => ({\n data: responses.map((response) => response.json),\n }));\n },\n\n getExport: (resource, params) => {\n const { field, order } = params.sort;\n const query = {\n sort: JSON.stringify([field, order]),\n range: JSON.stringify([0, 10]),\n filter: JSON.stringify(params.filter),\n };\n const url = `${apiUrl}/${resource}?${qs.stringify(query, {\n arrayFormat: \"comma\",\n })}`;\n\n return httpClient(url).then(({ headers, json }) => ({\n data: json.data,\n total: json.total,\n }));\n },\n\n getRequest: (resource, params) => {\n return httpClient(\n `${apiUrl}/${resource}/${qs.stringify(params, {\n arrayFormat: \"comma\",\n })}/`\n ).then(({ headers, json }) => ({\n data: json,\n }));\n },\n\n postRequest: (resource, params) => {\n return httpClient(apiUrl, {\n method: \"POST\",\n body: JSON.stringify({\n operationName: null,\n query: Query[resource][params.queryType][\"query\"],\n variables: params.data,\n }),\n }).then(({ json }) => ({\n data: json.data[Query[resource][params.queryType][\"query_name\"]],\n }));\n },\n\n putRequest: (resource, params) => {\n return httpClient(`${apiUrl}/${resource}/`, {\n method: \"PUT\",\n body: JSON.stringify(params),\n }).then(({ headers, json }) => ({\n data: json,\n }));\n },\n postRequestForPDF: (resource, params) => {\n return httpClient(apiUrlForPDF, {\n method: \"POST\",\n body: JSON.stringify({\n operationName: null,\n query: Query[resource][params.queryType][\"query\"],\n variables: params.data,\n }),\n }).then(({ json }) => ({\n data: json.data[Query[resource][params.queryType][\"query_name\"]],\n }));\n },\n};\n","import React from \"react\";\nimport Chart from \"chart.js/auto\";\n\nexport default class DoughnutChart extends React.Component {\n constructor(props) {\n super(props);\n this.canvasRef = React.createRef();\n this.data = [\n {\n label: \"low\",\n value: 54,\n },\n {\n label: \"medium\",\n value: 52,\n },\n {\n label: \"high\",\n value: 74,\n },\n ];\n\n this.colors = [\"#27AE60\", \"#F2994A\", \"#EB5757\"];\n }\n\n componentDidUpdate() {\n // this.myChart.data.labels = this.data.map(d => d.label);\n this.myChart.data.datasets[0].data = this.data.map((d) => d.value);\n this.myChart.update();\n }\n\n componentDidMount() {\n this.myChart = new Chart(this.canvasRef.current, {\n type: \"doughnut\",\n options: {\n events: [],\n responsive: true,\n layout: {\n padding: 0,\n height: 200,\n },\n plugins: {\n tooltip: {\n enabled: false,\n },\n },\n maintainAspectRatio: false,\n rotation: -90, // start angle in radians\n circumference: 180, // sweep angle in radians\n cutout: \"80%\",\n animation: {\n onComplete: () => {\n const valueToAngle =\n (this.props.value / (this.props.minValue + this.props.maxValue)) *\n 180;\n const radianAngle = ((valueToAngle - 180) * Math.PI) / 180;\n const ctx = this.canvasRef.current.getContext(\"2d\");\n const cw = this.canvasRef.current.offsetWidth;\n const ch = this.canvasRef.current.offsetHeight;\n const cx = cw / 2;\n const cy = ch - ch / 4 + 4;\n\n const radius = cw / 2;\n\n ctx.translate(cx, cy);\n ctx.rotate(radianAngle);\n ctx.beginPath();\n ctx.moveTo(0, -2);\n ctx.lineTo(radius, 0);\n ctx.lineTo(0, 2);\n ctx.fillStyle = \"#333333\";\n ctx.fill();\n ctx.rotate(-radianAngle);\n ctx.translate(-cx, -cy);\n ctx.beginPath();\n // ctx.arc(cx, cy, 7, 0, Math.PI * 2);\n ctx.fill();\n },\n },\n },\n\n data: {\n // labels: this.data.map(d => d.label),\n datasets: [\n {\n data: this.data.map((d) => d.value),\n backgroundColor: this.colors,\n // borderWidth: 12\n },\n ],\n },\n });\n console.log(\"canvasRef\", this.canvasRef);\n }\n\n render() {\n return <canvas ref={this.canvasRef} />;\n }\n}\n","import {\n Box, Button, Card, createStyles, Divider, Grid, LinearProgress, Paper, Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow, Typography, useMediaQuery\n} from \"@material-ui/core\";\nimport grey from \"@material-ui/core/colors/grey\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport InfoOutlinedIcon from \"@material-ui/icons/InfoOutlined\";\nimport DownloadIcon from '@mui/icons-material/Download';\nimport clsx from \"clsx\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport {\n AutocompleteInput,\n Loading,\n ReferenceInput, Title, useDataProvider,\n useNotify, usePermissions\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { CHANGE_COMPONENTS_ID } from \"../../framework/constants\";\nimport dataProvider from \"../../framework/dataProvider\";\nimport { impersonatedURL, saveChangeReport, saveFileFromBinary } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport ImpactChart from \"../customComponents/impactChart\";\n\n\nconst useStyles = makeStyles((theme) => ({\n topCard: {\n padding: theme.spacing(2),\n paddingLeft: \"20px\",\n borderRadius: 12,\n width: \"100%\",\n boxShadow: \"0px 4px 24px rgba(0, 0, 0, 0.1)\",\n },\n bottomCard: {\n borderRadius: 12,\n boxShadow: \"0px 4px 24px rgba(0, 0, 0, 0.1)\",\n marginTop: 60,\n marginBottom: '10em'\n },\n bottomCardTitle: {\n backgroundColor: \"#E0E0E0\",\n },\n legends: {\n width: 24,\n height: 12,\n borderRadius: 6,\n \"&.high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n responsivelegends: {\n [theme.breakpoints.down('sm')]: {\n width: 14,\n height: 82,\n borderRadius: 4,\n \"&.high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n },\n legendsMargin: {\n [theme.breakpoints.down('sm')]: {\n marginLeft: '5px',\n },\n },\n impactChartStyle: {\n [theme.breakpoints.down('sm')]: {\n display: 'block',\n boxSizing: 'border-box',\n height: '120px',\n width: '120px',\n },\n },\n resourcingBox: {\n display: \"flex\",\n flexDirection: \"row\",\n padding: 24,\n alignItems: \"center\",\n justifyContent: \"space-between\",\n color: \"#FFFFFF\",\n height: 64,\n borderRadius: 6,\n fontWeight: 'normal'\n },\n resourcingBox2: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n color: \"#333333\",\n border: \"1px solid #828282\",\n height: 64,\n borderRadius: 12,\n backgroundColor: \"#F2F2F2\",\n },\n impactOverallBox: {\n display: \"flex\",\n flexDirection: \"row\",\n padding: 24,\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#FFFFFF\",\n height: 64,\n width: 250,\n borderRadius: 6,\n fontWeight: 'normal',\n [theme.breakpoints.down(\"md\")]: {\n width: \"8.75rem\",\n height: \"3rem\",\n fontSize: \".7rem\"\n }\n },\n submitButton: {\n backgroundColor: \"#ACACAC\",\n minWidth: 171,\n minHeight: 48,\n borderRadius: 8,\n color: \"#FFF\",\n textTransform: \"capitalize\",\n marginRight: 18,\n },\n drawerTitle: {\n fontWeight: 500,\n fontSize: 16,\n fontStyle: \"normal\",\n },\n hrBar: {\n height: 4,\n backgroundColor: \"#333333\",\n position: \"absolute\",\n width: \"99%\",\n top: 176,\n marginLeft: 1,\n border: \"none\",\n },\n hrBarResponsive: {\n height: 4,\n backgroundColor: \"#333333\",\n position: \"absolute\",\n width: \"99%\",\n top: '85px',\n marginLeft: 1,\n border: \"none\",\n },\n tableContainer: {\n boxShadow: \"none\",\n border: \"1px solid #C4C4C4\",\n },\n overallChangeText: {\n color: \"#4F4F4F\",\n fontSize: 24,\n fontWeight: 500,\n },\n overallResponsiveChangeText: {\n [theme.breakpoints.down('xs')]: {\n color: \"#4F4F4F\",\n fontSize: '14px',\n fontWeight: 500,\n },\n },\n tableBox: {\n [theme.breakpoints.down('xs')]: {\n width: \"100%\",\n },\n },\n responsiveBoxAnalysis: {\n [theme.breakpoints.down('sm')]: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'start',\n alignItems: 'start',\n width: '100%',\n paddingLeft: '10px'\n },\n },\n paddingReponsive: {\n [theme.breakpoints.down('sm')]: {\n paddingLeft: '15px',\n paddingRight: '15px',\n paddingBottom: '15px',\n },\n },\n titleFontSize: {\n [theme.breakpoints.down('sm')]: {\n fontSize: '16px',\n },\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n\n}));\n\nconst customProgressBar = (props) => {\n const progressBar = { width: props.value, backgroundColor: props.barColor, height: 10, borderRadius: 5, };\n return <div style={{ width: props.value, backgroundColor: props.barColor, height: 10, borderRadius: 5, }} />;\n}\nconst BorderLinearProgress = (props) => {\n const ProgressBar = withStyles({\n root: {\n height: 10,\n borderRadius: 5,\n },\n colorPrimary: {\n backgroundColor: grey[200],\n },\n bar: {\n borderRadius: 5,\n backgroundColor: props.barColor,\n },\n })(LinearProgress);\n return <ProgressBar {...props} />;\n};\n\nconst CellWithRightBorder = withStyles((theme) =>\n createStyles({\n root: {\n borderRightWidth: 1,\n borderRightColor: \"#C4C4C4\",\n borderRightStyle: \"solid\",\n },\n })\n)(TableCell);\n\nconst AnalysisOverview = (props) => {\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [loading, setLoading] = React.useState(false);\n const [changeAssessmentData, setChangeAssessmentData] = React.useState();\n const [error, setError] = React.useState(false);\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const { loading: loadingPermissions, permissions } = usePermissions();\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n impersonatedURL(isImpersonating, '#/analysis_overview?impersonated');\n\n const pdfRef = React.createRef();\n const options = {\n orientation: \"portrait\",\n unit: \"in\",\n format: [17.5, 19]\n };\n const getChangeAssessment = async (projectId, businessUnitId) => {\n return dataProvider\n .getOne(\"AssessmentOverview\", {\n id: null,\n data: { projectId, businessUnitId },\n })\n .then((response) => {\n return response.data;\n })\n .catch((error) => {\n setError(\n \"No assessment found for the provided project and business unit\"\n );\n });\n\n };\n\n\n\n const onSubmit = async (values) => {\n setLoading(true);\n\n const changeAssessmentDetails = await getChangeAssessment(\n values.projectId,\n values.businessUnitId\n );\n\n if (changeAssessmentDetails) {\n setChangeAssessmentData(changeAssessmentDetails);\n setError(false);\n setLoading(false);\n return;\n }\n\n // if the execution reached this line, it means that there is no change assessment details found\n setError(\"No assessment found for the provided project and business unit\");\n setLoading(false);\n };\n console.log(\"change assessment details\", JSON.stringify(changeAssessmentData));\n\n const handleExportChangeAssessmentPDF = () => {\n const changeAssesmentReportDataForPDF = JSON.stringify(changeAssessmentData);\n\n dataProvider\n .postRequestForPDF(\"ExportChangeAssessmentDataForPDF\", {\n queryType: \"retrieve\",\n data: { changeAssesmentReportDataForPDF },\n })\n .then((response) => {\n saveChangeReport(response.data); //here you will saved the cooked pdf from the backend using response.data\n })\n .catch((error) => {\n notify(\"No change assessment data found to export\");\n });\n\n }\n return (\n <WithPermission resource=\"ChangeAssessment\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Box display=\"flex\" flexDirection=\"column\">\n <Title className={classes.titleFontSize} title=\"Change Impact Assessment Report\" />\n <Box>\n <Card className={classes.topCard} >\n <Form\n onSubmit={onSubmit}\n render={({ handleSubmit, form, submitting, pristine, values }) => (\n <form onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item md={5} xs={12} sm={12}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n onChange={(value) => {\n setChangeAssessmentData(false);\n form.change(\"businessUnitId\", null);\n }}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n\n <Grid item md={5} xs={12} sm={12} mt={-1}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n filter={{ projectId: values.projectId }}\n onChange={(value) => {\n setChangeAssessmentData(false);\n values.businessUnitId = value;\n console.log(values);\n onSubmit(values);\n }}\n disabled={!values.projectId}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n <Grid item md={2}>\n {changeAssessmentData &&\n <Button\n style={{ marginTop: '5px' }}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleExportChangeAssessmentPDF}\n disabled={isSmall}\n >{<DownloadIcon fontSize='small' />}Export</Button>\n }\n </Grid>\n\n </Grid>\n </form>\n )}\n />\n\n </Card>\n\n </Box>\n <div ref={pdfRef} >\n <AnalyzedDetail\n loading={loading}\n error={error}\n changeAssessmentData={changeAssessmentData}\n />\n </div>\n\n </Box>\n </WithPermission>\n );\n};\n\n\n\nconst AnalyzedDetail = ({ loading, error, changeAssessmentData }) => {\n const classes = useStyles();\n const ref = React.useRef()\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const notify = useNotify();\n\n\n\n const getBarColor = (value) => {\n let color = \"\";\n switch (true) {\n case value <= 30:\n color = \"#27AE60\";\n break;\n case value <= 70:\n color = \"#F2994A\";\n break;\n case value <= 100:\n color = \"#EB5757\";\n break;\n default:\n color = \"#000000\";\n break;\n }\n return color;\n };\n\n const getImpactBtnBgColor = (value) => {\n let color = \"\";\n switch (true) {\n case value <= 42:\n color = \"#27AE60\";\n break;\n case value <= 98:\n color = \"#F2994A\";\n break;\n case value > 98:\n color = \"#EB5757\";\n break;\n default:\n color = \"#000000\";\n break;\n }\n return color;\n };\n\n const getImpactBtTxt = (value) => {\n let color = \"\";\n switch (true) {\n case value <= 42:\n color = \"Low\";\n break;\n case value <= 98:\n color = \"Medium\";\n break;\n case value > 98:\n color = \"High\";\n break;\n default:\n color = \"NA\";\n break;\n }\n return color;\n };\n\n if (loading) return <Loading />;\n\n if (error)\n return (\n <Box mt={3}>\n <Card className={classes.bottomCard}>\n <Box p={3}>\n <p>{error}</p>\n </Box>\n </Card>\n </Box>\n );\n\n if (!changeAssessmentData) return null;\n\n\n if (changeAssessmentData) {\n const changeAssessmentValues = {};\n for (const changeAssessmentValue of changeAssessmentData.changeManagementImpacts) {\n const value = changeAssessmentValue.assessmentValue;\n const subTypeName = changeAssessmentValue.assessmentSubType.name;\n const typeName = changeAssessmentValue.assessmentType.name;\n const sectionId = changeAssessmentValue.assessmentSectionId;\n _.defaultsDeep(changeAssessmentValues, {\n [sectionId]: {\n [typeName]: { [subTypeName]: { assessmentValue: value } },\n },\n });\n }\n changeAssessmentData.changeAssessmentValues = changeAssessmentValues;\n\n\n var changeMgtRows = [];\n Object.keys(changeAssessmentData.changeAssessmentValues[CHANGE_COMPONENTS_ID]).forEach(\n (assessmentTypeName) => {\n const assessmentType =\n changeAssessmentData.changeAssessmentValues[CHANGE_COMPONENTS_ID][assessmentTypeName];\n const scale_effort_value = assessmentType[\"Rating - Scale/Effort\"]\n ? (assessmentType[\"Rating - Scale/Effort\"].assessmentValue.rating /\n 10) *\n 100\n : null;\n const challenge_value = assessmentType[\"Rating - Challenge\"]\n ? (assessmentType[\"Rating - Challenge\"].assessmentValue.rating / 10) *\n 100\n : null;\n\n changeMgtRows.push(\n <TableRow key={assessmentTypeName}>\n <CellWithRightBorder component=\"th\" scope=\"row\" align=\"left\">\n {assessmentTypeName}\n </CellWithRightBorder>\n <CellWithRightBorder align=\"left\">\n <div style={{ width: \"100%\", backgroundColor: grey[200], height: 10, borderRadius: 5 }}>\n <div style={{ width: `${scale_effort_value}%`, backgroundColor: getBarColor(scale_effort_value), height: 10, borderRadius: 5, }} />\n </div>\n </CellWithRightBorder>\n <CellWithRightBorder align=\"left\">\n <div style={{ width: \"100%\", backgroundColor: grey[200], height: 10, borderRadius: 5 }}>\n <div style={{ width: `${challenge_value}%`, backgroundColor: getBarColor(challenge_value), height: 10, borderRadius: 5, }} />\n </div>\n </CellWithRightBorder>\n </TableRow>\n );\n }\n );\n }\n\n\n const handleExportChangeAssesmentReport = () => {\n const changeAssesmentReportData = JSON.stringify(changeAssessmentData);\n dataProvider\n .postRequest(\"ExportChangeImpactAssesmentReport\", {\n queryType: \"retrieve\",\n data: { changeAssesmentReportData }\n }).then(response => {\n saveFileFromBinary(response.data, \"Change Assessment Report\")\n })\n .catch(error => {\n notify(\"No data found to export\")\n });\n }\n\n\n\n return (\n <Box ref={ref}>\n <>\n <Card className={classes.bottomCard}>\n <Box className={classes.tableBox} >\n <Box\n display=\"flex\"\n flexDirection=\"row\"\n justifyContent=\"flex-start\"\n className={`${classes.bottomCardTitle} ${classes.responsiveBoxAnalysis}`}\n p={2}\n pl={10}\n >\n <Box flexDirection=\"row\">\n <Typography className={classes.drawerTitle}>\n Project Sponsor -{\" \"}\n {changeAssessmentData.project.projectSponsor.fullName}\n </Typography>\n </Box>\n\n {isSmall ? (\n <>\n <Box style={{ marginTop: \"10px\" }} flexDirection=\"row\" >\n <Typography className={classes.drawerTitle}>\n Change Lead -{\" \"}\n {changeAssessmentData.project.changeLeader.fullName}\n </Typography>\n </Box>\n\n <Box style={{ marginTop: \"10px\", marginBottom: '10px' }} >\n <Typography className={classes.drawerTitle}>\n Duration -{\" \"}\n {moment(changeAssessmentData.project.startDate).format(\n \"DD MMM YYYY\"\n )}{\" \"}\n to{\" \"}\n {moment(changeAssessmentData.project.endDate).format(\n \"DD MMM YYYY\"\n )}\n </Typography>\n </Box>\n </>\n ) : (\n <>\n <Box style={{ marginLeft: \"13em\" }} flexDirection=\"row\" >\n <Typography className={classes.drawerTitle}>\n Change Lead -{\" \"}\n {changeAssessmentData.project.changeLeader.fullName}\n </Typography>\n </Box>\n\n <Box style={{ marginLeft: \"12em\" }} >\n <Typography className={classes.drawerTitle}>\n Duration -{\" \"}\n {moment(changeAssessmentData.project.startDate).format(\n \"DD MMM YYYY\"\n )}{\" \"}\n to{\" \"}\n {moment(changeAssessmentData.project.endDate).format(\n \"DD MMM YYYY\"\n )}\n </Typography>\n </Box>\n </>\n )}\n </Box>\n </Box>\n <Divider />\n <Box pl={10} pr={10} pb={5} className={classes.paddingReponsive}>\n <Box display=\"flex\" flexDirection=\"row\" alignItems=\"center\">\n <Box className={classes.overallResponsiveChangeText}>\n {isSmall ? (\n\n <Typography variant=\"h6\" className={classes.overallResponsiveChangeText} >Overall change impact</Typography>\n ) : (\n <Typography variant=\"h6\" className={classes.overallChangeText}>Overall change impact</Typography>\n )\n }\n </Box>\n {isSmall ? (\n <Box style={{ marginLeft: 10 }}>\n <Box width={240} height={240} position=\"relative\" className={classes.impactChartStyle}>\n <ImpactChart\n minValue={0}\n maxValue={460}\n value={changeAssessmentData.overallChangeImpactValue}\n />\n {isSmall ? (\n <hr className={classes.hrBarResponsive} />\n ) : (\n <hr className={classes.hrBar} />\n )}\n\n </Box>\n </Box>\n )\n :\n (\n <Box style={{ marginLeft: 92 }}>\n <Box width={240} height={240} position=\"relative\" className={classes.impactChartStyle}>\n <ImpactChart\n minValue={0}\n maxValue={460}\n value={changeAssessmentData.overallChangeImpactValue}\n />\n {isSmall ? (\n <hr className={classes.hrBarResponsive} />\n ) : (\n <hr className={classes.hrBar} />\n )}\n\n </Box>\n </Box>\n )}\n </Box>\n <Box display=\"flex\" flexDirection=\"row\" pb={3} className={classes.responsivelegends}>\n <Box\n display=\"flex\"\n flexDirection=\"row\"\n alignItems=\"center\"\n >\n <Box className={clsx(classes.legends, { [\"low\"]: true })}></Box>\n <Box className={classes.legendsMargin} ml={2}>Low</Box>\n </Box>\n <Box\n display=\"flex\"\n flexDirection=\"row\"\n alignItems=\"center\"\n ml={3}\n >\n <Box\n className={clsx(classes.legends, { [\"medium\"]: true })}\n ></Box>\n <Box className={classes.legendsMargin} ml={2}>Medium</Box>\n </Box>\n <Box display=\"flex\" flexDirection=\"row\" alignItems=\"center\" ml={3}>\n <Box className={clsx(classes.legends, { [\"high\"]: true })}></Box>\n <Box className={classes.legendsMargin} ml={2}>High</Box>\n </Box>\n </Box>\n <Box >\n <TableContainer\n component={Paper}\n className={classes.tableContainer}\n >\n <Table aria-label=\"simple table\">\n <TableHead style={{ borderBottom: \"1px solid #C4C4C4\" }}>\n <TableRow>\n <CellWithRightBorder align=\"left\">\n Change Management Component\n </CellWithRightBorder>\n <CellWithRightBorder align=\"left\">\n Scope / Effort\n </CellWithRightBorder>\n <CellWithRightBorder align=\"left\">\n Challenge\n </CellWithRightBorder>\n </TableRow>\n </TableHead>\n <TableBody>\n {changeMgtRows}\n <TableRow>\n <CellWithRightBorder\n component=\"th\"\n scope=\"row\"\n align=\"left\"\n >\n {isSmall ? (\n <Typography variant=\"h6\" className={classes.overallResponsiveChangeText} >Overall change impact</Typography>\n ) : (\n <Typography variant=\"h6\" className={classes.overallChangeText}>Overall change impact</Typography>\n )}\n </CellWithRightBorder>\n <CellWithRightBorder align=\"center\">\n {isSmall ? (\n <Typography variant=\"h6\" className={classes.overallResponsiveChangeText} >Overall Scope/Effort</Typography>\n ) : (\n <Typography variant=\"h6\" className={classes.overallChangeText}>Overall Scope/Effort</Typography>\n )}\n <Box display=\"flex\" justifyContent=\"center\" mt={2}>\n <Box className={classes.impactOverallBox} position=\"relative\" style={{\n backgroundColor: getImpactBtnBgColor(changeAssessmentData\n .overallChangeMgtImpactValues[0])\n }}>\n <Box fontWeight=\"fontWeightBold\">\n <h2>{getImpactBtTxt(changeAssessmentData\n .overallChangeMgtImpactValues[0])}</h2>\n </Box>\n </Box>\n </Box>\n </CellWithRightBorder>\n <CellWithRightBorder align=\"center\">\n {isSmall ? (\n <Typography variant=\"h6\" className={classes.overallResponsiveChangeText} >Overall Complexity</Typography>\n ) : (\n <Typography variant=\"h6\" className={classes.overallChangeText}>Overall Complexity</Typography>\n )}\n <Box display=\"flex\" justifyContent=\"center\" mt={2}>\n <Box className={classes.impactOverallBox} position=\"relative\" style={{\n backgroundColor: getImpactBtnBgColor(changeAssessmentData\n .overallChangeMgtImpactValues[1])\n }}>\n <Box fontWeight=\"fontWeightBold\">\n <h2>{getImpactBtTxt(changeAssessmentData\n .overallChangeMgtImpactValues[1])}</h2>\n </Box>\n </Box>\n </Box>\n </CellWithRightBorder>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n </Box>\n </Box>\n </Card>\n </>\n\n </Box>\n );\n};\n\nconst Resourcing = ({ title, value, ...rest }) => {\n const classes = useStyles();\n\n return (\n <Box\n className={classes.resourcingBox}\n style={{ backgroundColor: value ? \"#27AE60\" : \"#EB5757\" }}\n {...rest}\n >\n <Box>\n <InfoOutlinedIcon />\n </Box>\n <Box ml={2} fontWeight=\"fontWeightBold\">\n <h2>{title}</h2>\n </Box>\n {value ? (\n <Box ml={2}>\n <CheckCircleIcon fontSize=\"large\" />\n </Box>\n ) : (\n <Box ml={2}>\n <CancelIcon fontSize=\"large\" />\n </Box>\n )}\n </Box>\n );\n};\n\nconst Estimate = ({ startIcon, title, value, valueIcon, ...rest }) => {\n const classes = useStyles();\n\n return (\n <Box className={classes.resourcingBox2} {...rest}>\n <Box p={3} display=\"flex\" flexDirection=\"row\" alignItems=\"center\">\n <Box>{startIcon}</Box>\n <Box ml={2} fontWeight=\"fontWeightBold\">\n <h2>{title}</h2>\n </Box>\n </Box>\n <Box height=\"70%\" borderRight={1} borderColor=\"#C4C4C4\">\n <Divider orientation=\"vertical\" style={{ backgroundColor: '#C4C4C4' }} />\n </Box>\n <Box\n p={2}\n display=\"flex\"\n flexDirection=\"row\"\n alignItems=\"center\"\n fontWeight={500}\n >\n {valueIcon}\n <h2>{value}</h2>\n </Box>\n </Box>\n );\n};\n\nexport default AnalysisOverview;\n","import {\n Box,\n Card,\n Divider,\n Grid,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableRow,\n Typography\n} from \"@material-ui/core\";\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport React from \"react\";\nimport {\n AutocompleteArrayInput,\n AutocompleteInput, Loading,\n ReferenceArrayInput,\n ReferenceInput, Title, useDataProvider, useNotify,\n usePermissions,\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { PROJECT_DRIVERS_MASTER_DATA_ID } from \"../../framework/constants\";\nimport theme from \"../../framework/theme\";\nimport { impersonatedURL, onFailureMessage, startEndDatesOfWeeks } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n \"&.MuiTableCell-root\": {\n padding: 50,\n }\n },\n inputWidthMargin: {\n marginRight: 30,\n },\n referenceInputWidth: {\n width: 350,\n },\n bottomCardTitle: {\n backgroundColor: \"#E0E0E0\",\n },\n rowHeading: {\n fontFamily: \"Roboto\",\n fontStyle: \"normal\",\n fontWeight: \"normal\",\n fontSize: 16,\n color: \"#4F4F4F\",\n },\n forecastRiskBox: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: 60,\n height: 30,\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n forecastRiskBoxCSR: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: \"100%\",\n height: 20,\n opacity: 0.3,\n // borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n changeImpactBox: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: 200,\n height: 30,\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n borderRight: {\n borderRight: \"2px solid #C4C4C4\",\n },\n borderBottom: {\n borderBottom: \"2px solid #C4C4C4\",\n },\n borderRightCSR: {\n borderRight: \"2px solid white\",\n zIndex: -1\n },\n borderBottomCSR: {\n borderBottom: \"2px solid white\",\n },\n tableHeading1: {\n backgroundColor: \"#4473c4\",\n },\n tableHeading2: {\n backgroundColor: \"#F2F2F2\",\n },\n responsiveBox: {\n [theme.breakpoints.down('sm')]: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'start',\n alignItems: 'start',\n marginBottom: '5px',\n marginLeft: '0px',\n },\n },\n responsiveTable: {\n [theme.breakpoints.down('sm')]: {\n width: `calc(100vw - 63px)`,\n },\n },\n columnFreezed: {\n position: 'sticky',\n left: 0,\n // zIndex: 999,\n borderRight: '2px solid #C4C4C4',\n backgroundColor: '#F2F2F2'\n },\n columnFreezed1: {\n position: 'sticky',\n left: 0,\n // zIndex: 2000,\n borderRight: '2px solid #C4C4C4',\n borderBottom: '2px solid #C4C4C4',\n backgroundColor: '#fff'\n },\n columnLowPriority: {\n borderRight: \"2px solid #C4C4C4\",\n zIndex: -1,\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nexport const ChangeHeatMap = (props) => {\n const [project, setProject] = React.useState();\n const [overallAssessment, setOverallAssessment] = React.useState();\n const [projectFilters, setProjectFilters] = React.useState({});\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState();\n const [businessUnitIds, setBusinessUnitIds] = React.useState();\n const [impactedBusinessUnitIds, setImpactedBusinessUnitIds] = React.useState();\n const [projectDriver, setProjectDriver] = React.useState();\n const [projectDriverChoices, setProjectDriverChoices] = React.useState([]);\n const [loadingProjectDriverChoices, setLoadingProjectDriverChoices] = React.useState(false);\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const classes = useStyles();\n const { loading: loadingPermissions, permissions } = usePermissions();\n\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n impersonatedURL(isImpersonating, '#/change_heat_map?impersonated');\n\n const getProject = (id) => {\n return dataProvider\n .getOne(\"Project\", { id })\n .then((response) => response.data);\n };\n\n const getOverallAssessment = (projectId) => {\n return dataProvider\n .postRequest(\"OverallAssessment\", {\n queryType: \"retrieve\",\n data: { projectId },\n })\n .then(({ data }) => {\n if (data) {\n const overallChangeImpactTxt = getOverallChangeImpact(data)\n const overallChangeScopeTxt = getOverallScope(data)\n const overallChallengeTxt = getOverallChallenge(data)\n\n setOverallAssessment({\n overallImpact: overallChangeImpactTxt,\n overallScope: overallChangeScopeTxt,\n overallChallenge: overallChallengeTxt,\n })\n } else {\n setOverallAssessment(null)\n }\n\n }).catch(error => {\n setOverallAssessment(null)\n })\n };\n\n const handleProjectChange = async (projectId) => {\n if (projectId) {\n setLoading(true);\n getOverallAssessment(projectId);\n getProject(projectId)\n .then(data => {\n setProject(data)\n setLoading(false);\n })\n .catch(error => {\n setError(\"error in getting project data\")\n setLoading(false);\n })\n } else {\n setProject(null);\n setOverallAssessment(null);\n }\n }\n\n const handleMainBUsChange = async (ids) => {\n setBusinessUnitIds(ids);\n if (ids && ids.length) setProjectFilters(preState => ({ ...preState, businessUnitIds: ids }))\n else {\n setProjectFilters(preState => {\n delete preState.businessUnitIds\n return { ...preState }\n })\n }\n }\n\n const handleImpactedBUsChange = async (ids) => {\n console.log(ids);\n console.log(projectFilters);\n\n setImpactedBusinessUnitIds(ids);\n if (ids && ids.length) {\n setProjectFilters(preState => ({ ...preState, impactedBusinessUnitIds: ids }))\n console.log(ids.length);\n console.log(projectFilters);\n }\n else {\n setProjectFilters(preState => {\n delete preState.impactedBusinessUnitIds\n return { ...preState }\n })\n }\n }\n\n const handleProjectDriverChange = async (name) => {\n console.log(name);\n setProjectDriver(name);\n if (name) {\n setProjectFilters(preState => ({ ...preState, projectDriver: name }))\n\n console.log(projectFilters);\n }\n\n }\n\n /* React.useEffect(() => {\n setLoadingProjectDriverChoices(true)\n dataProvider\n .getList(\"MasterDataValue\", {\n pagination: { page: 1, perPage: 25 },\n sort: { field: \"name\", order: \"ASC\" },\n filter: { masterDataId: PROJECT_DRIVERS_MASTER_DATA_ID },\n })\n .then(({ data }) => {\n setProjectDriverChoices(data)\n setLoadingProjectDriverChoices(false)\n })\n .catch(error => {\n console.log(error);\n setLoadingProjectDriverChoices(false)\n setProjectDriverChoices([])\n notify(\"could not able to fetch project driver list\")\n })\n \n const projectDriver = props.location.state ? props.location.state.projectDriver : null;\n const businessUnitIds = props.location.state && props.location.state.businessUnitId\n ? [props.location.state.businessUnitId]\n : null;\n setProjectDriver(projectDriver)\n setBusinessUnitIds(businessUnitIds)\n if (projectDriver) setProjectFilters(preState => ({ ...preState, projectDriver }))\n if (businessUnitIds && businessUnitIds.length) setProjectFilters(preState => ({ ...preState, businessUnitIds }))\n }, []) */\n\n React.useEffect(() => {\n setLoadingProjectDriverChoices(true)\n dataProvider\n .getList(\"MasterDataValue\", {\n pagination: { page: 1, perPage: 25 },\n sort: { field: \"name\", order: \"ASC\" },\n filter: { masterDataId: PROJECT_DRIVERS_MASTER_DATA_ID },\n })\n .then(({ data }) => {\n setProjectDriverChoices(data)\n setLoadingProjectDriverChoices(false)\n })\n .catch(error => {\n console.log(error);\n setLoadingProjectDriverChoices(false)\n setProjectDriverChoices([])\n notify(\"Could not able to fetch project driver list\", \"error\")\n })\n\n const projectDriver = props.location.state ? props.location.state.projectDriver : null;\n const impactedBusinessUnitIds = props.location.state && props.location.state.businessUnitId\n ? [props.location.state.businessUnitId]\n : null;\n setProjectDriver(projectDriver)\n setImpactedBusinessUnitIds(impactedBusinessUnitIds)\n if (projectDriver) setProjectFilters(preState => ({ ...preState, projectDriver }))\n if (impactedBusinessUnitIds && impactedBusinessUnitIds.length) setProjectFilters(preState => ({ ...preState, impactedBusinessUnitIds }))\n }, [])\n\n\n return (\n <WithPermission resource=\"changeImpactHeatMap\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title=\"Change Impact Heatmap\" className={classes.title}/>\n <Box display=\"flex\" flexDirection=\"column\">\n <Form\n onSubmit={() => { }}\n render={() => (\n <>\n <Grid container>\n {/* <Grid item md={4} xs={12} sm={12} sx={{border: '5px solid red'}}>\n <ReferenceArrayInput\n variant=\"outlined\"\n label=\"Main Business Unit\"\n source=\"businessUnitIds\"\n reference=\"BusinessUnit\"\n initialValue={businessUnitIds}\n onChange={(value) => handleMainBUsChange(value)}\n resettable={true}\n fullWidth\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n </Grid> */}\n\n <Grid item md={5} xs={12} sm={12}>\n <ReferenceArrayInput\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"impactedBusinessUnitIds\"\n reference=\"BusinessUnit\"\n initialValue={impactedBusinessUnitIds}\n onChange={(value) => handleImpactedBUsChange(value)}\n resettable={true}\n fullWidth\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n </Grid>\n <Grid item md={1}> </Grid>\n <Grid item md={5} xs={12} sm={12}>\n <AutocompleteInput\n variant=\"outlined\"\n source=\"projectDriver\"\n optionValue=\"name\"\n optionText=\"name\"\n loading={loadingProjectDriverChoices}\n initialValue={projectDriver}\n onChange={(value) => handleProjectDriverChange(value)}\n fullWidth\n loading={loadingProjectDriverChoices}\n resettable={true}\n choices={projectDriverChoices} />\n </Grid>\n <Grid item md={1}> </Grid>\n </Grid>\n <Divider />\n <Grid container spacing={2}>\n <Grid item md={5} xs={12} sm={12}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n onChange={(value) => handleProjectChange(value)}\n // filter={{ businessUnitId: 15 }}\n filter={projectFilters}\n resettable={true}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n </>\n )}\n />\n {loading ? <Box height={100}><Loading loadingSecondary=\"Loading project wise heatmap\" /></Box> : null}\n {!loading && project && <Box>\n <Box mt={2}>\n <Card>\n <Box className={classes.responsiveBox} p={1} display=\"flex\" flexDirection=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <Box className={classes.responsiveBox}>\n <Box className={classes.responsiveBox}>\n <Box display=\"flex\" flexDirection=\"row\">\n <Box>Project:</Box>\n <Box fontWeight=\"bold\" ml={1}>{project.name}</Box>\n </Box>\n </Box>\n <Box className={classes.responsiveBox}>\n <Box mt={1} display=\"flex\" flexDirection=\"row\">\n <Box>Project Strategic Driver:</Box>\n <Box fontWeight=\"bold\" ml={1}>{project.projectDriver}</Box>\n </Box>\n </Box>\n </Box>\n {Boolean(overallAssessment && overallAssessment.overallImpact !== \"NA\") && <Box display=\"flex\" flexDirection=\"row\" className={classes.responsiveBox}>\n <Box className={classes.responsiveBox}>\n <Box color={theme.palette.primary.darker}>Overall Change Impact</Box>\n <Box\n className={clsx(classes.changeImpactBox, {\n \"active\": true,\n \"risk-low\": overallAssessment.overallImpact === \"LOW\",\n \"risk-medium\": overallAssessment.overallImpact === \"MEDIUM\",\n \"risk-high\": overallAssessment.overallImpact === \"HIGH\",\n })}\n >\n {overallAssessment.overallImpact}\n </Box>\n </Box>\n <Box ml={3} className={classes.responsiveBox}>\n <Box color={theme.palette.primary.darker}>Overall Scope</Box>\n <Box\n className={clsx(classes.changeImpactBox, {\n \"active\": true,\n \"risk-low\": overallAssessment.overallScope === \"LOW\",\n \"risk-medium\": overallAssessment.overallScope === \"MEDIUM\",\n \"risk-high\": overallAssessment.overallScope === \"HIGH\",\n })}\n >\n {overallAssessment.overallScope}\n </Box>\n </Box>\n <Box ml={3} className={classes.responsiveBox}>\n <Box color={theme.palette.primary.darker}>Overall Challenge</Box>\n <Box\n className={clsx(classes.changeImpactBox, {\n \"active\": true,\n \"risk-low\": overallAssessment.overallChallenge === \"LOW\",\n \"risk-medium\": overallAssessment.overallChallenge === \"MEDIUM\",\n \"risk-high\": overallAssessment.overallChallenge === \"HIGH\",\n })}\n >\n {overallAssessment.overallChallenge}\n </Box>\n </Box>\n </Box>}\n </Box>\n <Box className={classes.responsiveTable} width={`calc(100vw - 156px)`}>\n <HeatMapTable\n projectId={project.id}\n businessUnits={[\n { ...project.businessUnit, isMainBu: true },\n ...project.impactedBusinessUnits\n ]}\n startDate={project.startDate}\n endDate={project.endDate}\n />\n </Box>\n </Card>\n </Box>\n </Box>}\n {error && (\n <Card>\n <Box p={1} color=\"red\">\n {error}\n </Box>\n </Card>\n )}\n </Box>\n </WithPermission>\n )\n}\n\nexport const HeatMapTable = ({ projectId, businessUnits, startDate, endDate }) => {\n const classes = useStyles();\n const weeks = startEndDatesOfWeeks(moment(startDate), moment(endDate));\n const weekCount = weeks.length;\n\n if (businessUnits && businessUnits.length) {\n return (\n <TableContainer component={Paper}>\n <Table className={classes.table}>\n <TableBody className={classes.responsiveTableHeight}>\n <TableRow className={classes.tableHeading2}>\n <TableCell align=\"left\" className={classes.columnFreezed}>\n Weeks\n </TableCell>\n {weeks.map((week, i) => {\n return <TableCell align=\"left\" key={i} className={i < weekCount - 1 ? classes.columnLowPriority : null}>\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\">\n <Box whiteSpace=\"nowrap\">Week {i + 1}</Box>\n <Box whiteSpace=\"nowrap\">\n {moment(week.startDate).format(\"DD-MMM\")} - {moment(week.endDate).format(\"DD-MMM\")}\n </Box>\n </Box>\n </TableCell>\n })}\n </TableRow>\n {businessUnits.map(businessUnit => (\n <TableRow key={businessUnit.id}>\n <TableCell align=\"left\" className={classes.columnFreezed1}>\n <Box whiteSpace=\"nowrap\">{businessUnit.name}</Box>\n </TableCell>\n <ForecastRisks\n projectId={projectId}\n isMainBu={businessUnit.isMainBu}\n businessUnitId={businessUnit.id}\n weekCount={weekCount}\n />\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )\n } else {\n return (\n <Box p={1} fontWeight=\"bold\" textAlign=\"center\">There are no forecasts for this project</Box>\n )\n }\n}\nexport const HeatMapTableInCSReport = ({ projectId, businessUnits, startDate, endDate }) => {\n const classes = useStyles();\n const totalWeeks = startEndDatesOfWeeks(moment(startDate), moment(endDate));\n const weeks = totalWeeks.slice(0, 12);\n const weekCount = weeks.length;\n if (businessUnits && businessUnits.length) {\n return (\n <TableContainer component={Paper} >\n <Table className={classes.table} >\n <TableBody className={classes.responsiveTableHeight}>\n <TableRow className={classes.tableHeading1}>\n {/* <TableCell align=\"left\" className={classes.borderRight}>\n Weeks\n </TableCell> */}\n {weeks.map((week, i) => {\n return <TableCell padding='none' align=\"left\" key={i} className={i < weekCount - 1 ? [classes.borderRightCSR, classes.borderBottomCSR] : null}>\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\">\n <Box whiteSpace=\"nowrap\" color='white'>Week {i + 1}</Box>\n {/* <Box whiteSpace=\"nowrap\">\n {moment(week.startDate).format(\"DD-MMM\")} - {moment(week.endDate).format(\"DD-MMM\")}\n </Box> */}\n </Box>\n </TableCell>\n })}\n </TableRow>\n {/* {businessUnits.map(businessUnit => ( */}\n <TableRow key={businessUnits[0].id}>\n {/* <TableCell align=\"left\" className={[classes.borderBottom, classes.borderRight]}>\n <Box whiteSpace=\"nowrap\">{businessUnit.name}</Box>\n </TableCell> */}\n\n <ForecastRisks\n projectId={projectId}\n isMainBu={businessUnits[0].isMainBu}\n businessUnitId={businessUnits[0].id}\n weekCount={weekCount}\n changeStatusReport={true}\n />\n </TableRow>\n {/* // ))} */}\n </TableBody>\n </Table>\n </TableContainer>\n )\n } else {\n return (\n <Box p={1} fontWeight=\"bold\" textAlign=\"center\">There are no forecasts for this project</Box>\n )\n }\n}\nconst ForecastRisks = ({ projectId, isMainBu, businessUnitId, weekCount, changeStatusReport }) => {\n const [forecasts, setForecasts] = React.useState();\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const classes = useStyles();\n const recordsPerPage = 1000;\n\n const getForecasts = async (projectId, businessUnitId) => {\n setError(null);\n setLoading(true);\n return dataProvider\n .getList(\"ProjectForecast\", {\n pagination: { page: 1, perPage: recordsPerPage },\n sort: { field: \"endDate\", order: \"ASC\" },\n filter: { projectId, businessUnitId },\n })\n .then(({ data }) => {\n if (data && data.length) {\n setForecasts(data);\n setError(null)\n } else {\n setForecasts(null);\n setError(\"No forecasts found\");\n }\n setLoading(false);\n })\n .catch(error => {\n console.log(error)\n const error_message = onFailureMessage(error)\n notify(error_message, \"error\");\n setForecasts(null)\n setError(error_message);\n setLoading(false);\n })\n };\n React.useEffect(() => {\n getForecasts(projectId, businessUnitId);\n }, [projectId, businessUnitId])\n\n if (loading || error || !forecasts) {\n return (\n <TableCell\n colSpan={weekCount}\n align=\"center\"\n className={[\n classes.borderBottom,\n classes.borderRight\n ]}\n >\n {loading && <LinearProgress />}\n {error && <Box color=\"red\" textAlign=\"left\"><Typography>{error}</Typography></Box>}\n {Boolean(!loading && !error && !forecasts) && \"No project details found\"}\n </TableCell>\n )\n }\n if (changeStatusReport) {\n\n return forecasts.slice(0, 12).map((forecast, i) => (\n <TableCell\n padding='none'\n key={forecast.id}\n align=\"center\"\n className={[\n classes.borderBottomCSR,\n i < weekCount - 1 ? classes.borderRightCSR : null\n ]}\n >\n <RiskBox risk={forecast.risk} csr={true} />\n </TableCell>\n ))\n }\n\n return forecasts.map((forecast, i) => (\n <TableCell\n\n key={forecast.id}\n align=\"center\"\n className={[\n classes.borderBottom,\n i < weekCount - 1 ? classes.borderRight : null\n ]}\n >\n <RiskBox risk={forecast.risk} />\n </TableCell>\n ))\n}\n\nexport const RiskBox = ({ risk, csr }) => {\n const classes = useStyles();\n if (csr) {\n return (\n <Box width=\"100%\" display=\"flex\" justifyContent=\"center\">\n <Box\n className={clsx(classes.forecastRiskBoxCSR, {\n \"active\": true,\n \"risk-high\": risk === \"H\",\n \"risk-medium\": risk === \"M\",\n \"risk-low\": risk === \"L\",\n })}\n />\n </Box>\n )\n }\n return (\n <Box width=\"100%\" display=\"flex\" justifyContent=\"center\">\n <Box\n className={clsx(classes.forecastRiskBox, {\n \"active\": true,\n \"risk-high\": risk === \"H\",\n \"risk-medium\": risk === \"M\",\n \"risk-low\": risk === \"L\",\n })}\n />\n </Box>\n )\n}\n\nconst getOverallChangeImpact = (changeAssessments) => {\n let impactValue = 0;\n let impactTxt;\n if (changeAssessments && changeAssessments.length) {\n impactValue = _.meanBy(changeAssessments, (changeAssessment) => changeAssessment.overallImpact)\n }\n\n switch (true) {\n case impactValue == 0:\n impactTxt = \"NA\"\n break;\n case impactValue <= 42:\n impactTxt = \"LOW\"\n break;\n case impactValue <= 98:\n impactTxt = \"MEDIUM\"\n break;\n case impactValue > 98:\n impactTxt = \"HIGH\"\n break;\n default:\n impactTxt = \"NA\"\n }\n return impactTxt;\n}\n\nconst getOverallScope = (changeAssessments) => {\n let impactValue = 0;\n let impactTxt;\n if (changeAssessments && changeAssessments.length) {\n impactValue = _.meanBy(changeAssessments, (changeAssessment) => changeAssessment.overallScope)\n }\n\n switch (true) {\n case impactValue == 0:\n impactTxt = \"NA\"\n break;\n case impactValue <= 42:\n impactTxt = \"LOW\"\n break;\n case impactValue <= 98:\n impactTxt = \"MEDIUM\"\n break;\n case impactValue > 98:\n impactTxt = \"HIGH\"\n break;\n default:\n impactTxt = \"NA\"\n }\n return impactTxt;\n}\n\nconst getOverallChallenge = (changeAssessments) => {\n let impactValue = 0;\n let impactTxt;\n if (changeAssessments && changeAssessments.length) {\n impactValue = _.meanBy(changeAssessments, (changeAssessment) => changeAssessment.overallChallenge)\n }\n\n switch (true) {\n case impactValue == 0:\n impactTxt = \"NA\"\n break;\n case impactValue <= 42:\n impactTxt = \"LOW\"\n break;\n case impactValue <= 98:\n impactTxt = \"MEDIUM\"\n break;\n case impactValue > 98:\n impactTxt = \"HIGH\"\n break;\n default:\n impactTxt = \"NA\"\n }\n return impactTxt;\n}\n\nexport default ChangeHeatMap;","import {\n Box, Grid, LinearProgress, Link as MuiLink, Paper, Table,\n TableBody,\n TableCell,\n TableContainer, TableRow, Typography\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\nimport Tooltip from '@mui/material/Tooltip';\nimport moment from \"moment\";\nimport React from \"react\";\nimport { AutocompleteInput, Loading, ReferenceInput, Title, useDataProvider, useNotify, usePermissions } from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { Link } from \"react-router-dom\";\nimport theme from \"../../framework/theme\";\nimport { impersonatedURL, onFailureMessage, startEndDatesOfWeeks } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport { RiskBox } from \"./allProjectsHeatMap_modified\";\n\nconst useStyles = makeStyles((theme) => ({\n inputWidthMargin: {\n marginRight: 30,\n },\n referenceInputWidth: {\n width: 350,\n },\n bottomCardTitle: {\n backgroundColor: \"#E0E0E0\",\n },\n rowHeading: {\n fontFamily: \"Roboto\",\n fontStyle: \"normal\",\n fontWeight: \"normal\",\n fontSize: 16,\n color: \"#4F4F4F\",\n },\n forecastRiskBox: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: 60,\n height: 30,\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n changeImpactBox: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: 200,\n height: 30,\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n borderRight: {\n borderRight: \"2px solid #C4C4C4\",\n },\n borderBottom: {\n borderBottom: \"2px solid #C4C4C4\",\n },\n tableHeading1: {\n backgroundColor: \"#E0E0E0\",\n },\n tableHeading2: {\n backgroundColor: \"#F2F2F2\",\n },\n responsiveTableHeight: {\n [theme.breakpoints.down('sm')]: {\n height: '250px',\n width: `calc(100vw - 63px)`,\n },\n },\n responsiveTitleFrontSize: {\n [theme.breakpoints.down('sm')]: {\n fontSize: '20px',\n whiteSpace: \"normal\",\n textAlign: 'center',\n },\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n },\n columnFreezed: {\n position: 'sticky',\n left: 0,\n // zIndex: 999,\n borderRight: '2px solid #C4C4C4',\n backgroundColor: '#F2F2F2'\n },\n columnFreezed1: {\n position: 'sticky',\n left: 0,\n // zIndex: 2000,\n borderRight: '2px solid #C4C4C4',\n borderBottom: '2px solid #C4C4C4',\n backgroundColor: '#fff'\n },\n columnLowPriority: {\n borderRight: \"2px solid #C4C4C4\",\n zIndex: -1,\n },\n columnLowPriorityB: {\n zIndex: -1\n }\n\n}));\n\nexport const ChangeHeatMap = (props) => {\n const months = 12;\n const startDate = moment().format(\"YYYY-MM-DD\");\n const endDate = moment().add(months, \"M\").format(\"YYYY-MM-DD\");\n const [businessUnitId, setBusinessUnitId] = React.useState();\n const { loading: loadingPermissions, permissions } = usePermissions();\n\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n impersonatedURL(isImpersonating, '#/change_heat_map_bu_wise?impersonated');\n\n const classes = useStyles();\n React.useEffect(() => {\n const buId = props.location.state && props.location.state.businessUnitId\n ? props.location.state.businessUnitId\n : null;\n if (buId) setBusinessUnitId(buId);\n }, []);\n\n const handleBusinessUnitChange = (id) => {\n setBusinessUnitId(id)\n }\n\n return (\n <WithPermission resource=\"ChangeAssessment1\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title className={classes.responsiveTitleFrontSize} title=\"Change Impact Heatmap - BU\" />\n <Form\n onSubmit={() => { }}\n render={({ form, values }) => (\n <Grid container spacing={2}>\n <Grid item md={3} xs={12} sm={12}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n defaultValue={businessUnitId}\n resettable={true}\n onChange={handleBusinessUnitChange}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n )}\n />\n <Box fontSize={12}>\n {moment(startDate).format(\"MMM YYYY\")} - {moment(endDate).format(\"MMM YYYY\")}\n </Box>\n <Box className={classes.responsiveTableHeight} mt={2} width={`calc(100vw - 156px)`}>\n <HeatMapTable\n businessUnitId={businessUnitId}\n startDate={startDate}\n endDate={endDate}\n />\n </Box>\n </WithPermission>\n )\n}\n\nexport const HeatMapTable = ({ businessUnitId, startDate, endDate }) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const weeks = startEndDatesOfWeeks(moment(startDate), moment(endDate));\n const weekCount = weeks.length;\n const [businessUnitsWithLevel, setBusinessUnitsWithLevel] = React.useState();\n const [filteredBusinessUnits, setFilteredBusinessUnits] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState();\n\n const allBusinessUnitsWithLevel = React.useCallback(() => {\n return dataProvider.postRequest(\"AllBusinessUnitsWithLevel\", {\n queryType: \"retrieve\",\n data: {\n page: 1,\n perPage: 1000,\n sortField: \"name\",\n sortOrder: \"ASC\",\n }\n }).then(({ data }) => ({ data: data.items }));\n }, [dataProvider])\n\n React.useEffect(() => {\n setLoading(true);\n allBusinessUnitsWithLevel()\n .then(({ data }) => {\n if (data && data.length) {\n setBusinessUnitsWithLevel(data);\n const filterFirstLevelBUs = data.filter(({ level }) => level === 1) // filtering first level of BUs only after mounting / landing\n setFilteredBusinessUnits(filterFirstLevelBUs);\n setError(null);\n } else {\n setError(\"No business units found\");\n }\n setLoading(false)\n }).catch(error => {\n setError(\"Something went wrong\");\n setLoading(false);\n })\n }, [allBusinessUnitsWithLevel])\n\n React.useEffect(() => {\n if (businessUnitId) {\n const selectedBusinessUnit = businessUnitsWithLevel.find(({ id }) => id === businessUnitId) // filtering out the selected BUs in the dropdown\n setFilteredBusinessUnits([selectedBusinessUnit]);\n }\n else if (businessUnitsWithLevel && businessUnitsWithLevel.length) {\n const filterFirstLevelBUs = businessUnitsWithLevel.filter(({ level }) => level === 1) // if any BU is selected we are taking only the first level BUs\n setFilteredBusinessUnits(filterFirstLevelBUs)\n }\n }, [businessUnitId, businessUnitsWithLevel])\n\n if (loading) return <Loading />\n\n if (error) return <Box p={1} fontWeight=\"bold\" textAlign=\"center\" color={theme.palette.error.main}>{error}</Box>;\n\n return (\n <TableContainer component={Paper}>\n <Table className={classes.table}>\n <TableBody className={classes.responsiveTableHeight}>\n <TableRow className={classes.tableHeading2}>\n <TableCell align=\"left\" className={classes.columnFreezed}>\n Weeks\n </TableCell>\n {weeks.map((week, i) => (\n <TableCell align=\"left\" key={i} className={i < weekCount - 1 ? classes.columnLowPriority : null}>\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\">\n <Box whiteSpace=\"nowrap\">Week {i + 1}</Box>\n <Box whiteSpace=\"nowrap\">\n {moment(week.startDate).format(\"DD-MMM\")} - {moment(week.endDate).format(\"DD-MMM\")}\n </Box>\n </Box>\n </TableCell>\n ))}\n </TableRow>\n {filteredBusinessUnits.map(businessUnit => (\n <HeatmapRow\n key={businessUnit.id}\n startDate={startDate}\n endDate={endDate}\n businessUnit={businessUnit}\n level={0}\n buLevel={businessUnit.level}\n weeks={weeks}\n weekCount={weekCount}\n businessUnitsWithLevel={businessUnitsWithLevel}\n />\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )\n}\nconst HeatmapRow = ({ businessUnit, weeks, weekCount, level, buLevel, startDate, endDate, businessUnitsWithLevel }) => {\n const classes = useStyles();\n const [businessUnits, setBusinessUnits] = React.useState();\n const [error, setError] = React.useState();\n\n const handleBUClick = (businessUnitId) => {\n const data = businessUnitsWithLevel.filter(({ parentBusinessUnitId }) => parentBusinessUnitId === businessUnitId)\n if (data && data.length) {\n setBusinessUnits(data);\n setError(null);\n } else {\n setError(\"No sub-business units found\");\n }\n }\n return (\n <>\n <TableRow>\n <TableCell align=\"left\" className={classes.columnFreezed1}>\n <Box whiteSpace=\"nowrap\" ml={level} display=\"flex\" flexDirection=\"row\" alignItems=\"center\" >\n <MuiLink\n href=\"#/change_heat_map_bu_wise\"\n underline=\"none\"\n onClick={() => handleBUClick(businessUnit.id)}\n >\n {businessUnit.name}\n </MuiLink>\n <Box pl={2}>\n <Link\n to={{\n pathname: '/change_heat_map',\n state: { businessUnitId: businessUnit.id }\n }}\n >\n <Tooltip title=\"Drive Into Change Heat Map Page\" placement=\"right\">\n <OpenInNewIcon />\n </Tooltip>\n </Link>\n </Box>\n </Box>\n </TableCell>\n <ForecastRisks\n startDate={startDate}\n endDate={endDate}\n businessUnitId={businessUnit.id}\n weeks={weeks}\n weekCount={weekCount}\n buLevel={buLevel}\n />\n </TableRow>\n {Boolean(error) && <TableRow>\n <TableCell\n colSpan={weekCount}\n align=\"center\"\n className={[\n classes.borderBottom,\n classes.borderRight\n ]}\n >\n <Box color=\"red\" textAlign=\"left\" ml={buLevel + 1}><Typography>{error}</Typography></Box>\n </TableCell>\n </TableRow>}\n {Boolean(businessUnits && businessUnits.length) && businessUnits.map(businessUnit => (\n <HeatmapRow\n key={businessUnit.id}\n startDate={startDate}\n endDate={endDate}\n businessUnit={businessUnit}\n buLevel={buLevel + 1}\n level={level + 1}\n weeks={weeks}\n weekCount={weekCount}\n businessUnitsWithLevel={businessUnitsWithLevel} />\n ))}\n </>\n )\n}\n\nconst ForecastRisks = ({ businessUnitId, weeks, weekCount, startDate, endDate, buLevel }) => {\n const [forecasts, setForecasts] = React.useState();\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const classes = useStyles();\n\n const getHeatmap = async (businessUnitId, startDate, endDate) => {\n setError(null);\n setLoading(true);\n return dataProvider\n .postRequest(\"AllBusHeatMap\", {\n queryType: \"retrieve\",\n data: { businessUnitId, startDate, endDate },\n })\n .then(({ data }) => {\n if (data && data.length) {\n setForecasts(data);\n setError(null)\n } else {\n setForecasts(null);\n setError(\"No forecasts found\");\n }\n setLoading(false);\n })\n .catch(error => {\n const error_message = onFailureMessage(error)\n notify(error_message);\n setForecasts(null)\n setError(error_message);\n setLoading(false);\n })\n };\n React.useEffect(() => {\n getHeatmap(businessUnitId, startDate, endDate);\n }, [businessUnitId, startDate, endDate])\n\n if (loading || error || !forecasts) {\n return (\n <TableCell\n colSpan={weekCount}\n align=\"center\"\n className={[\n classes.borderBottom,\n classes.borderRight,\n classes.columnLowPriorityB\n ]}\n >\n {loading && <LinearProgress />}\n {error && <Box color=\"red\" textAlign=\"left\"><Typography>{error}</Typography></Box>}\n {Boolean(!loading && !error && !forecasts) && \"No forecasts found\"}\n </TableCell>\n )\n }\n\n return weeks.map((week, i) => {\n const forecast = getForecastByStartDate(forecasts, week.startDate);\n return (\n <TableCell\n key={i}\n align=\"center\"\n className={[\n classes.borderBottom,\n i < weekCount - 1 ? classes.borderRight : null\n ]}\n >\n {forecast ? <RiskBox risk={buLevel < 3 ? getRiskNameForTopBu(forecast.risk) : getRiskName(forecast.risk)} /> : null}\n </TableCell>\n )\n })\n}\n\n// deprecated component\n/* const HeatMapRow = ({ loading, error, businessUnit, forecasts, weeks, weekCount, getHeatMap, buLevel, getBusinessUnits }) => {\n const classes = useStyles();\n // const [hasChildren, setHasChildren] = React.useState(false)\n const [childBusData, setChildBusData] = React.useState()\n const [childBusError, setChildBusError] = React.useState()\n const [childBusLoading, setChildBusLoading] = React.useState()\n const notify = useNotify()\n const history = useHistory()\n\n const handleBUClick = (parentBusinessUnitId) => {\n setChildBusLoading(true)\n getHeatMap(parentBusinessUnitId)\n .then(({ data }) => {\n if (data && data.length) {\n setChildBusData(data);\n setChildBusError(null)\n } else {\n setChildBusData(null);\n notify(\"No heatmap found\")\n setChildBusError(\"No Heatmap found\");\n }\n setChildBusLoading(false);\n })\n .catch(error => {\n console.log(error)\n const error_message = onFailureMessage(error)\n notify(error_message);\n setChildBusData(null)\n setChildBusError(error_message);\n setChildBusLoading(false);\n })\n }\n\n if (loading) {\n return (\n <TableRow className={classes.tableHeading2} colSpan=\"100%\">\n <TableCell\n align=\"left\"\n className={[classes.borderBottom, classes.borderRight]}\n colSpan=\"100%\"\n >\n <Loading />\n </TableCell>\n </TableRow>\n )\n }\n\n if (error) {\n return (\n <TableRow className={classes.tableHeading2} colSpan=\"100%\">\n <TableCell\n align=\"left\"\n className={[classes.borderBottom, classes.borderRight]}\n colSpan=\"100%\"\n >\n <Box p={3} color=\"red\">\n <Typography>{error}</Typography>\n </Box>\n </TableCell>\n </TableRow>\n )\n }\n\n if (!businessUnit) {\n return (\n <TableRow className={classes.tableHeading2} colSpan=\"100%\">\n <TableCell\n align=\"left\"\n className={[classes.borderBottom, classes.borderRight]}\n colSpan=\"100%\"\n >\n <Box p={3} color=\"red\">\n <Typography>No forecasts found</Typography>\n </Box>\n </TableCell>\n </TableRow>\n )\n }\n\n if (forecasts && forecasts.length) {\n return (\n Boolean(forecasts && forecasts.length) &&\n <React.Fragment>\n <TableRow>\n <TableCell\n align=\"left\"\n className={[classes.borderBottom, classes.borderRight]}\n >\n <Box whiteSpace=\"nowrap\" ml={buLevel} display=\"flex\" flexDirection=\"row\" alignItems=\"center\">\n <MuiLink\n href=\"#/change_heat_map_bu_wise\"\n underline=\"none\"\n onClick={() => handleBUClick(businessUnit.id)}\n >\n {businessUnit.name}\n </MuiLink>\n <Box pl={2}>\n <Link\n to={{\n pathname: '/change_heat_map',\n state: { businessUnitId: businessUnit.id }\n }}\n >\n <Tooltip title=\"Drive Into Change Heat Map Page\" placement=\"right\">\n <OpenInNewIcon />\n </Tooltip>\n </Link>\n </Box>\n </Box>\n </TableCell>\n {weeks.map((week, i) => {\n const forecast = forecasts.find((forecast, i) => {\n // for the first week, compare ony dates \n // for other weeks, compare dates with start of week\n const projectWeekStartDate = i === 0 ?\n moment(forecast.startDate).format(\"YYYY-MM-DD\") :\n moment(forecast.startDate).startOf('isoWeek').format(\"YYYY-MM-DD\");\n\n const weekStartDate = week.startDate;\n\n return weekStartDate === projectWeekStartDate;\n });\n\n const isForecastAvailable = forecast ? true : false;\n if (!isForecastAvailable) {\n return (\n <TableCell align=\"center\" className={[classes.borderBottom, i < weekCount - 1 ? classes.borderRight : null]}></TableCell>\n )\n }\n return (\n <TableCell key={forecast.week} align=\"center\" className={[classes.borderBottom, i < weekCount - 1 ? classes.borderRight : null]}>\n <RiskBox risk={buLevel === 0 ? getRiskNameForTopBu(forecast.risk) : getRiskName(forecast.risk)} />\n </TableCell>\n )\n })}\n </TableRow>\n {Boolean(childBusData && childBusData.length)\n && childBusData.map(({ businessUnit, forecasts }) => (\n <HeatMapRow\n getHeatMap={getHeatMap}\n weeks={weeks}\n weekCount={weekCount}\n businessUnit={businessUnit}\n forecasts={forecasts}\n loading={childBusLoading}\n error={childBusError}\n buLevel={buLevel + 1}\n />\n ))\n }\n </React.Fragment>\n )\n } else {\n return (\n <Box p={1} fontWeight=\"bold\" textAlign=\"center\">There are no forecasts for this project</Box>\n )\n }\n} */\n\n// deprecated component\n/* export const BuWiseHeatMapCard = ({ startDate, endDate, busHeatMap, getHeatMap, loading, error }) => {\n const classes = useStyles();\n const weeks = startEndDatesOfWeeks(moment(startDate), moment(endDate));\n const weekCount = weeks.length;\n\n return (\n <Card>\n <Box width={1280}>\n <TableContainer component={Paper}>\n <Table className={classes.table}>\n <TableBody>\n <TableRow className={classes.tableHeading2}>\n <TableCell align=\"left\" className={classes.borderRight}>\n Weeks\n </TableCell>\n {weeks.map((week, i) => {\n return (\n <TableCell align=\"left\" key={i} className={i < weekCount - 1 ? classes.borderRight : null}>\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\">\n <Box whiteSpace=\"nowrap\">Week {i + 1}</Box>\n <Box whiteSpace=\"nowrap\">\n {moment(week.startDate).format(\"DD-MMM\")} - {moment(week.endDate).format(\"DD-MMM\")}\n </Box>\n </Box>\n </TableCell>\n )\n })}\n </TableRow>\n {loading && (\n <TableRow className={classes.tableHeading2} colSpan=\"100%\">\n <TableCell\n align=\"left\"\n className={[classes.borderBottom, classes.borderRight]}\n colSpan=\"100%\"\n >\n <Box height={100}>\n <Loading loadingSecondary=\"Loading BU Heatmap summary\" />\n </Box>\n </TableCell>\n </TableRow>\n )}\n {Boolean(busHeatMap && busHeatMap.length)\n && busHeatMap.map(({ businessUnit, forecasts }) => (\n <HeatMapRow\n getHeatMap={getHeatMap}\n weeks={weeks}\n weekCount={weekCount}\n businessUnit={businessUnit}\n forecasts={forecasts}\n loading={loading}\n error={error}\n buLevel={0}\n />\n ))\n }\n </TableBody>\n </Table>\n </TableContainer>\n </Box>\n </Card>\n )\n} */\n\nconst getForecastByStartDate = (forecasts, weekStartDate) => {\n const forecast = forecasts.find((forecast, i) => {\n // for the first week, compare ony dates \n // for other weeks, compare dates with start of week\n const projectWeekStartDate = i === 0 ?\n moment(forecast.startDate).format(\"YYYY-MM-DD\") :\n moment(forecast.startDate).startOf('isoWeek').format(\"YYYY-MM-DD\");\n\n return weekStartDate === projectWeekStartDate;\n });\n\n return forecast;\n}\n// testing\nexport const getRiskName = (risk) => {\n if (risk >= 16) return \"H\";\n else if (risk > 4) return \"M\";\n else if (risk >= 0) return \"L\";\n}\n\nexport const getRiskNameForTopBu = (risk) => {\n if (risk > 150) return \"H\";\n else if (risk > 49) return \"M\";\n else if (risk >= 0) return \"L\";\n}\n\nexport default ChangeHeatMap;","import { Divider, Typography, useMediaQuery } from \"@material-ui/core\";\nimport MuiAccordion from \"@material-ui/core/Accordion\";\nimport MuiAccordionDetails from \"@material-ui/core/AccordionDetails\";\nimport MuiAccordionSummary from \"@material-ui/core/AccordionSummary\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport { ExpandMore } from \"@material-ui/icons\";\nimport { Box, InputAdornment, TextField } from \"@mui/material\";\nimport React, { useState } from \"react\";\nimport { Error, Loading, Title, useDataProvider } from \"react-admin\";\nimport palette from \"../../framework/theme/palette\";\nimport { impersonatedURL } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport { WORDPRESS_ENDPOINT } from \"../../framework/constants\";\nimport axios from \"axios\";\nimport DOMPurify from 'dompurify';\nimport SearchIcon from '@mui/icons-material/Search';\n\nconst useStyles = makeStyles((theme) => ({\n boxes: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: palette.primary.contrastText,\n padding: \"10px\",\n // flexWrap: \"wrap\",\n borderRadius: 5,\n // flexShrink: 0\n },\n box: {\n // borderRadius: 5,\n // width: 'calc(49%)', // Subtracting padding for accurate width\n // marginBottom: '8px', // Adding margin between boxes\n },\n title: {\n textTransform: \"uppercase\",\n // fontSize: \"20px\", // Adjust the font size as needed\n },\n}));\nconst Accordion = withStyles({\n root: {\n borderRadius: \"20px 20px 0 0\",\n // \"&:not(:last-child)\": {\n // borderBottom: 0,\n // },\n\n \"&:before\": {\n // display: \"none\",\n },\n \"&$expanded\": {\n // margin: \"auto\",\n // margin: \"20px\",\n // border: '2px solid #f0f'\n // pading: \"10px 0\",\n \"& .MuiAccordion-root.Mui-expanded:first-child .MuiAccordion-root.Mui-expanded:last-child\":\n {\n marginTop: \"10px\",\n marginBottom: \"10px\",\n },\n },\n // margin: \"20px\",\n // marginRight:\n },\n expanded: {},\n})(MuiAccordion);\n\nconst AccordionSummary = withStyles({\n root: {\n backgroundColor: palette.customsColor.creamium,\n //boxShadow: \"0px 3px 9px rgba(0, 0, 0, 0.12)\",\n // boxShadow: `0px 1px 2px ${palette.primary.light}`,\n // borderBottom: `3px solid ${palette.customsColor.gray}`,\n border: `1px solid #e9ebec`,\n fontSize: \"0.8125rem\",\n fontWeight: \"500\",\n // marginTop: 10,\n color: palette.primary.darker,\n // borderRadius: \"20px 20px 0 0\",\n minHeight: 56,\n \"&$expanded\": {\n minHeight: 56,\n },\n },\n content: {\n \"&$expanded\": {\n margin: \"12px 0\",\n },\n },\n expanded: {\n backgroundColor: \"#F5F6F9\",\n },\n})(MuiAccordionSummary);\n\nconst AccordionDetails = withStyles((theme) => ({\n root: {\n padding: theme.spacing(2),\n backgroundColor: palette.primary.contrastText,\n color: \"#878a99\",\n borderLeft: \"1px solid #e9ebec\",\n borderRight: \"1px solid #e9ebec\",\n },\n}))(MuiAccordionDetails);\n\nconst Faqs = () => {\n const classes = useStyles();\n const [expandedPanel, setExpandedPanel] = useState(false);\n const [faqs, setFaqs] = useState();\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const dataProvider = useDataProvider();\n const user = TokenStorage.getUserDetails();\n const { isImpersonating } = user ? user : {};\n const [posts, setPosts] = useState([]);\n const [filteredFaqs, setFilteredFaqs] = useState([]);\n const [query, setQuery] = useState('');\n impersonatedURL(isImpersonating, \"#/faq?impersonated\");\n\n const handleAccordionChange = (panel) => (event, isExpanded) => {\n setExpandedPanel(isExpanded ? panel : false);\n };\n\n // React.useEffect(async () => {\n // setLoading(true);\n // await dataProvider\n // .getList(\"Faq\", {\n // pagination: { page: 1, perPage: 100 },\n // sort: { field: \"id\", order: \"ASC\" },\n // filter: {},\n // })\n // .then((response) => {\n // setFaqs(response.data);\n // setLoading(false);\n // })\n // .catch((error) => {\n // setError(error.message);\n // setLoading(false);\n // });\n // }, []);\n\n const handleSearch = (event) => {\n const searchQuery = event.target.value.toLowerCase();\n setQuery(searchQuery);\n\n const filtered = faqs.filter(post =>\n post.title.rendered.toLowerCase().includes(searchQuery)\n );\n setFilteredFaqs(filtered);\n };\n\n React.useEffect(() => {\n const fetchFaqs = async () => {\n try {\n setLoading(true);\n const response = await axios.get(`${WORDPRESS_ENDPOINT}wp-json/wp/v2/posts?categories=3&orderby=id&order=asc`);\n setFaqs(response.data);\n setFilteredFaqs(response.data)\n setLoading(false);\n } catch (error) {\n console.error('Error fetching posts', error);\n setLoading(false);\n }\n };\n\n fetchFaqs();\n }, [])\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n if (filteredFaqs) {\n return (\n <div>\n <Title title=\"Frequently Asked Questions\" className={classes.title} />\n <Box sx={{ marginBottom: \"20px\", display: \"flex\", justifyContent: \"flex-end\" }}>\n <TextField\n type=\"text\"\n placeholder=\"Search\"\n value={query}\n onChange={handleSearch}\n size=\"small\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon sx={{ color: \"rgba(0,0,0,0.2)\" }} />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n {isSmall ? (\n <div className={classes.boxes}>\n <Box\n style={{\n display: \"flex\",\n flexDirection: 'column'\n }}\n >\n {filteredFaqs.map((faq, index) => {\n return (\n <div key={index} className={classes.box}>\n <Accordion\n expanded={expandedPanel === \"panel\" + index}\n onChange={handleAccordionChange(\"panel\" + index)}\n >\n <AccordionSummary\n expandIcon={<ExpandMore style={{ color: \"primary\" }} />}\n >\n {faq.title.rendered}\n </AccordionSummary>\n <AccordionDetails>\n <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(faq.content.rendered) }} />\n </AccordionDetails>\n <Divider />\n </Accordion>\n </div>\n );\n // Render nothing for even-indexed items\n })}\n </Box>\n </div>\n ) : (\n <div>\n {\n !filteredFaqs.length ? \"\" : <div className={classes.boxes}>\n {/* Render odd-indexed items */}\n <Box\n style={{\n display: \"flex\",\n }}\n >\n <Box marginRight={1} style={{ width: \"50%\" }}>\n {filteredFaqs.map((faq, index) => {\n if (index % 2 === 0) {\n return (\n <div key={index} className={classes.box}>\n <Accordion\n expanded={expandedPanel === \"panel\" + index}\n onChange={handleAccordionChange(\"panel\" + index)}\n >\n <AccordionSummary\n expandIcon={\n <ExpandMore style={{ color: \"primary\" }} />\n }\n >\n {faq.title.rendered}\n </AccordionSummary>\n <AccordionDetails>\n <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(faq.content.rendered) }} />\n </AccordionDetails>\n <Divider />\n </Accordion>\n </div>\n );\n }\n return null; // Render nothing for even-indexed items\n })}\n </Box>\n <Box marginLeft={1} style={{ width: \"50%\" }}>\n {filteredFaqs.map((faq, index) => {\n if (index % 2 !== 0) {\n return (\n <div key={index} className={classes.box}>\n <Accordion\n expanded={expandedPanel === \"panel\" + index}\n onChange={handleAccordionChange(\"panel\" + index)}\n >\n <AccordionSummary\n expandIcon={\n <ExpandMore style={{ color: \"primary\" }} />\n }\n >\n {faq.title.rendered}\n </AccordionSummary>\n <AccordionDetails>\n <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(faq.content.rendered) }} />\n </AccordionDetails>\n <Divider />\n </Accordion>\n </div>\n );\n }\n return null; // Render nothing for odd-indexed items\n })}\n </Box>\n </Box>\n\n {/* Render even-indexed items */}\n </div>\n }\n </div>\n )}\n\n {filteredFaqs.length > 0 ? (\n \"\"\n ) : (\n <Typography\n align=\"center\"\n variant=\"body1\"\n gutterBottom\n component=\"div\"\n >\n No Frequently Asked Questions Found\n </Typography>\n )}\n </div>\n );\n }\n\n return <div></div>;\n};\n\nexport default Faqs;\n","import React from 'react';\n\nimport { Box, Divider, Typography, useMediaQuery } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport arrayMutators from \"final-form-arrays\";\nimport {\n AutocompleteInput,\n Loading,\n RadioButtonGroupInput,\n ReferenceInput,\n TextInput,\n Title,\n maxLength, required,\n useDataProvider,\n useNotify,\n usePermissions,\n useRefresh\n} from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport { StyledTextInput, impersonatedURL, onFailureMessage } from '../../utils/AppUtils';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\nimport moment from 'moment';\nimport { Alert, Snackbar } from '@mui/material';\n\n\nconst useStyles = makeStyles({\n root: {\n backgroundColor: \"#FFFFFF\",\n borderRadius: '5px',\n padding: '15px',\n // borderTop: '2px solid #B1b1b1'\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n textAreaInput: {\n minHeight: '60px',\n lineHeight: 1.5\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n});\n\nexport const GovernanceAssessments = (props) => {\n const { record, activeStep, handleBack, handleNext, steps, setIsUpdateProjectDetails } = props\n const [initialValues, setInitialValues] = React.useState();\n const user = TokenStorage.getUserDetails();\n const dataProvider = useDataProvider();\n\n const refresh = useRefresh();\n const classes = useStyles();\n const localProjectDetails = TokenStorage.getProjectDetails()\n const [governanceLoading, setGovernanceLoading] = React.useState(false);\n const [businessReadlines, setBusinessReadliness] = React.useState([])\n const resource = \"BusinessReadliness\";\n const [draftStatus, setDraftStatus] = React.useState(false);\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n const { loading: loadingPermissions, permissions } = usePermissions();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const isXS = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n impersonatedURL(isImpersonating, '#/governance?impersonated');\n\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n React.useEffect(() => {\n\n dataProvider\n .postRequest(\"BusinessReadliness\", {\n queryType: \"list\",\n data: {\n \"type\": \"Governance\"\n }\n })\n .then((response) => {\n setBusinessReadliness(response.data);\n })\n .catch((error) => {\n console.log(error)\n });\n\n\n }, [])\n const handleProjectChange = async (projectId) => {\n setGovernanceLoading(true)\n const businessReadlinesListByuser = await dataProvider\n .postRequest(\"BusinessReadliness\", {\n queryType: \"retrieve\",\n data: {\n \"projectId\": projectId,\n \"type\": \"Governance\"\n }\n })\n const governances = businessReadlinesListByuser.data.filter(read => read.type === 'Governance');\n const governanceOverall = businessReadlinesListByuser.data.filter(read => read.type === 'GovernanceOverall')\n // console.log( businessReadlinesListByuser.data)\n\n businessReadlinesListByuser.data = businessReadlinesListByuser.data.length > 0 ? governances : businessReadlines;\n setInitialValues({\n projectId: projectId, businessReadlinesListByuser: businessReadlinesListByuser\n .data,\n governanceOverall: governanceOverall.length === 0 ? [{ projectId, name: \"Change Governance Assessment\", assessment: \"\", commentary: \"\", type: `GovernanceOverall` }] : governanceOverall\n , assessmentChoice: [{ id: \"Yes\", name: \"Yes\" }, { id: \"No\", name: \"No\" }, { id: \"N/A\", name: \"N/A\" }]\n })\n setGovernanceLoading(false)\n }\n const onSubmit = (values, form, status) => {\n const item = values.governanceOverall[0];\n const { id, createdAt, ...rest } = item;\n rest['projectId'] = values.projectId;\n const businessReadlines = {\n projectId: values.projectId,\n type: \"Governance\",\n readinessGovernanceAssessments: values.businessReadlinesListByuser.filter(buread => Boolean(buread)).map(buread => ({\n name: buread.name,\n assessment: buread.assessment,\n commentary: buread?.commentary || \"\",\n type: \"Governance\",\n projectId: values?.projectId\n }))\n }\n businessReadlines.readinessGovernanceAssessments.push(rest)\n dataProvider\n .postRequest(resource, {\n queryType: \"create\",\n data: businessReadlines,\n })\n .then(async (response) => {\n console.log(response)\n handleSnackbarOpen(\"Governance assessment updated successfully\", \"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n };\n const validate = () => { };\n return (\n <WithPermission resource=\"Change Assessment\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title=\"Change Governance Assessment\" className={classes.title} style={{ fontSize: isSmall ? \"16px\" : \"20px\" }} />\n {\n <Box mr={!isXS && 4}>\n <Form\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={initialValues}\n render={({\n handleSubmit,\n values,\n form: {\n mutators: { push, pop },\n },\n }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n\n <Box display=\"flex\" sx={{ alignItems: isSmall ? \"flex-start\" : \"center\", justifyContent: \"space-between\", flexDirection: isSmall ? \"column\" : \"row\" }}>\n <Box style={{ width: isXS ? \"98%\" : 483 }}>\n <Grid container spacing={2}>\n <Grid item lg={8} xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n sort={{ field: 'name', order: 'ASC' }}\n onChange={(value) => {\n handleProjectChange(value);\n }}\n filter={{ isDraft: false, status: true }}\n className={classes.referenceMargin}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n </Box>\n <Box>\n <Typography style={{ color: \"gray\", marginBottom: isSmall && 10 }}>\n {initialValues && initialValues.businessReadlinesListByuser && initialValues.businessReadlinesListByuser[0].createdAt && `Updated at ${moment(initialValues?.businessReadlinesListByuser[0]?.createdAt).format(\"hh:mm:ss a, MM/DD/YYYY\")} (UTC)`}\n </Typography>\n </Box>\n </Box>\n {\n governanceLoading && <Loading />\n }\n {values && values.projectId &&\n <div className={classes.root} style={{ width: isSmall ? \"90vw\" : \"100%\" }}>\n <GovernanceForm\n push={push}\n // onClose={onClose}\n assessmentChoice={initialValues ? initialValues.assessmentChoice : null}\n businessReadlinessList={initialValues ? initialValues.businessReadlinesListByuser : null}\n />\n <div className={classes.actionToolbar}>\n <Button\n onClick={() => onSubmit(values)}\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n >\n Submit\n </Button>\n </div>\n </div>\n }\n </form>\n )}\n />\n </Box>\n }\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n )\n}\n\n\nconst GovernanceForm = ({ push, onClose, businessReadlinessList, assessmentChoice }) => {\n const classes = useStyles();\n const [businessReadlines, setBusinessReadliness] = React.useState();\n const form = useForm();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const handleAddDimension = () => {\n push(\"businessReadlines\", undefined);\n businessReadlines.push({})\n console.log(push)\n // setMilestones([...milestones, {}])\n // setMilestones(prevMilestones => [...prevMilestones, {}]);\n }\n React.useEffect(() => {\n setBusinessReadliness(businessReadlinessList);\n }, [businessReadlinessList])\n if (businessReadlines)\n return (\n <div>\n <Box style={{ display: isSmall ? \"none\" : \"block\" }}>\n <Grid container direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\" spacing={2}>\n <Grid item xs={12} lg={6}>\n <Typography variant='h5' >Dimension Question</Typography>\n </Grid>\n <Grid item xs={12} lg={3} >\n <Typography variant='h5'>Assessment</Typography>\n </Grid>\n <Grid item xs={12} lg={3}>\n <Typography variant='h5'>Commentary</Typography>\n </Grid>\n </Grid>\n </Box>\n\n <Box>\n {businessReadlines.map((buredline, index) => (\n Boolean(businessReadlines) && <>\n <Grid\n key={`${buredline.name}_${index}`}\n container\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n spacing={isSmall ? 0 : 2}\n >\n <Grid item xs={12} lg={6}>\n <Field fullWidth name={`businessReadlinesListByuser[${index}].name`} component=\"input\">\n {(props) => (<Box display=\"flex\">\n <Box paddingTop={index < 9 ? \"7px\" : \"15px\"} paddingRight=\"3px\"> {index + 1 + \".\"}</Box>\n <StyledTextInput\n fullWidth\n name={props.input.name}\n disabled={index < 9 ? true : false}\n initialValue={buredline.name}\n value={buredline.name}\n onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"\"\n multiline\n validate={[required(), maxLength(255)]}\n InputProps={{\n style: {\n color: '#000',\n fontWeight: isSmall ? '500' : '400',\n border: index < 9 ? \"none\" : \"1px solid lightgrey\",\n padding: index < 9 ? 0 : \"10px 7px\",\n // width: index < 9 ? \"100%\" : \"300px\"\n },\n }}\n />\n </Box>\n\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={3} >\n <Field fullWidth name={`businessReadlinesListByuser[${index}].assessment`} component=\"input\">\n {(props) => (\n <RadioButtonGroupInput\n variant=\"outlined\"\n label=\"\"\n source={props.input.name}\n row={true}\n choices={assessmentChoice}\n validate={[required(), maxLength(255)]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={3}>\n <Field fullWidth name={`businessReadlinesListByuser[${index}].commentary`} component=\"input\">\n {(props) => (\n <TextInput\n fullWidth\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"Commentary (max 255 characters)\"\n validate={[maxLength(255)]}\n multiline\n // style={{ width: '280px' }}\n placeholder=''\n />\n )}\n </Field>\n </Grid>\n </Grid>\n {\n isSmall && <Box sx={{ marginBottom: \"12px\" }} >\n <Divider />\n </Box>\n }\n </>\n ))}\n <Box style={{ display: 'flex', justifyContent: 'center', }}>\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={handleAddDimension}\n color=\"primary\"\n variant=\"text\"\n >\n Add Dimension\n </Button>\n </Box>\n </Box>\n <Box style={{ margin: '10px 0' }}>\n <Divider />\n </Box>\n <Box style={{ backgroundColor: \"#E3E5EE\", minHeight: \"70px\", padding: \"20px 10px 0px\", borderRadius: '10px', marginTop: '20px', border: \"1px solid lightgrey\" }}>\n <Grid container direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\" spacing={isSmall ? 0 : 6}>\n <Grid item xs={12} lg={6} style={{ marginTop: '-15px' }}>\n <Typography variant='h6'>Is Change Governance in place?</Typography>\n </Grid>\n <Grid item xs={12} lg={3} style={{ padding: \"6px\", marginTop: '5px' }}>\n <RadioButtonGroupInput\n variant=\"outlined\"\n label=\"\"\n source={`governanceOverall[0].assessment`}\n row={true}\n choices={assessmentChoice}\n validate={[required(), maxLength(255)]}\n // style={{backgroundColor: \"#fff\", height: '44px', padding: '0 10px'}}\n />\n </Grid>\n <Grid item xs={12} lg={3} style={{ padding: \"6px 24px 0px 0px\" }}>\n <TextInput\n variant=\"outlined\"\n source={`governanceOverall[0].commentary`}\n label=\"Commentary (max 255 characters)\"\n className={classes.inputMargin}\n fullWidth\n multiline\n validate={[maxLength(255)]}\n InputProps={{\n style: {\n minHeight: \"41px\",\n }\n }}\n />\n </Grid>\n </Grid>\n </Box>\n </div>\n )\n\n return null;\n}","import { Box, Grid, Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useState } from 'react';\n\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n});\n\nexport const RiskAssessmentModalTable = ({ tableResponse }) => {\n const classes = useStyles();\n\n const [riskMasters, setRiskMasters] = useState([]);\n\n return (\n <div style={{ height: '90vh', overflowY: 'auto' }}>\n <Grid container>\n <Grid item lg={2} style={{ border: '1px solid #000000' }}>\n <Box style={{ display: 'flex', flexDirection: 'column', justifyContent: 'center' }}>\n\n <Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`1.${tableResponse[0]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[0]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`2.${tableResponse[1]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[1]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`3.${tableResponse[2]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[2]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`4.${tableResponse[0]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[3]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`5.${tableResponse[4]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[4]?.riskDescription}`}</Typography>\n </Box>\n </Box>\n {/* <Box style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', backgroundColor: \"#B3B3B3\" }}>\n <Typography style={{ textAlign: 'center', fontWeight: 'bold', fontSize: '18px' }}>{tableResponse[0]?.type} </Typography>\n </Box> */}\n </Box>\n </Grid>\n <Grid item lg={10} style={{ borderRight: '1px solid #000000' }}>\n\n <Box style={{ display: 'flex', }}>\n <Box style={{ flex: 1 }}>\n\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#C6EFCE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#75bf84', fontWeight: 'bold', fontSize: '18px' }}>Low</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#C6EFCE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#75bf84', fontWeight: 'bold', fontSize: '18px' }}>Low</Typography>\n </Box >\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#C6EFCE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#75bf84', fontWeight: 'bold', fontSize: '18px' }}>Low</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFEB9C', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#d1c184', fontWeight: 'bold', fontSize: '18px' }}>Medium</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFEB9C', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#d1c184', fontWeight: 'bold', fontSize: '18px' }}>Medium</Typography>\n </Box>\n {/* <Box style={{ padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`1.${tableResponse[5]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[5]?.riskDescription}`}</Typography>\n </Box> */}\n </Box>\n <Box style={{ flex: 1 }}>\n\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#C6EFCE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#75bf84', fontWeight: 'bold', fontSize: '18px' }}>Low</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFEB9C', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#d1c184', fontWeight: 'bold', fontSize: '18px' }}>Medium</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFEB9C', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#d1c184', fontWeight: 'bold', fontSize: '18px' }}>Medium</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC000', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#bd910d', fontWeight: 'bold', fontSize: '18px' }}>High</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC000', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#bd910d', fontWeight: 'bold', fontSize: '18px' }}>High</Typography>\n </Box>\n {/* <Box style={{ border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`2.${tableResponse[6]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[6]?.riskDescription}`}</Typography>\n </Box> */}\n </Box>\n <Box style={{ flex: 1 }}>\n\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#C6EFCE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#75bf84', fontWeight: 'bold', fontSize: '18px' }}>Low</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFEB9C', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#d1c184', fontWeight: 'bold', fontSize: '18px' }}>Medium</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC000', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#bd910d', fontWeight: 'bold', fontSize: '18px' }}>High</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC000', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#bd910d', fontWeight: 'bold', fontSize: '18px' }}>High</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC7CE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#c47e86', fontWeight: 'bold', fontSize: '18px' }}>Extreme</Typography>\n </Box>\n {/* <Box style={{ border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`3.${tableResponse[7]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[7]?.riskDescription}`}</Typography>\n </Box> */}\n </Box>\n <Box style={{ flex: 1 }}>\n\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFEB9C', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#d1c184', fontWeight: 'bold', fontSize: '18px' }}>Medium</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC000', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#bd910d', fontWeight: 'bold', fontSize: '18px' }}>High</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC000', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#bd910d', fontWeight: 'bold', fontSize: '18px' }}>High</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC7CE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#c47e86', fontWeight: 'bold', fontSize: '18px' }}>Extreme</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC7CE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#c47e86', fontWeight: 'bold', fontSize: '18px' }}>Extreme</Typography>\n </Box>\n {/* <Box style={{ border: '1px solid #000', padding: '4px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`4.${tableResponse[8]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[8]?.riskDescription}`}</Typography>\n </Box> */}\n </Box>\n <Box style={{ flex: 1 }}>\n\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFEB9C', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#d1c184', fontWeight: 'bold', fontSize: '18px' }}>Medium</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC000', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#bd910d', fontWeight: 'bold', fontSize: '18px' }}>High</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC7CE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#c47e86', fontWeight: 'bold', fontSize: '18px' }}>Extreme</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC7CE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#c47e86', fontWeight: 'bold', fontSize: '18px' }}>Extreme</Typography>\n </Box>\n <Box style={{ height: \"90px\", border: '1px solid #000', padding: '4px 6px', backgroundColor: '#FFC7CE', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography align=\"center\" style={{ color: '#c47e86', fontWeight: 'bold', fontSize: '18px' }}>Extreme</Typography>\n </Box>\n {/* <Box style={{ border: '1px solid #000', padding: '1px 6px' }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`5.${tableResponse[9]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[9]?.riskDescription}`}</Typography>\n </Box> */}\n </Box>\n </Box>\n {/* <Box style={{ backgroundColor: '#B3B3B3', borderBottom: '1px solid #000' }}>\n <Typography style={{ textAlign: 'center', fontWeight: 'bold', fontSize: '18px' }}>{`${tableResponse[5]?.type}`}</Typography>\n </Box> */}\n </Grid>\n <Box style={{ display: 'flex' }}>\n <Box style={{ display: 'flex', flex: 1, padding: \"0 6px\", alignItems: 'center', justifyContent: 'center', backgroundColor: \"#B3B3B3\", borderRight: \"2px solid #000\" }}>\n <Typography style={{ textAlign: 'center', fontWeight: 'bold', fontSize: '18px' }}>{tableResponse[0]?.type} </Typography>\n </Box>\n <Box style={{ borderRight: '2px solid #000', padding: '0 6px', flex: 1 }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`1.${tableResponse[5]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[5]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ borderRight: '2px solid #000', padding: '0 6px', flex: 1 }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`2.${tableResponse[6]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[6]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ borderRight: '2px solid #000', padding: '0 6px', flex: 1 }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`3.${tableResponse[7]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[7]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ borderRight: '2px solid #000', padding: '0 6px', flex: 1 }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`4.${tableResponse[8]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[8]?.riskDescription}`}</Typography>\n </Box>\n <Box style={{ borderRight: '2px solid #000', padding: '0 6px', flex: 1 }}>\n <Typography style={{ fontWeight: 'bold', fontSize: '15px' }}>{`5.${tableResponse[9]?.riskLabel}`}</Typography>\n <Typography style={{ fontSize: '13px' }}>{`${tableResponse[9]?.riskDescription}`}</Typography>\n </Box>\n </Box>\n <Box style={{ backgroundColor: '#B3B3B3', padding: \"0 8px\", borderBottom: '1px solid #000', flex: 1 }}>\n <Typography style={{ textAlign: 'center', fontWeight: 'bold', fontSize: '18px' }}>{`${tableResponse[5]?.type}`}</Typography>\n </Box>\n </Grid>\n </div>\n );\n}\n","import { IconButton } from '@material-ui/core';\nimport Backdrop from '@material-ui/core/Backdrop';\nimport Modal from '@material-ui/core/Modal';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport { RiskAssessmentModalTable } from '../impactAssesment/RiskAssessmentModalTable';\nimport CloseOutlinedIcon from '@mui/icons-material/CloseOutlined';\nimport { Box } from '@mui/material';\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n },\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: '1px solid #fff',\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n maxWidth: \"500px\",\n },\n paperImage: {\n\n backgroundColor: theme.palette.background.paper,\n border: '1px solid #fff',\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n maxWidth: \"95%\",\n\n },\n}));\nexport const RiskassementModal = ({ open, content, title, handleClose, tableResponse }) => {\n const classes = useStyles();\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 100,\n }}\n\n >\n {/* <Fade in={open}> */}\n {\n content != undefined ? <div className={classes.paper}>\n <Box style={{ display: 'flex', justifyContent: \"space-between\" }}>\n <h3 id=\"transition-modal-title\">{title}</h3>\n <IconButton disableFocusRipple={true} disableRipple={true} aria-label=\"info\" onClick={handleClose} style={{ backgroundColor: \"transparent\" }}>\n <CloseOutlinedIcon className={classes.outlineIcon} sx={{ \"&:hover\": { color: \"#000\" } }} />\n </IconButton>\n </Box>\n\n <p id=\"transition-modal-description\">{content}</p>\n </div>\n :\n <div className={classes.paperImage}>\n <div style={{ display: 'flex', justifyContent: \"flex-end\" }}>\n <IconButton aria-label=\"info\" onClick={handleClose} disableFocusRipple={true} disableRipple={true} style={{ backgroundColor: \"transparent\", }} >\n <CloseOutlinedIcon className={classes.outlineIcon} sx={{ \"&:hover\": { color: \"#000\" } }} />\n </IconButton>\n </div>\n {/* <img src={backgroundLogo} alt='Forget Password background logo' style={{ width: \"100%\" }} border=\"0\" /> */}\n <RiskAssessmentModalTable tableResponse={tableResponse} />\n </div>\n }\n {/* </Fade> */}\n </Modal>\n </div>\n )\n}\n","import React from 'react';\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, Typography, Box, } from '@mui/material';\nimport { withStyles } from '@mui/styles';\nimport { BorderBottom, Height } from '@mui/icons-material';\n\nconst styles = {\n root: {\n overflowX: 'auto',\n padding: 0\n },\n table: {\n minWidth: 650,\n },\n\n};\n\nconst ResponsiveTable = ({ classes, tableResponse }) => {\n return (\n <TableContainer className={classes.root} style={{ padding: 0 }}>\n <Table component={Paper} className={classes.table} aria-label=\"responsive table\">\n <TableBody>\n {[...Array(6)].map((_, rowIdx) => (\n <TableRow key={rowIdx}>\n {[...Array(6)].map((_, colIdx) => (\n <TableCell key={colIdx} sx={getTableCellStyle(rowIdx, colIdx)}>\n {getTableCellName(rowIdx, colIdx, tableResponse)}\n </TableCell>\n ))}\n </TableRow>\n ))}\n <TableRow>\n <TableCell colSpan={6} sx={{\n textAlign: \"center\",\n border: \"1px solid black\",\n backgroundColor: \"#b3b3b3\",\n borderTop: \"none\",\n fontWeight: \"600\"\n }}>Consequence</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n );\n};\n\nexport default withStyles(styles)(ResponsiveTable);\n\n\nconst getTableCellStyle = (rowIdx, colIdx) => {\n const style = { textAlign: \"center\", border: \"1px solid black\", fontWeight: \"600\", px: 10 }\n const low = { ...style, backgroundColor: \"#c6efce\", color: \"#75bf84\", }\n const medium = { ...style, backgroundColor: \"#ffeb9c\", color: \"#d1c184\", }\n const high = { ...style, backgroundColor: \"#ffc000\", color: \"#bd910d\", }\n const extreme = { ...style, backgroundColor: \"#ffc7ce\", color: \"#c78189\", }\n\n //low style\n if (rowIdx === 0 && (colIdx === 1 || colIdx === 2 || colIdx === 3)) {\n return low\n }\n\n if (colIdx === 1 && (rowIdx === 1 || rowIdx === 2)) {\n return low\n }\n\n //medium style\n if (rowIdx === 0 && (colIdx === 4 || colIdx === 5)) {\n return medium\n }\n\n if (rowIdx === 1 && (colIdx === 2 || colIdx === 3)) {\n return medium\n }\n\n if (rowIdx === 2 && (colIdx === 2)) {\n return medium\n }\n\n if (colIdx === 1 && (rowIdx === 3 || rowIdx === 4)) {\n return medium\n }\n\n //high style\n if (rowIdx === 1 && (colIdx === 4 || colIdx === 5)) {\n return high\n }\n\n if (rowIdx === 2 && (colIdx === 3 || colIdx === 4)) {\n return high\n }\n\n if (rowIdx === 3 && (colIdx === 2 || colIdx === 3)) {\n return high\n }\n\n if (colIdx === 2 && (rowIdx === 4)) {\n return high\n }\n\n //extreme style\n if (rowIdx === 2 && (colIdx === 5)) {\n return extreme\n }\n\n if (rowIdx === 3 && (colIdx === 4 || colIdx === 5)) {\n return extreme\n }\n\n if (rowIdx === 4 && (colIdx === 3 || colIdx === 4 || colIdx === 5)) {\n return extreme\n }\n\n if (colIdx === 0 && rowIdx < 5) {\n return { border: \"1px solid black\", }\n }\n\n if (rowIdx === 5 && colIdx > 0) {\n return {\n border: \"1px solid black\",\n\n }\n }\n\n if (colIdx === 0 && rowIdx === 5) {\n return {\n backgroundColor: \"#b3b3b3\",\n // borderBottom: \"none\",\n textAlign: \"center\",\n borderLeft: \"1px solid black\",\n fontWeight: \"600\",\n borderBottom: \"#b3b3b3\",\n width: 100\n }\n }\n\n\n}\n\nconst getTableCellName = (rowIdx, colIdx, data) => {\n const likelihood = data.filter((item) => item.type === \"Likelihood\");\n const consequence = data.filter((item) => item.type === \"Consequences\");\n\n if (rowIdx === 0 && (colIdx === 1 || colIdx === 2 || colIdx === 3)) {\n return \"LOW\"\n }\n\n if (colIdx === 1 && (rowIdx === 1 || rowIdx === 2)) {\n return \"LOW\"\n }\n\n if (rowIdx === 0 && (colIdx === 4 || colIdx === 5)) {\n return \"MEDIUM\"\n }\n\n if (rowIdx === 1 && (colIdx === 2 || colIdx === 3)) {\n return \"MEDIUM\"\n }\n\n if (rowIdx === 2 && (colIdx === 2)) {\n return \"MEDIUM\"\n }\n\n if (colIdx === 1 && (rowIdx === 3 || rowIdx === 4)) {\n return \"MEDIUM\"\n }\n\n if (rowIdx === 1 && (colIdx === 4 || colIdx === 5)) {\n return \"HIGH\"\n }\n\n if (rowIdx === 2 && (colIdx === 3 || colIdx === 4)) {\n return \"HIGH\"\n }\n\n if (rowIdx === 3 && (colIdx === 2 || colIdx === 3)) {\n return \"HIGH\"\n }\n\n if (colIdx === 2 && (rowIdx === 4)) {\n return \"HIGH\"\n }\n\n if (rowIdx === 2 && (colIdx === 5)) {\n return \"EXTREME\"\n }\n\n if (rowIdx === 3 && (colIdx === 4 || colIdx === 5)) {\n return \"EXTREME\"\n }\n\n if (rowIdx === 4 && (colIdx === 3 || colIdx === 4 || colIdx === 5)) {\n return \"EXTREME\"\n }\n\n if (colIdx === 0 && rowIdx < 5) {\n return <Typography sx={{ width: \"250px\" }}>\n <Typography sx={{ fontWeight: \"500\" }}>\n {rowIdx + 1}. {likelihood[rowIdx]?.riskLabel}\n </Typography>\n {likelihood[rowIdx]?.riskDescription}\n </Typography>\n }\n\n if (rowIdx === 5 && colIdx > 0) {\n return <Typography sx={{ width: \"300px\", }}>\n <Typography sx={{ fontWeight: \"500\" }}>\n {colIdx}. {consequence[colIdx - 1]?.riskLabel}\n </Typography>\n {consequence[colIdx - 1]?.riskDescription}\n </Typography>\n }\n\n if (colIdx === 0 && rowIdx === 5) {\n return \"Likelihood\"\n }\n}\n\n\n\n// const getTableCell = (rowIdx, colIdx, type) => {\n// const style = { textAlign: \"center\", border: \"1px solid black\", fontWeight: \"600\" }\n// if (rowIdx === 0 && (colIdx === 1 || colIdx === 2 || colIdx === 3)) {\n// return <TableCell key={colIdx} sx={{...style,backgroundColor: \"#c6efce\", color: \"#75bf84\",}}>\n// LOW\n// </TableCell>\n// }\n\n// if (rowIdx === 0 && (colIdx === 4 || colIdx === 5)) {\n// return <TableCell key={colIdx} sx={{...style,backgroundColor: \"#c6efce\", color: \"#75bf84\",}}>\n// LOW\n// </TableCell>\n// }\n// }","import { IconButton } from '@material-ui/core';\nimport Backdrop from '@material-ui/core/Backdrop';\nimport Modal from '@material-ui/core/Modal';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport CloseOutlinedIcon from '@mui/icons-material/CloseOutlined';\nimport { Box } from '@mui/material';\nimport ResponsiveTable from './ResponsiveMatrixTable'\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n },\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: '1px solid #fff',\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n width: \"100%\",\n height: \"100vh\",\n overflowY: \"auto\"\n },\n paperImage: {\n\n backgroundColor: theme.palette.background.paper,\n border: '1px solid #fff',\n boxShadow: theme.shadows[5],\n // padding: theme.spacing(2, 4, 3),\n maxWidth: \"100%\",\n\n },\n}));\nexport const RiskAssessmentResponsiveModal = ({ open, riskData, handleClose, tableResponse }) => {\n const classes = useStyles();\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 100,\n }}\n\n >\n <div className={classes.paper}>\n <Box style={{ display: 'flex', justifyContent: \"space-between\" }}>\n <h3 id=\"transition-modal-title\">{riskData?.riskName}</h3>\n <IconButton disableFocusRipple={true} disableRipple={true} aria-label=\"info\" onClick={handleClose} style={{ backgroundColor: \"transparent\" }}>\n <CloseOutlinedIcon className={classes.outlineIcon} sx={{ \"&:hover\": { color: \"#000\" } }} />\n </IconButton>\n </Box>\n <h4>Risk Description</h4>\n <p id=\"transition-modal-description\">{riskData?.riskDescription}</p>\n <h4>Impact Description</h4>\n <p id=\"transition-modal-description\">{riskData?.impactDescription}</p>\n\n <div className={classes.paperImage}>\n <ResponsiveTable tableResponse={tableResponse} />\n </div>\n </div>\n </Modal>\n </div>\n )\n}\n","import { Box, Button, Divider, Grid, IconButton, Tooltip, Typography, useMediaQuery, withStyles, TextareaAutosize, } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\nimport { useEffect, useState } from 'react';\nimport {\n AutocompleteInput,\n Loading,\n ReferenceInput,\n SelectInput,\n TextInput,\n Title,\n maxLength, required,\n useDataProvider,\n useNotify,\n usePermissions,\n} from 'react-admin';\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport arrayMutators from \"final-form-arrays\";\nimport { Field, Form } from \"react-final-form\";\nimport { consequenceChoice, likelihoodChoice } from \"../../framework/constants\";\nimport { impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from \"../../utils/WithPermission\";\nimport { RiskassementModal } from \"../project/riskassementModal\";\nimport moment from \"moment\";\nimport { RiskAssessmentResponsiveModal } from \"./RiskAssessmentResponsiveModal\";\nimport { Alert, Snackbar } from \"@mui/material\";\n\n\nconst LightTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 11,\n },\n}))(Tooltip);\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: \"#FFFFFF\",\n borderRadius: '5px',\n padding: '6px',\n // borderTop: '2px solid #B1b1b1'\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n forecastTitle: {\n backgroundColor: \"#F2F2F2\",\n display: \"flex\",\n },\n forecastCard: {\n marginBottom: 30,\n margin: \"0 auto\",\n width: \"90%\",\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\"\n }\n },\n forecastCardRow: {\n display: \"flex\",\n },\n forecastCardWeek: {\n width: \"17%\",\n fontSize: 14,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"row\",\n [theme.breakpoints.down(\"md\")]: {\n fontSize: 14,\n flexDirection: \"column\",\n },\n textAlign: \"center\",\n },\n text_design: {\n textAlign: 'center !important',\n fontWeight: '600'\n },\n forecastRiskContainer: {\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr 1fr 1fr\",\n placeItems: \"start\",\n margin: '5px 4px',\n alignItems: \"flex-start\"\n },\n forecastRiskBox: {\n width: '150px',\n height: 51,\n [theme.breakpoints.down(\"md\")]: {\n minWidth: 64,\n height: 40,\n },\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 0.7,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n \"&.border\": {\n opacity: 1,\n },\n },\n forecastTitleText: {\n fontSize: 16,\n fontWeight: 500,\n fontStyle: \"normal\",\n margin: 0,\n },\n commentary: {\n width: '100%',\n height: '150px'\n },\n formControl: {\n width: '100%',\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n },\n overallImpact: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n [theme.breakpoints.down(\"xs\")]: {\n flexDirection: \"column\",\n },\n },\n}));\nconst choice = [\n { id: 1, value: '1' },\n { id: 2, value: '2' },\n { id: 3, value: '3' },\n { id: 4, value: '4' },\n { id: 5, value: '5' }\n]\n\nconst HtmlTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: '#f5f5f9',\n color: 'rgba(0, 0, 0, 0.87)',\n maxWidth: 220,\n fontSize: theme.typography.pxToRem(12),\n border: '1px solid #dadde9',\n },\n}))(Tooltip);\n\nexport const RiskManagement = (props) => {\n const { record, activeStep, handleBack, handleNext, steps, setIsUpdateProjectDetails } = props\n const classes = useStyles();\n const user = TokenStorage.getUserDetails();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [riskMaster, setRiskMaster] = useState([]);\n const dataProvider = useDataProvider();\n const [singleRisk, setSingleRisk] = useState({});\n const [commentary, setCommentary] = useState([]);\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n\n\n const [anchorOrigin, setAnchorOrigin] = useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const [riskModal, setRiskModal] = useState([]);\n const [impactModal, setImpactModal] = useState();\n const [content, setContent] = useState('');\n const [riskData, setRiskData] = useState({});\n const [title, setTitle] = useState('');\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n const localProjectDetails = TokenStorage.getProjectDetails();\n const [consequenceIndex, setConsequenceIndex] = useState([])\n const [likelihood, setLikelihood] = useState([])\n const [selectedValues, setSelectedValues] = useState({});\n const [modalOpen, setModalOpen] = useState(false);\n const [overallRisk, setOverallRisk] = useState([]);\n const [overallCommentry, setOverallCommentry] = useState({ commentary: \"\" });\n const [optionLoading, setOptionLoading] = useState(true)\n const [scores, setScores] = useState([]);\n const [initialValues, setInitialValues] = useState([])\n const { loading: loadingPermissions, permissions } = usePermissions();\n const [riskManagemnetLoading, setRiskManagementLoading] = useState(false)\n const [riskMatirxMasters, setRiskMatrixMasters] = useState([])\n impersonatedURL(isImpersonating, '#/risk_assessment?impersonated');\n const isXS = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n // const handleRadioChange = (index, type, value) => {\n // console.log(index, type, value)\n // // Update the selected values based on the row index and radio type\n // setSelectedValues(prevValues => {\n // const newValues = [...prevValues];\n // newValues[index] = {\n // ...newValues[index],\n // [type]: value,\n // };\n // return newValues;\n // });\n // };\n\n\n\n useEffect(() => {\n dataProvider\n .postRequest(\"RiskMatrixMaster\", {\n queryType: \"list\",\n data: {},\n })\n .then(({ data }) => {\n setRiskMatrixMasters(data);\n // else setError(\"No details found\")\n // setLoading(false)\n })\n .catch(() => {\n console.log(\"Something went wrong\");\n })\n }, [])\n const handleProjectChange = async (projectId) => {\n setRiskManagementLoading(true)\n\n\n const riskMaster = await dataProvider\n .postRequest(\"RiskAssessment\", {\n queryType: \"list\",\n data: {\n projectId: projectId\n },\n })\n setRiskMaster(riskMaster.data);\n\n\n dataProvider\n .postRequest(\"RiskAssessment\", {\n queryType: \"retrieve\",\n data: {\n projectId: projectId\n }\n }).then((response) => {\n console.log(response)\n const responseModifed = response.data.map((item) => {\n if (item.score > 13) {\n item['scoreLevel'] = 'Extreme'\n }\n else if (item.score > 7) {\n item['scoreLevel'] = 'High'\n }\n else if (item.score > 3) {\n item['scoreLevel'] = 'Medium'\n }\n else if (item.score >= 1) {\n item['scoreLevel'] = 'Low'\n }\n else {\n item['scoreLevel'] = ''\n }\n return item\n })\n responseModifed.map((item, index) => {\n if (item.riskName == undefined) {\n item['riskName'] = riskMaster.data[index].riskName\n }\n return item\n })\n console.log(responseModifed)\n setInitialValues({ projectId: projectId, riskAssesments: responseModifed })\n setRiskManagementLoading(false)\n // setDefaultRiskAssessment(response.data)\n // setConsequenceIndex(response.data.map(item => Number(item.consequence)))\n // setLikelihood(response.data.map(item => Number(item.likelihood)))\n // setCommentary(response.data.map(item => item.commentary))\n // setOverallRisk(response.data.map(({ id, ...rest }) => rest))\n // setOptionLoading(false)\n }).catch((err) => {\n console.log(err.message)\n })\n }\n const handleOverallCommentary = (value) => {\n const oldObject = { ...overallCommentry };\n oldObject[\"commentary\"] = value;\n setOverallCommentry(oldObject);\n };\n\n const handleChange = (index, value, risk) => {\n\n const udpateIndex = [...consequenceIndex]\n udpateIndex[index] = value\n // console.log(index, activeIndx)\n setConsequenceIndex(udpateIndex)\n\n setOverallRisk((prevData) => {\n const newData = [...prevData];\n newData[index] = {\n ...newData[index],\n consequence: value,\n score: value * Number(newData[index]?.likelihood || 0),\n projectId: localProjectDetails.id,\n riskAssessmentMasterId: Number(risk.id)\n };\n return newData;\n });\n // const preValue = scores[index];\n // const calc = \n }\n const handleLikelihoodChange = (index, value, risk) => {\n\n const udpateIndex = [...consequenceIndex]\n udpateIndex[index] = value\n // console.log(index, activeIndx)\n setLikelihood(udpateIndex)\n\n setOverallRisk((prevData) => {\n const newData = [...prevData];\n newData[index] = {\n ...newData[index],\n likelihood: value,\n score: value * Number(newData[index]?.consequence || 0),\n projectId: localProjectDetails.id,\n riskAssessmentMasterId: Number(risk.id)\n };\n return newData;\n });\n }\n const handleClose = () => {\n setRiskModal([])\n };\n const handleCloseImageModal = () => {\n setModalOpen(false)\n }\n const handleTooltipOpen = (index, risk) => {\n const udpateIndex = [...riskModal]\n udpateIndex[index] = risk.id\n // console.log(index, activeIndx)\n setTitle(risk.riskName)\n setRiskModal(udpateIndex)\n setContent(risk.riskDescription);\n\n // setModalOpen(true)\n };\n\n const handleImpactModal = (index, risk) => {\n const udpateIndex = [...riskModal]\n udpateIndex[index] = risk.id\n // console.log(index, activeIndx)\n setRiskModal(udpateIndex)\n setTitle(risk.riskName)\n setContent(risk.impactDescription);\n // setModalOpen(true)\n };\n\n\n const handleResponsiveModal = (index, risk) => {\n const udpateIndex = [...riskModal]\n udpateIndex[index] = risk.id\n // console.log(index, activeIndx)\n setRiskModal(udpateIndex)\n // setTitle(risk.riskName)\n setRiskData(risk);\n // setModalOpen(true)\n };\n\n const handleHeaderModal = () => {\n setModalOpen(true)\n }\n const handleCommentary = (index, id, value) => {\n const updateCommentary = [...commentary]\n updateCommentary[index] = value\n setCommentary(updateCommentary)\n }\n\n const onSubmit = (values, form) => {\n // console.log(values)\n // const risk_form_values = values.riskAssesments;\n // console.log(commentary)\n const requestBody = values.riskAssesments.slice(0, 14).map((item) => {\n const params = {\n score: Number(item.consequence) * Number(item.likelihood),\n riskAssessmentMasterId: Number(item.riskAssessmentMasterId),\n commentary: item.commentary || \"\",\n consequence: Number(item.consequence),\n likelihood: Number(item.likelihood),\n projectId: Number(values.projectId)\n }\n return params\n })\n const otherRequestBody = values.riskAssesments.slice(14).map((item) => {\n const params = {\n riskName: item.riskName,\n score: Number(item.consequence) * Number(item.likelihood),\n commentary: item.commentary || \"\",\n consequence: Number(item.consequence),\n likelihood: Number(item.likelihood),\n\n\n }\n return params\n })\n // console.log(values.riskAssesments)\n const r_values = {\n projectId: values.projectId,\n riskAssessments: requestBody,\n otherRiskAssessments: otherRequestBody\n };\n console.log(values)\n dataProvider\n .postRequest(\"RiskAssessment\", {\n queryType: \"create\",\n data: r_values,\n })\n .then(async (response) => {\n // setImpactResponse(response.data)\n // handleNext(response.data)\n console.log(response)\n // await handleSteper(response.data, values.status)\n handleSnackbarOpen(\"Risk assessment udpated successfully\", \"success\");\n })\n .catch((error) => {\n handleSnackbarOpen(error.message, \"error\");\n });\n // console.log(overallRisk)\n\n };\n const handleConsequencesScore = (index, form, value, values, masterId) => {\n console.log((values.riskAssesments[index]))\n let score = \"\";\n if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].likelihood : 0) > 13) {\n score = \"Extreme\"\n }\n else if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].likelihood : 0) > 7) {\n score = \"High\"\n }\n else if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].likelihood : 0) > 3) {\n score = \"Medium\"\n }\n else if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].likelihood : 0) >= 1) {\n score = \"Low\"\n }\n form.change(`riskAssesments[${index}].scoreLevel`, score)\n form.change(`riskAssesments[${index}].riskAssessmentMasterId`, masterId)\n console.log(values)\n }\n //handle likelihodd\n const handleLikelihoodScore = (index, form, value, values, masterId) => {\n console.log((values.riskAssesments[index]))\n let score = \"\";\n if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].consequence : 0) > 13) {\n score = \"Extreme\"\n }\n else if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].consequence : 0) > 7) {\n score = \"High\"\n }\n else if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].consequence : 0) > 3) {\n\n score = \"Medium\"\n }\n else if (Number(value) * (Boolean(values.riskAssesments[index]) ? values.riskAssesments[index].consequence : 0) >= 1) {\n score = \"Low\"\n }\n form.change(`riskAssesments[${index}].scoreLevel`, score)\n form.change(`riskAssesments[${index}].riskAssessmentMasterId`, masterId)\n console.log(values)\n }\n\n const handlePush = (form) => {\n form.mutators.push('riskAssesments', undefined);\n // console.log(form.getState().values)\n riskMaster.push({\n riskName: \"\",\n riskDescription: \"\"\n })\n }\n return (\n <WithPermission resource=\"Change Assessment\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title=\"Change Risk Assessment\" className={classes.title} />\n <div>\n <Form onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n initialValues={initialValues}\n render={({ handleSubmit, form, values }) => (\n <form onSubmit={handleSubmit}>\n <Box display=\"flex\" sx={{ alignItems: isSmall ? \"flex-start\" : \"center\", justifyContent: \"space-between\", flexDirection: isSmall ? \"column\" : \"row\", }}>\n <Box style={{ width: isXS ? \"100%\" : 483 }}>\n <Grid container spacing={2}>\n <Grid item lg={8} xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n sort={{ field: 'name', order: 'ASC' }}\n onChange={(value) => {\n handleProjectChange(value);\n }}\n filter={{ isDraft: false, status: true }}\n className={classes.referenceMargin}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n </Box>\n <Box>\n <Typography style={{ color: \"gray\", marginBottom: isSmall && 12 }}>\n {initialValues && initialValues.riskAssesments && initialValues.riskAssesments.length > 0 && `Updated at ${moment(initialValues?.riskAssesments[0]?.createdAt).format(\"hh:mm:ss a, MM/DD/YYYY\")} (UTC)`}\n </Typography>\n </Box>\n </Box>\n {\n riskManagemnetLoading && <Loading />\n }\n {\n values && values.projectId && <div className={classes.root}>\n <div >\n {\n !isSmall && <Grid container spacing={2} style={{ textAlign: 'center', padding: \"4px 0\" }}>\n <Grid lg={3}></Grid>\n <Grid lg={2}>\n <Box style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography variant=\"h6\">Consequence</Typography>\n <IconButton aria-label=\"info\" onClick={handleHeaderModal} size=\"small\">\n <InfoOutlinedIcon className={classes.outlineIcon} sx={{ color: \"rgb(10,179,156)\" }} />\n </IconButton>\n </Box>\n </Grid>\n <Grid lg={2}>\n <Box style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Typography variant=\"h6\">Likelihood</Typography>\n <IconButton aria-label=\"info\" onClick={handleHeaderModal} size=\"small\">\n <InfoOutlinedIcon className={classes.outlineIcon} sx={{ color: \"rgb(10,179,156)\" }} />\n </IconButton>\n </Box>\n </Grid>\n <Grid lg={2}>\n <Typography variant=\"h6\">Rating</Typography>\n </Grid>\n <Grid lg={3}>\n <Typography variant=\"h6\">Comments</Typography>\n </Grid>\n </Grid>\n }\n\n <RiskassementModal open={modalOpen} tableResponse={riskMatirxMasters} content={undefined} title={title} handleClose={handleCloseImageModal} />\n {\n riskMaster.map((risk, index) => (\n <>\n <Grid container spacing={isSmall ? 0 : 2} alignItems=\"center\">\n <Grid item xs={12} lg={3}>\n <Box sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"left\",\n flexDirection: \"column\",\n padding: !isSmall && \"18px\",\n borderRight: isSmall ? \"none\" : \"1px solid #C4C4C4\"\n }}>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\n {\n risk?.riskDescription === \"\" ? <TextInput\n fullWidth\n\n source={`riskAssesments[${index}].riskName`}\n\n variant=\"outlined\"\n label=\"Risk Name\"\n validate={[maxLength(255)]}\n multiline\n InputProps={{\n style: {\n minHeight: \"51px\"\n }\n }}\n placeholder=''\n />\n :\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <Typography className={classes.heading} style={{ fontWeight: isSmall ? '500' : '400', }}>\n {index + 1 + \". \"}{risk?.riskName}\n </Typography>\n <LightTooltip title={risk?.riskInfo} placement=\"left-start\">\n {\n isSmall ? <IconButton aria-label=\"info\" onClick={() => handleResponsiveModal(index, risk)}>\n <InfoOutlinedIcon className={classes.outlineIcon} sx={{ color: \"rgb(10,179,156)\" }} />\n </IconButton> :\n <IconButton aria-label=\"info\" >\n <InfoOutlinedIcon className={classes.outlineIcon} sx={{ color: \"rgb(10,179,156)\" }} />\n </IconButton>\n }\n\n </LightTooltip>\n </div>\n }\n\n </Box>\n {\n !isSmall && risk?.riskDescription && <Box display=\"flex\" flexDirection=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"subtitle3\" style={{ textDecoration: \"underline\", color: \"\", cursor: 'pointer' }} onClick={() => handleTooltipOpen(index, risk)}>Risk Description</Typography>\n <Typography variant=\"subtitle3\" style={{ textDecoration: \"underline\", color: \"\", cursor: 'pointer' }} onClick={() => handleImpactModal(index, risk)}>Impact Description</Typography>\n </Box>\n }\n\n\n {\n isSmall ? <RiskAssessmentResponsiveModal\n open={riskModal[index] == risk.id}\n riskData={riskData}\n handleClose={handleClose}\n tableResponse={riskMatirxMasters}\n /> :\n <RiskassementModal open={riskModal[index] == risk.id && risk?.riskName !== ''} content={content} title={title} handleClose={handleClose} />\n }\n\n </Box>\n </Grid>\n <Grid item xs={12} lg={2}>\n <SelectInput\n variant=\"outlined\"\n source={`riskAssesments[${index}].consequence`}\n label=\"Consequence\"\n choices={consequenceChoice}\n className={classes.inputMargin}\n onChange={(e) => {\n handleConsequencesScore(index, form, e.target.value, values, risk.id)\n }}\n fullWidth\n validate={[required(), maxLength(255)]}\n InputProps={{\n style: {\n height: \"51px\"\n }\n }}\n />\n </Grid>\n <Grid item xs={12} lg={2}>\n <SelectInput\n variant=\"outlined\"\n source={`riskAssesments[${index}].likelihood`}\n label=\"Likelihood\"\n choices={likelihoodChoice}\n className={classes.inputMargin}\n onChange={(e) => {\n handleLikelihoodScore(index, form, e.target.value, values, risk.id)\n }}\n fullWidth\n validate={[required(), maxLength(255)]}\n InputProps={{\n style: {\n height: \"51px\"\n }\n }}\n />\n </Grid>\n <Grid item xs={12} lg={2}>\n {/* <Box style={{backgroundColor: }}>\n {form.getState()?.values?.riskAssesments[index]?.score}\n </Box> */}\n <Field fullWidth name={`riskAssesments[${index}].scoreLevel`} component=\"input\">\n {(props) => (\n <>\n <TextInput\n fullWidth\n name={props.input.name}\n // initialValue={(Number(props.input.value) > 13 || props.input.value == \"Extreme\") ? \"Extreme\" : (Number(props.input.value) > 7 || props.input.value == 'High') ? \"High\" : (Number(props.input.value) > 3 || props.input.value == \"Medium\") ? \"Medium\" : (Number(props.input.value) > 1 || props.input.value == \"Low\") ? \"Low\" : \"\"}\n // value={props.input.value}\n disabled={true}\n // onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"\"\n validate={[maxLength(255)]}\n // multiline\n\n InputProps={{\n style: {\n color: '#000',\n backgroundColor: (Number(props.input.value) > 13 || props.input.value == \"Extreme\") ? '#EB5750' : (Number(props.input.value) > 7 || props.input.value == \"High\") ? '#FFC7CE' : (Number(props.input.value) > 3 || props.input.value == \"Medium\") ? \"#FFFF00\" : (Number(props.input.value) >= 1 || props.input.value == \"Low\") ? \"#A9D08E\" : \"transparent\",\n height: '51px'\n },\n classes: {\n input: classes.text_design\n }\n }}\n // inputComponent=\"textarea\"\n // textareaComponent={{\n // style: {\n // textAlign: 'center',\n // // other styles...\n // },\n // }}\n />\n {/* {console.log(props.input.value)} */}\n </>\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={3}>\n <TextInput\n fullWidth\n // initialValue={risk.commentary}\n // value={props.input.value}\n source={`riskAssesments[${index}].commentary`}\n\n variant=\"outlined\"\n label=\"Commentary (max 255 characters)\"\n validate={[maxLength(255)]}\n multiline\n InputProps={{\n style: {\n minHeight: \"51px\"\n }\n }}\n placeholder=''\n />\n {/* <TextareaAutosize aria-label=\"commentary\" minRows={3} placeholder=\"Enter risk commentary\" style={{ width: '100%' }} onChange={(e) => handleCommentary(index, risk.id, e.target.value)} value={commentary[index] || ''} /> */}\n\n </Grid>\n </Grid>\n {\n isSmall && <Box sx={{ marginBottom: \"12px\" }} >\n <Divider />\n </Box>\n }\n </>\n ))\n }\n <Box style={{ display: 'flex', justifyContent: 'center', }}>\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={() => handlePush(form)}\n color=\"primary\"\n variant=\"text\"\n >\n Add Risk\n </Button>\n </Box>\n </div>\n <div className={classes.actionToolbar}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n // disabled={submitting}\n >\n Submit\n </Button>\n </div>\n </div>\n }\n\n </form>\n )}\n />\n </div>\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission >\n )\n}\n\nconst AddRisk = () => {\n return (\n <div>\n <button>add more</button>\n </div>\n )\n}","import React from 'react';\n\nimport { Box, Divider, Typography, useMediaQuery } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport arrayMutators from \"final-form-arrays\";\nimport {\n AutocompleteInput,\n Loading,\n RadioButtonGroupInput,\n ReferenceInput,\n TextInput,\n Title,\n maxLength, required,\n useDataProvider,\n useNotify,\n usePermissions,\n useRefresh\n} from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport { StyledTextInput, impersonatedURL, onFailureMessage } from '../../utils/AppUtils';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\nimport moment from 'moment';\nimport { Alert, Snackbar } from '@mui/material';\n\n\nconst useStyles = makeStyles({\n root: {\n backgroundColor: \"#FFFFFF\",\n borderRadius: '5px',\n // padding: '15px 30px 15px 15px',\n padding: '15px',\n // borderTop: '2px solid #B1b1b1'\n // border: \"1px solid red\",\n // margin: 0\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n textAreaInput: {\n minHeight: '60px',\n lineHeight: 1.5\n },\n textAreaBorder: {\n border: 'none'\n },\n title: {\n textTransform: \"uppercase\",\n // fontSize: \"16px\" // Adjust the font size as needed\n },\n});\nexport const BusinessReadliness = (props) => {\n const { record, activeStep, handleBack, handleNext, steps, setIsUpdateProjectDetails } = props\n const [initialValues, setInitialValues] = React.useState();\n const user = TokenStorage.getUserDetails();\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const refresh = useRefresh();\n const classes = useStyles();\n const localProjectDetails = TokenStorage.getProjectDetails()\n const [businessReadlineLoading, setBusinessReadlineLoading] = React.useState(false);\n const [businessReadlines, setBusinessReadliness] = React.useState([])\n const resource = \"BusinessReadliness\";\n const [draftStatus, setDraftStatus] = React.useState(false);\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n const { loading: loadingPermissions, permissions } = usePermissions();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const isXS = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n impersonatedURL(isImpersonating, '#/readiness?impersonated');\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n React.useEffect(() => {\n\n dataProvider\n .postRequest(\"BusinessReadliness\", {\n queryType: \"list\",\n data: {\n \"type\": \"Readiness\"\n }\n })\n .then((response) => {\n setBusinessReadliness(response.data);\n })\n .catch((error) => {\n console.log(error)\n });\n\n\n }, [])\n const handleProjectChange = async (projectId) => {\n setBusinessReadlineLoading(true)\n const businessReadlinesListByuser = await dataProvider\n .postRequest(\"BusinessReadliness\", {\n queryType: \"retrieve\",\n data: {\n \"projectId\": projectId,\n \"type\": \"Readiness\"\n }\n })\n const readiness = businessReadlinesListByuser.data.filter(read => read.type === 'Readiness');\n const readinessOverall = businessReadlinesListByuser.data.filter(read => read.type === 'ReadinessOverall')\n // console.log( businessReadlinesListByuser.data)\n\n businessReadlinesListByuser.data = businessReadlinesListByuser.data.length > 0 ? readiness : businessReadlines;\n // console.log(businessReadlinesListByuser)\n\n setInitialValues({\n projectId: projectId, businessReadlinesListByuser: businessReadlinesListByuser\n .data,\n readinessOverall: readinessOverall.length === 0 ? [{ projectId, name: \"Business Readiness Assessment\", assessment: \"\", commentary: \"\", type: `ReadinessOverall` }] : readinessOverall\n , assessmentChoice: [{ id: \"Yes\", name: \"Yes\" }, { id: \"No\", name: \"No\" }, { id: \"N/A\", name: \"N/A\" }]\n })\n setBusinessReadlineLoading(false)\n }\n\n const onSubmit = (values, form, status) => {\n const item = values.readinessOverall[0];\n const { id, createdAt, ...rest } = item;\n rest['projectId'] = values.projectId;\n const businessReadlines = {\n projectId: values.projectId,\n type: \"Readiness\",\n readinessGovernanceAssessments: values.businessReadlinesListByuser.filter(buread => Boolean(buread)).map(buread => ({\n name: buread.name,\n assessment: buread.assessment,\n commentary: buread?.commentary || \"\",\n type: \"Readiness\",\n projectId: values.projectId\n }))\n }\n\n businessReadlines.readinessGovernanceAssessments.push(rest)\n dataProvider\n .postRequest(resource, {\n queryType: \"create\",\n data: businessReadlines,\n })\n .then(async (response) => {\n console.log(response)\n handleSnackbarOpen(\"Business readiness updated successfully\", \"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n };\n const validate = () => {\n\n };\n\n\n return (\n <WithPermission resource=\"Change Assessment\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title=\"Change Business Readiness\" className={classes.title} style={{ fontSize: isSmall ? \"18px\" : \"20px\" }} />\n {\n <Box mr={isXS ? 0 : 4}>\n <Form\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={initialValues}\n render={({\n handleSubmit,\n values,\n form: {\n mutators: { push, pop },\n },\n }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Box display=\"flex\" sx={{ alignItems: isSmall ? \"flex-start\" : \"center\", justifyContent: \"space-between\", flexDirection: isSmall ? \"column\" : \"row\", }}>\n <Box sx={{ width: isXS ? \"98%\" : 483 }}>\n <Grid container spacing={2}>\n <Grid item lg={8} xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n sort={{ field: 'name', order: 'ASC' }}\n onChange={(value) => {\n handleProjectChange(value);\n }}\n filter={{ isDraft: false, status: true }}\n className={classes.referenceMargin}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n </Box>\n <Box >\n <Typography style={{ color: \"gray\", marginBottom: isSmall && 10 }}>\n {initialValues && initialValues.businessReadlinesListByuser && initialValues.businessReadlinesListByuser[0].createdAt && `Updated at ${moment(initialValues?.businessReadlinesListByuser[0]?.createdAt).format(\"hh:mm:ss a, MM/DD/YYYY\")} (UTC)`}\n </Typography>\n </Box>\n </Box>\n {\n businessReadlineLoading && <Loading />\n }\n {values && values.projectId &&\n <div className={classes.root} style={{ width: isSmall ? \"90vw\" : \"100%\" }}>\n <BusinessReadlineForm\n push={push}\n // onClose={onClose}\n assessmentChoice={initialValues ? initialValues.assessmentChoice : null}\n businessReadlinessList={initialValues ? initialValues.businessReadlinesListByuser : null}\n />\n <div className={classes.actionToolbar}>\n <Button\n onClick={() => onSubmit(values)}\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n >\n Submit\n </Button>\n </div>\n </div>\n }\n\n </form>\n )}\n />\n </Box>\n }\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n )\n}\n\n\nconst BusinessReadlineForm = ({ push, onClose, businessReadlinessList, assessmentChoice }) => {\n const classes = useStyles();\n const [businessReadlines, setBusinessReadliness] = React.useState();\n const form = useForm();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const handleAddDimension = () => {\n push(\"businessReadlines\", undefined);\n businessReadlines.push({})\n console.log(push)\n // setMilestones([...milestones, {}])\n // setMilestones(prevMilestones => [...prevMilestones, {}]);\n }\n React.useEffect(() => {\n setBusinessReadliness(businessReadlinessList);\n }, [businessReadlinessList])\n if (businessReadlines)\n return (\n <div >\n <Box style={{ display: isSmall ? \"none\" : \"block\" }}>\n <Grid container direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\" spacing={2}>\n <Grid item xs={12} lg={6}>\n <Typography variant='h5' >Dimension Question</Typography>\n </Grid>\n <Grid item xs={12} lg={3} >\n <Typography variant='h5'>Assessment</Typography>\n </Grid>\n <Grid item xs={12} lg={3}>\n <Typography variant='h5'>Commentary</Typography>\n </Grid>\n </Grid>\n\n </Box>\n <Box>\n {businessReadlines.map((buredline, index) => (\n Boolean(businessReadlines) && <Box> <Grid\n key={`${buredline.name}_${index}`}\n container\n direction={isSmall ? \"column\" : \"row\"}\n justifyContent=\"center\"\n alignItems=\"center\"\n spacing={isSmall ? 0 : 2}\n >\n <Grid item xs={12} lg={6} style={{ width: \"100%\" }} >\n <Field fullWidth name={`businessReadlinesListByuser[${index}].name`} component=\"input\">\n {(props) => (<Box display=\"flex\">\n <Box paddingTop={index < 15 ? \"7px\" : \"15px\"} paddingRight=\"3px\"> {index + 1 + \".\"}</Box>\n <StyledTextInput\n fullWidth\n name={props.input.name}\n disabled={index < 15 ? true : false}\n initialValue={buredline.name}\n value={buredline.name}\n onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"\"\n validate={[required(), maxLength(255)]}\n style={{ color: \"#000\", border: 'none' }}\n multiline\n InputProps={{\n style: {\n color: '#000',\n fontWeight: isSmall ? '500' : '400',\n border: index < 15 ? \"none\" : \"1px solid lightgrey\",\n padding: index < 15 ? 0 : \"10px 7px\",\n },\n // classes: {\n // textarea: classes.textAreaBorder\n // }\n }}\n />\n </Box>\n\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={3} style={{ width: \"100%\" }} >\n <Field fullWidth name={`businessReadlinesListByuser[${index}].assessment`} component=\"input\">\n {(props) => (\n\n <RadioButtonGroupInput\n variant=\"outlined\"\n label=\"\"\n source={props.input.name}\n row={true}\n choices={assessmentChoice}\n validate={[required(), maxLength(255)]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={3} style={{ width: \"100%\" }}>\n <Field fullWidth name={`businessReadlinesListByuser[${index}].commentary`} component=\"input\">\n {(props) => (\n <TextInput\n fullWidth\n name={props.input.name}\n initialValue={buredline.commentary}\n value={props.input.value}\n onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"Commentary (max 255 characters)\"\n validate={[maxLength(255)]}\n multiline\n // style={{ width: '280px' }}\n placeholder=''\n />\n )}\n </Field>\n </Grid>\n </Grid>\n {\n isSmall && <Box sx={{ marginBottom: \"12px\" }} >\n <Divider />\n </Box>\n }\n\n </Box>\n ))}\n <Box style={{ display: 'flex', justifyContent: 'center', }}>\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={handleAddDimension}\n color=\"primary\"\n variant=\"text\"\n >\n Add Dimension\n </Button>\n </Box>\n </Box>\n <Box style={{ margin: '10px 0' }}>\n <Divider />\n </Box>\n <Box style={{ backgroundColor: \"#E3E5EE\", minHeight: \"70px\", padding: \"20px 10px 0px\", borderRadius: '10px', marginTop: '20px', border: \"1px solid lightgrey\", width: \"100%\" }}>\n <Grid container direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\" spacing={isSmall ? 0 : 6}>\n <Grid item xs={12} lg={6} style={{ marginTop: '-15px' }}>\n <Typography variant='h6'>Is the business ready for the change?</Typography>\n </Grid>\n\n <Grid item xs={12} lg={3} style={{ padding: isSmall ? undefined : \"6px\", marginTop: '5px' }}>\n <RadioButtonGroupInput\n variant=\"outlined\"\n label=\"\"\n source={`readinessOverall[0].assessment`}\n row={true}\n choices={assessmentChoice}\n validate={[required(), maxLength(255)]}\n // style={{backgroundColor: \"#fff\", height: '44px', padding: '0 10px'}}\n />\n </Grid>\n <Grid item xs={12} lg={3} style={{ padding: isSmall ? undefined : \"6px 24px 0px 0px\" }}>\n <TextInput\n variant=\"outlined\"\n source={`readinessOverall[0].commentary`}\n label=\"Commentary (max 255 characters)\"\n className={classes.inputMargin}\n fullWidth\n multiline\n validate={[maxLength(255)]}\n InputProps={{\n style: {\n minHeight: \"41px\"\n }\n }}\n />\n </Grid>\n </Grid>\n </Box>\n </div >\n\n )\n\n return null;\n}\n","export default __webpack_public_path__ + \"static/media/cat_logo.688673d0.png\";","export default __webpack_public_path__ + \"static/media/loginImage.9ef6385b.png\";","import { Box, Button, Grid } from \"@material-ui/core\";\nimport { MuiThemeProvider, makeStyles } from \"@material-ui/core/styles\";\nimport { useMediaQuery } from \"@mui/material\";\nimport { Notification, TextInput, required, useDataProvider, useNotify } from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { Link, useHistory } from 'react-router-dom';\nimport cat_logo from \"../../assets/images/cat_logo.png\";\nimport backgroundLogo from '../../assets/images/loginImage.png';\nimport theme from '../../framework/theme';\nimport { onFailureMessage } from \"../../utils/AppUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n formLayout: {\n display: \"flex\",\n justifyContent: \"center\",\n },\n fieldOptions: {\n width: 440,\n marginBottom: 36,\n borderColor: \"#E1E1E1 !important\",\n borderRadius: 8,\n \"&::placeholder\": {\n color: \"#FFF\",\n },\n },\n fieldTags: {\n color: \"#B5B5B5\",\n fontSize: 16,\n fontFamily: \"Roboto\",\n fontWeight: \"normal\",\n margin: 0,\n marginBottom: 5,\n },\n}));\n\nexport const ForgotPassword = () => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const history = useHistory();\n\n const onSubmit = (values, form) => {\n dataProvider\n .postRequest(\"SetNewPassword\", {\n queryType: \"setNewPassword\",\n data: { ...values },\n }).then(({ data }) => {\n form.restart();\n notify(\"Your password has been reset successfully. Please check your e-mail\",\"success\");\n history.push(\"/login\");\n })\n .catch(error => {\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n }\n\n const matches = useMediaQuery(theme.breakpoints.down('md'));\n\n return (\n <MuiThemeProvider theme={theme}>\n <Box backgroundColor=\"#ffffff\">\n\n <Grid container alignItems=\"center\" justifyContent=\"center\">\n <Grid item md={6} >\n <Form\n style={{ width: matches ? \"20rem\" : \"25rem\" }}\n onSubmit={onSubmit}\n render={({ handleSubmit }) => {\n return (\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\" p={2} pt={10}>\n <Box width={250} textAlign=\"center\">\n <img src={cat_logo} width=\"200px\" alt='Change Assessment tool logo' />\n </Box>\n <Box flex={1} justifyContent=\"center\" pt={10}>\n <Box>\n <h5 className={classes.fieldTags}>Username</h5>\n <TextInput\n style={{ width: matches ? \"20rem\" : \"25rem\"}}\n variant=\"outlined\"\n placeholder=\"Username\"\n label=\"\"\n source=\"email\"\n type=\"email\"\n validate={[required()]}\n InputLabelProps={{\n style: {\n color: \"#E1E1E1\",\n fontFamily: \"Roboto\",\n fontWeight: \"normal\",\n },\n }}\n fullWidth />\n </Box>\n <Box display=\"flex\" justifyContent=\"center\">\n <Button\n style={{ width: matches ? \"20rem\" : \"25rem\" }}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSubmit}\n fullWidth>\n Reset Password\n </Button>\n </Box>\n <Box mt={2} textAlign=\"right\">\n <Link style={{ color: '#00a0d9', textDecorationColor: '#00a0d9' }}\n to={{\n pathname: '/login',\n }}\n >\n <small>Login?</small>\n </Link>\n </Box>\n </Box>\n </Box>\n )\n }}\n />\n </Grid>\n <Grid item md={6} >\n <Box height=\"100vh\" display=\"flex\" flexDirection=\"column\" sx={{ backgroundColor: '#00a0d9', textAlign: \"center\", display: \"flex\", flexDirection: \"column\", justifyContent: \"center\", alignItems: \"center\" }}>\n <img src={backgroundLogo} alt='Forget Password background logo' style={{ width: \"100%\" }} border=\"0\" />\n </Box>\n </Grid>\n </Grid>\n <Notification />\n </Box>\n </MuiThemeProvider>\n )\n}\n\nexport default ForgotPassword;","import Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport arrayMutators from \"final-form-arrays\";\nimport * as React from \"react\";\nimport {\n Error,\n Loading,\n TextInput,\n required,\n useDataProvider,\n AutocompleteInput,\n ReferenceInput,\n} from \"react-admin\";\nimport { Field, Form } from \"react-final-form\";\nimport { FieldArray } from \"react-final-form-arrays\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { Autocomplete, TextField } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n width: \"100%\",\n [theme.breakpoints.down(\"md\")]: {\n display: \"block\",\n },\n // maxWidth: 360,\n // backgroundColor: 'pink',\n },\n dataList: {\n borderRadius: 12,\n backgroundColor: theme.palette.background.paper,\n marginRight: 20,\n width: 350,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n MainDataList: {\n width: \"350px\" /* Updated width based on the provided styles */,\n height: \"100vh\",\n backgroundClor:\n theme.palette.background.paper /* Updated background color */,\n borderRadius: 12 /* Added border-radius */,\n marginRight: 20,\n position: \"sticky\",\n overflowY: \"hidden\",\n /* Added responsive styling for small screens */\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginRight: 0,\n },\n \"&:hover\": {\n overflowY: \"auto\",\n },\n },\n dataValueList: {\n width: 883,\n marginLeft: 20,\n borderRadius: 12,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginLeft: 0,\n marginTop: 15,\n },\n },\n dataValueName: {\n width: 350,\n paddingTop: 9,\n paddingBottom: 9,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueNameSingle: {\n width: 350,\n minHeight: 37,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueDescription: {\n width: \"100%\",\n marginTop: 16,\n marginLeft: 16,\n },\n toolbar: {\n display: \"flex\",\n width: 350,\n justifyContent: \"space-between\",\n },\n navPadding: {\n padding: 0,\n },\n listSelected: {\n backgroundColor: \"#405189 !important\",\n color: \"#fff\",\n },\n listText: {\n fontWeight: 500,\n color: \"#333333\",\n },\n listTextSelected: {\n fontWeight: 500,\n color: \"#fff\",\n },\n secondboxTitle: {\n paddingLeft: 24,\n paddingTop: 14,\n },\n containerBox: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr\",\n gridGap: \"20px\",\n paddingLeft: 40,\n paddingRight: 72,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n containerBoxTwo: {\n display: \"flex\",\n paddingLeft: 40,\n paddingRight: 33,\n gap: 16,\n [theme.breakpoints.down(\"md\")]: {\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n deleteButton: {\n marginTop: -16,\n marginLeft: 20,\n padding: 0,\n backgroundColor: \"transparent !important\",\n },\n addfieldButton: {\n backgroundColor: \"transparent !important\",\n paddingLeft: 40,\n marginBottom: 36,\n },\n buttonFieldsContainer: {\n paddingLeft: 40,\n marginBottom: 35,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexGrow: 1,\n paddingRight: 40,\n },\n },\n cancelButton: {\n marginLeft: 25,\n },\n}));\n\nconst ChangeAssessmentMasterDataList = (props) => {\n const { type,handleSnackbarOpen } = props;\n const classes = useStyles();\n\n const [data, setData] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState();\n\n const [valueCardData, setValueCardData] = React.useState();\n const [valueCardLoading, setValueCardLoading] = React.useState(false);\n const [valueCardError, setValueCardError] = React.useState();\n\n const dataProvider = useDataProvider();\n \n const [selectedIndex, setSelectedIndex] = React.useState();\n const [selectedImpact, setSelectedImpact] = React.useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const onSubmit = (values, form) => {\n dataProvider\n .postRequest(\"ChangeAssessmentMaster\", {\n queryType: \"update\",\n data: {\n id: values.id,\n description: values.description,\n impactLevels: values.impactLevels.map((level) => {\n return {\n id: level.id,\n description: level.description,\n };\n }),\n },\n })\n .then((response) => {\n const updatedData = [...data];\n updatedData[selectedIndex] = values;\n setData(updatedData);\n setValueCardData(values);\n handleSnackbarOpen(\"Master Data updated successfully\", \"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = (values) => {\n const errors = {};\n return errors;\n };\n\n React.useEffect(() => {\n setLoading(true);\n dataProvider\n .postRequest(\"ChangeAssessmentMaster\", {\n queryType: \"retrieve\",\n data: {\n type: [...type],\n },\n })\n .then((response) => {\n setData(response.data);\n setValueCardData(response.data[0]);\n setSelectedIndex(0);\n setSelectedImpact(response.data[0]);\n setLoading(false);\n })\n .catch((error) => {\n handleSnackbarOpen(`Master data are unavailable: ${error.message}`, \"warning\");\n setError(error.message);\n setLoading(false);\n });\n }, []);\n\n const handleListItemClick = (event, index, assessmentType) => {\n setSelectedIndex(index);\n setValueCardData(assessmentType);\n setSelectedImpact(assessmentType);\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n if (!data || data.length === 0) {\n return (\n <div className={classes.root}>\n <Card className={classes.dataList} style={{ padding: 32 }}>\n No Data Available\n </Card>\n </div>\n );\n }\n\n return (\n <div className={classes.root}>\n {isSmall ? (\n <Autocomplete\n disablePortal\n id=\"combo-box-demo\"\n getOptionLabel={(option) => `${option.type} - ${option.name}`}\n options={data}\n value={selectedImpact}\n sx={{ width: '100%' }}\n onChange={(event, newValue) =>\n handleListItemClick(event, data.indexOf(newValue), newValue)\n }\n renderInput={(params) => <TextField {...params} label=\"Impact\" />}\n />\n ) : (\n <Card className={classes.MainDataList}>\n <List\n className={classes.navPadding}\n component=\"nav\"\n aria-label=\"main mailbox folders\"\n >\n {data.map((assessmentType, index) => (\n <ListItem\n key={index}\n button\n selected={selectedIndex === index}\n classes={{ selected: classes.listSelected }}\n onClick={(event) =>\n handleListItemClick(event, index, assessmentType)\n }\n >\n <ListItemText\n primary={`${assessmentType.type} - ${assessmentType.name}`}\n className={\n selectedIndex === index\n ? classes.listTextSelected\n : classes.listText\n }\n />\n </ListItem>\n ))}\n </List>\n </Card>\n )}\n\n {Boolean(\n selectedIndex !== null && selectedIndex !== undefined && valueCardData\n ) && (\n <Form\n onSubmit={onSubmit}\n mutators={{\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={valueCardData}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values,\n }) => (\n <Card className={classes.dataValueList}>\n <CardHeader\n title={\n valueCardData\n ? `${valueCardData.type} - ${valueCardData.name}`\n : null\n }\n classes={{\n title: classes.secondboxTitle,\n }}\n />\n {valueCardData && (\n <Box className={classes.containerBox}>\n <TextInput\n multiline\n validate={[required()]}\n variant=\"outlined\"\n source=\"description\"\n label={`${valueCardData.name} (description)`}\n initialValue={valueCardData.description}\n style={{ margin: 0 }}\n InputProps={{\n classes: {\n input: classes.dataValueName,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n <Box pl={9}></Box>\n </Box>\n )}\n <Divider style={{ backgroundColor: \"#C4C4C4\" }} />\n <form onSubmit={handleSubmit}>\n {valueCardData && valueCardData.impactLevels ? (\n <MasterDataValuesInputs\n loading={valueCardLoading}\n error={valueCardError}\n masterData={data[selectedIndex]}\n data={valueCardData.impactLevels}\n push={push}\n pristine={pristine}\n submitting={submitting}\n form={form}\n />\n ) : null}\n </form>\n </Card>\n )}\n />\n )}\n </div>\n );\n};\n\nconst MasterDataValuesInputs = ({\n loading,\n error,\n data,\n push,\n submitting,\n pristine,\n form,\n}) => {\n const classes = useStyles();\n const [assessmentValues, setAssessmentValues] = React.useState();\n\n React.useEffect(() => {\n setAssessmentValues(data);\n }, [data]);\n\n if (loading) <Loading />;\n\n if (error) <Error title={error} />;\n\n if (assessmentValues)\n return (\n <Box paddingTop=\"30px\">\n <FieldArray name=\"impactLevels\">\n {({ fields }) =>\n fields.map((level, index) => {\n return (\n <Box className={classes.containerBoxTwo} key={level}>\n <Field fullWidth name={`${level}.description`}>\n {(props) => (\n <TextInput\n multiline\n validate={[required()]}\n variant=\"outlined\"\n name={props.input.name}\n value={props.input.value}\n label={`Level: ${assessmentValues[index].name} (description)`}\n style={{ marginRight: { md: 0, lg: 10 } }}\n InputProps={{\n classes: {\n input: classes.dataValueNameSingle,\n notchedOutline: classes.inputBorder,\n },\n }}\n onChange={props.input.onChange}\n />\n )}\n </Field>\n </Box>\n );\n })\n }\n </FieldArray>\n <Grid item xs={12}>\n <div className={classes.buttonFieldsContainer}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled={submitting || pristine}\n >\n Save\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={form.reset}\n className={classes.cancelButton}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Box>\n );\n\n return <div>No data</div>;\n};\n\nexport default ChangeAssessmentMasterDataList;\n","import { Card } from \"@material-ui/core\";\nimport Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport Tooltip from '@mui/material/Tooltip';\nimport arrayMutators from \"final-form-arrays\";\nimport _ from \"lodash\";\nimport * as React from \"react\";\nimport {\n Error,\n Loading,\n TextInput,\n required,\n useDataProvider,\n} from \"react-admin\";\nimport { Field, Form } from \"react-final-form\";\nimport { FieldArray } from \"react-final-form-arrays\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n width: \"100%\",\n [theme.breakpoints.down(\"md\")]: {\n display: \"block\"\n }\n },\n dataList: {\n width: 350,\n borderRadius: 12,\n backgroundColor: theme.palette.background.paper,\n marginRight: 20,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueList: {\n width: 832,\n marginLeft: 20,\n borderRadius: 12,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginLeft: 0,\n marginTop: 15,\n }\n },\n dataValueName: {\n width: 350,\n marginTop: 16,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n }\n },\n dataValueNameSingle: {\n width: 350,\n minHeight: 37,\n },\n dataValueDescription: {\n width: 350,\n paddingTop: 9,\n paddingBottom: 9,\n },\n toolbar: {\n display: \"flex\",\n width: 350,\n justifyContent: \"space-between\",\n },\n navPadding: {\n padding: 0,\n },\n listSelected: {\n backgroundColor: \"#405189 !important\",\n },\n listText: {\n fontWeight: 500,\n color: \"#333333\",\n },\n listTextSelected: {\n fontWeight: 500,\n color: \"#fff\",\n },\n secondboxTitle: {\n paddingLeft: 24,\n paddingTop: 14,\n },\n containerBox: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr\",\n gridGap: \"20px\",\n paddingLeft: 40,\n paddingRight: 72,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n }\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n containerBoxTwo: {\n display: \"flex\",\n paddingLeft: 40,\n paddingRight: 33,\n gap: 16,\n [theme.breakpoints.down(\"md\")]: {\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n }\n },\n deleteButton: {\n marginTop: -16,\n marginLeft: 20,\n padding: 0,\n backgroundColor: \"transparent !important\",\n },\n addfieldButton: {\n backgroundColor: \"transparent !important\",\n paddingLeft: 40,\n marginBottom: 36,\n },\n buttonFieldsContainer: {\n paddingLeft: 40,\n marginBottom: 35,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexGrow: 1,\n paddingRight: 40\n }\n },\n cancelButton: {\n marginLeft: 25,\n },\n}));\n\nconst FaqList = (props) => {\n const classes = useStyles();\n const {handleSnackbarOpen} = props\n const [data, setData] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState();\n const [list, setList] = React.useState([1]);\n\n const [valueCardData, setValueCardData] = React.useState();\n const [valueCardLoading, setValueCardLoading] = React.useState(false);\n const [valueCardError, setValueCardError] = React.useState();\n\n const dataProvider = useDataProvider();\n const [selectedIndex, setSelectedIndex] = React.useState();\n\n const onSubmit = (values, form) => {\n dataProvider\n .postRequest(\"Faq\", {\n queryType: \"update\",\n data: {\n faqs: _.map(values.faqs, (faq) => ({\n question: faq.question,\n answer: faq.answer,\n })),\n },\n })\n .then((response) => {\n handleSnackbarOpen(\"FAQs modified successfully\",\"success\");\n })\n .catch((error) => {\n setError(\"Error in modifying FAqs\");\n });\n };\n\n const validate = (values) => {\n const errors = {};\n return errors;\n };\n\n React.useEffect(async () => {\n setLoading(true);\n await dataProvider\n .getList(\"Faq\", {\n pagination: { page: 1, perPage: 100 },\n sort: { field: \"id\", order: \"ASC\" },\n filter: {},\n })\n .then((response) => {\n setData(response.data);\n\n // select first list item by default\n if (response.data && response.data.length > 0) {\n const default_index = 0;\n setSelectedIndex(default_index);\n let faqData = {};\n faqData.faqs = response.data;\n setValueCardData(faqData);\n setValueCardLoading(false);\n }\n setLoading(false);\n })\n .catch((error) => {\n handleSnackbarOpen(`Faq data is unavailable: ${error.message}`, \"warning\");\n setError(error.message);\n setLoading(false);\n setValueCardError(error.message);\n setValueCardLoading(false);\n });\n }, []);\n\n const handleListItemClick = (event, index) => {\n setSelectedIndex(index);\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n return (\n <div className={classes.root}>\n <Card className={classes.dataList}>\n <List\n className={classes.navPadding}\n component=\"nav\"\n aria-label=\"main mailbox folders\"\n >\n {list.map((item, index) => (\n <ListItem\n key={index}\n button\n selected={selectedIndex === index}\n classes={{ selected: classes.listSelected }}\n onClick={(event) => handleListItemClick(event, index)}\n >\n <ListItemText primary={`FAQs`} className={\n selectedIndex === index\n ? classes.listTextSelected\n : classes.listText\n } />\n </ListItem>\n ))}\n </List>\n </Card>\n <Form\n onSubmit={onSubmit}\n mutators={{\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={valueCardData}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values,\n }) => (\n <Card className={classes.dataValueList}>\n <CardHeader\n title=\"FAQs\"\n classes={{\n title: classes.secondboxTitle,\n }}\n />\n\n <Divider style={{ backgroundColor: \"#C4C4C4\" }} />\n\n <form onSubmit={handleSubmit}>\n <FaqInputs\n loading={valueCardLoading}\n error={valueCardError}\n data={valueCardData}\n push={push}\n pristine={pristine}\n submitting={submitting}\n form={form}\n />\n </form>\n </Card>\n )}\n />\n </div>\n );\n};\n\nconst FaqInputs = ({\n loading,\n error,\n data,\n push,\n submitting,\n pristine,\n form,\n}) => {\n const classes = useStyles();\n const [faqs, setFaqs] = React.useState();\n\n const uniqueName = (value, values, index) => {\n if (!value) return;\n\n for (let i = 0; i < values.faqs.length; i++) {\n for (let j = 0; j < values.faqs.length; j++) {\n if (values.faqs[i] === undefined || values.faqs[j] === undefined) {\n continue;\n }\n if (\n i !== j &&\n j === index &&\n values.faqs[i].question === values.faqs[j].question\n ) {\n return `found duplicate question \"${values.faqs[i].question}\"`;\n }\n }\n }\n };\n\n React.useEffect(() => {\n setFaqs(data);\n }, [data]);\n\n if (loading) <Loading />;\n\n if (error) <Error title={error} />;\n\n return (\n <Box paddingTop=\"30px\">\n <FieldArray name=\"faqs\">\n {({ fields }) =>\n fields.map((name, index) => {\n return (\n <Box className={classes.containerBoxTwo} key={name}>\n <Field fullWidth name={`${name}.question`}>\n {(props) => (\n <TextInput\n validate={[\n required(),\n (value, values) => uniqueName(value, values, index),\n ]}\n label={`Question`}\n variant=\"outlined\"\n name={props.input.name}\n value={props.input.value}\n style={{ marginRight: { md: 0, lg: 10 } }}\n InputProps={{\n classes: {\n input: classes.dataValueNameSingle,\n notchedOutline: classes.inputBorder,\n },\n }}\n onChange={props.input.onChange}\n />\n )}\n </Field>\n <Field fullWidth name={`${name}.answer`}>\n {(props) => (\n <TextInput\n multiline\n label={`Answer`}\n validate={[required()]}\n variant=\"outlined\"\n name={props.input.name}\n value={props.input.value}\n style={{ marginRight: { md: 0, lg: 10 } }}\n InputProps={{\n classes: {\n input: classes.dataValueName,\n notchedOutline: classes.inputBorder,\n },\n }}\n onChange={props.input.onChange}\n />\n )}\n </Field>\n <Box display=\"flex\">\n <IconButton\n color=\"inherit\"\n aria-label=\"remove value\"\n className={classes.deleteButton}\n onClick={() => {\n const proceed = window.confirm('You are deleting the entry. Are you sure?');\n if (proceed) {\n fields.remove(index)\n }\n }\n }\n >\n <Tooltip title=\"Delete FAQ\">\n <DeleteIcon style={{ fill: \"rgba(0,0,0,0.54\" }} />\n </Tooltip>\n </IconButton>\n </Box>\n </Box>\n );\n })\n }\n </FieldArray>\n <IconButton\n color=\"inherit\"\n aria-label=\"add value\"\n onClick={() => push(\"faqs\", undefined)}\n className={classes.addfieldButton}\n >\n <AddCircleOutlineIcon />\n <span style={{ fontSize: 16, marginLeft: 10 }}>Add Question</span>\n </IconButton>\n <Grid item xs={12}>\n <div className={classes.buttonFieldsContainer}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled={submitting || pristine}\n >\n Save\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={form.reset}\n className={classes.cancelButton}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Box>\n )\n};\n\nexport default FaqList;\n","import Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport arrayMutators from \"final-form-arrays\";\nimport _ from \"lodash\";\nimport * as React from \"react\";\nimport {\n Error,\n Loading,\n TextInput,\n required,\n useDataProvider,\n} from \"react-admin\";\nimport { Field, Form } from \"react-final-form\";\nimport { FieldArray } from \"react-final-form-arrays\";\n\nimport {\n FormControlLabel,\n Paper,\n Switch,\n Tooltip,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { hasDuplicates, onFailureMessage } from \"../../utils/AppUtils\";\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n width: \"100%\",\n [theme.breakpoints.down(\"md\")]: {\n display: \"block\",\n },\n // maxWidth: 360,\n // backgroundColor: 'pink',\n },\n dataList: {\n width: 350,\n borderRadius: 12,\n backgroundColor: theme.palette.background.paper,\n marginRight: 20,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueList: {\n width: 832,\n marginLeft: 20,\n borderRadius: 12,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginLeft: 0,\n marginTop: 15,\n },\n },\n dataValueName: {\n width: 350,\n marginTop: 16,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueNameSingle: {\n width: 350,\n minHeight: 37,\n },\n dataValueDescription: {\n width: 350,\n paddingTop: 9,\n paddingBottom: 9,\n },\n toolbar: {\n display: \"flex\",\n width: 350,\n justifyContent: \"space-between\",\n },\n navPadding: {\n padding: 0,\n },\n listSelected: {\n backgroundColor: \"#405189 !important\",\n },\n listText: {\n fontWeight: 500,\n color: \"#333333\",\n },\n listTextSelected: {\n fontWeight: 500,\n color: \"#fff\",\n },\n secondboxTitle: {\n paddingLeft: 24,\n paddingTop: 14,\n },\n containerBox: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr\",\n gridGap: \"20px\",\n paddingLeft: 40,\n paddingRight: 72,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n containerBoxTwo: {\n display: \"flex\",\n paddingLeft: 40,\n paddingRight: 33,\n },\n deleteButton: {\n marginTop: -16,\n marginLeft: 20,\n padding: 0,\n backgroundColor: \"transparent !important\",\n },\n addfieldButton: {\n backgroundColor: \"transparent !important\",\n paddingLeft: 40,\n marginBottom: 36,\n },\n buttonFieldsContainer: {\n paddingLeft: 40,\n marginBottom: 35,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexGrow: 1,\n paddingRight: 40,\n },\n },\n cancelButton: {\n marginLeft: 25,\n },\n autoCompleteBox: {\n margin: \"10px 20px\",\n },\n autocompleteInput: {\n backgroundColor: \"#fff\",\n // padding: '10px 15px',\n border: \"1px solid gray\",\n margin: \"0 20px\",\n },\n autocomplete: {\n margin: \"0 20px\",\n // width: '200px', // Set your desired width\n },\n input: {\n // border: '1px solid #ccc', // Set your desired border style\n borderRadius: \"12px\",\n borderColor: \"#BDBDBD\",\n // padding: '8px',\n // width: \"790px\",\n minHeight: 37,\n },\n}));\n\nconst ProjectMasterDataList = (props) => {\n const {handleSnackbarOpen} = props;\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [data, setData] = React.useState();\n const [users, setUsers] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const [selectedImpact, setSelectedImpact] = React.useState(1);\n const [error, setError] = React.useState();\n const [selectedOption, setSelectedOption] = React.useState(null);\n const [valueCardData, setValueCardData] = React.useState();\n const [valueCardLoading, setValueCardLoading] = React.useState(false);\n const [valueCardError, setValueCardError] = React.useState();\n\n const dataProvider = useDataProvider();\n const [selectedIndex, setSelectedIndex] = React.useState();\n const [projectDrivers, setProjectDrivers] = React.useState();\n const [driversId, setDriverId] = React.useState(0);\n const [isDrivers, setIsDriversId] = React.useState(false);\n const handleAutocompleteChange = (event, newValue) => {\n const variables = {\n id: driversId,\n data: {\n clientId: newValue?.id || null,\n },\n };\n dataProvider\n .getOne(\"MasterDataDriver\", variables)\n .then((response) => {\n // setProjectDrivers()\n setIsDriversId(false);\n // console.log(response.data)\n setValueCardData(response.data);\n })\n .catch((error) => {\n handleSnackbarOpen(\n `master data values are unavailable: ${error.message}`,\n \"warning\"\n );\n setValueCardError(error.message);\n setValueCardLoading(false);\n });\n setSelectedOption(newValue);\n };\n const onSubmit = (values, form) => {\n const masterData = data[selectedIndex];\n // console.log(selectedOption)\n let apiNames = \"MasterData\";\n let formValues = {\n id: masterData.id,\n name: masterData.name,\n type: masterData.type,\n category: masterData.category,\n\n nameDescription: values.nameDescription,\n categoryDescription: values.categoryDescription,\n masterDataValues: _.map(values.masterDataValues, (masterDataValue) => ({\n name: masterDataValue.name,\n description: masterDataValue.name,\n isDisabled:\n valueCardData.category === \"Phase\"\n ? null\n : masterDataValue.isDisabled === true\n ? true\n : false,\n })),\n };\n if (valueCardData.category === \"Drivers\") {\n apiNames = \"MasterDataDriver\";\n formValues[\"clientId\"] = selectedOption.id;\n }\n dataProvider\n .update(apiNames, {\n id: masterData.id,\n data: formValues,\n })\n .then((response) => {\n form.initialize(response.data);\n handleSnackbarOpen(\"Master Data updated successfully\", \"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = (values) => {\n const errors = {};\n\n // if(values.masterDataValues){\n // let uni\n // values.masterDataValues.map((masterDataValue, index)=>{\n // return\n // })\n // }\n\n return errors;\n };\n\n const getMasterData = (master_data_id) => {\n return dataProvider\n .getOne(\"MasterData\", { id: master_data_id })\n .then((response) => {\n setValueCardData(response.data);\n setSelectedImpact(response.data);\n // console.log(response.data);\n setValueCardLoading(false);\n })\n .catch((error) => {\n handleSnackbarOpen(\n `Master data values are unavailable: ${error.message}`,\n \"warning\"\n );\n setValueCardError(error.message);\n setValueCardLoading(false);\n });\n };\n\n React.useEffect(() => {\n setLoading(true);\n dataProvider\n .getList(\"MasterData\", {\n pagination: { page: 1, perPage: 100 },\n sort: { field: \"name\", order: \"ASC\" },\n filter: { type: \"Project\" },\n })\n .then((response) => {\n setData(response.data);\n // console.log(\"datataasfsdfsadfstatatatatat\", response.data)\n // select first list item by default\n if (response.data && response.data.length > 0) {\n const default_index = 0;\n setSelectedIndex(default_index);\n getMasterData(response.data[default_index].id);\n }\n\n setLoading(false);\n })\n .catch((error) => {\n handleSnackbarOpen(`Master data are unavailable: ${error.message}`, \"warning\");\n setError(error.message);\n setLoading(false);\n });\n }, []);\n\n React.useEffect(() => {\n // setLoading(true);\n dataProvider\n .getList(\"User\", {\n pagination: { page: 1, perPage: 100 },\n sort: { field: \"fullName\", order: \"ASC\" },\n filter: {},\n })\n .then((response) => {\n // console.log(response.data)\n setUsers(response.data);\n })\n .catch((error) => {\n console.log(error.message);\n setLoading(false);\n });\n }, []);\n const handleListItemClick = (event, newValue, index, master_data_id) => {\n setSelectedIndex(index);\n getMasterData(master_data_id);\n setDriverId(master_data_id);\n setSelectedImpact(newValue);\n if (master_data_id === 1) {\n setIsDriversId(true);\n } else {\n setIsDriversId(false);\n }\n\n // console.log(master_data_id)\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n if (!data || data.length === 0) {\n return (\n <div className={classes.root}>\n <Card className={classes.dataList} style={{ padding: 32 }}>\n No Data Available\n </Card>\n </div>\n );\n }\n\n return (\n <div className={classes.root}>\n {isSmall ? (\n <Autocomplete\n disablePortal\n id=\"combo-box-demo\"\n getOptionLabel={(option) => `${option?.name + ' - ' + option?.category}`}\n options={data}\n value={selectedImpact}\n sx={{ width: \"100%\" }}\n onChange={(event, newValue) =>\n handleListItemClick(\n event,\n newValue,\n data.indexOf(newValue),\n newValue.id\n )\n }\n renderInput={(params) => (\n <TextField {...params} label=\"Driver and Phase\" />\n )}\n />\n ) : (\n <Card className={classes.dataList}>\n <List\n className={classes.navPadding}\n component=\"nav\"\n aria-label=\"main mailbox folders\"\n >\n {data.map((masterData, index) => (\n <ListItem\n key={index}\n button\n selected={selectedIndex === index}\n classes={{ selected: classes.listSelected }}\n onClick={(event) =>\n handleListItemClick(event, event, index, masterData.id)\n }\n >\n <ListItemText\n primary={`${masterData.name} - ${masterData.category}`}\n className={\n selectedIndex === index\n ? classes.listTextSelected\n : classes.listText\n }\n />\n </ListItem>\n ))}\n </List>\n </Card>\n )}\n\n {Boolean(\n selectedIndex !== null && selectedIndex !== undefined && valueCardData\n ) && (\n <Form\n onSubmit={onSubmit}\n mutators={{\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={valueCardData}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values,\n }) => (\n <Card className={classes.dataValueList}>\n <CardHeader\n title={\n valueCardData\n ? `${valueCardData.name} - ${valueCardData.category}`\n : null\n }\n classes={{\n title: classes.secondboxTitle,\n }}\n />\n\n <Divider style={{ backgroundColor: \"#C4C4C4\" }} />\n <form onSubmit={handleSubmit}>\n {valueCardData.category === \"Drivers\" && (\n <Box className={classes.autoCompleteBox}>\n <Autocomplete\n options={users}\n getOptionLabel={(option) =>\n `${option.companyName} - ${option.email} - ${option.location}`\n }\n className={classes.autocomplete}\n value={selectedOption}\n onChange={handleAutocompleteChange}\n source=\"client\"\n id=\"combo-box-demo\"\n // freeSolo\n renderInput={(params) => (\n <TextField\n {...params}\n placeholder=\"Start typing to search user\"\n className={classes.input}\n variant=\"outlined\"\n label=\"Client\"\n required={required}\n // error={!selectedOption}\n // InputProps={{\n // ...params.InputProps,\n // style: {\n // borderColor: !selectedOption ? 'red' : params.InputProps.style.borderColor,\n // },\n // }}\n />\n )}\n PaperComponent={({ children }) => (\n <Paper\n style={{ width: \"100%\", background: \"#f2f5f3\" }}\n >\n {children}\n </Paper>\n )}\n />\n {isDrivers && (\n <Typography variant=\"h6\" style={{ margin: \"10px 20px\" }}>\n Please select the client\n </Typography>\n )}\n </Box>\n )}\n {!isDrivers &&\n valueCardData &&\n valueCardData.masterDataValues ? (\n <MasterDataValuesInputs\n loading={valueCardLoading}\n error={valueCardError}\n masterData={data[selectedIndex]}\n data={valueCardData.masterDataValues}\n category={valueCardData.category}\n push={push}\n pristine={pristine}\n submitting={submitting}\n form={form}\n />\n ) : null}\n </form>\n </Card>\n )}\n />\n )}\n </div>\n );\n};\n\nconst MasterDataValuesInputs = ({\n loading,\n error,\n data,\n category,\n push,\n submitting,\n pristine,\n form,\n}) => {\n const classes = useStyles();\n const [masterDataValues, setMasterDataValues] = React.useState();\n const [isDiabled, setIsDisabled] = React.useState(false);\n\n const uniqueName = (value, values) => {\n if (!value) return;\n\n const names = values.masterDataValues\n ? values.masterDataValues.filter(\n (masterDataValue) => masterDataValue && masterDataValue.name === value\n )\n : null;\n if (hasDuplicates(names)) {\n return `found duplicate value \"${value}\"`;\n }\n };\n\n React.useEffect(() => {\n setMasterDataValues(data);\n }, [data]);\n const handleToggle = () => {\n setIsDisabled(!isDiabled);\n };\n // console.log(data)\n if (loading) <Loading />;\n\n if (error) <Error title={error} />;\n\n if (masterDataValues)\n return (\n <Box paddingTop=\"30px\">\n <FieldArray name=\"masterDataValues\">\n {({ fields }) =>\n fields.map((name, index) => {\n // console.log(fields)\n return (\n <Box className={classes.containerBoxTwo} key={name}>\n <Field fullWidth name={`${name}.name`}>\n {(props) => (\n <TextInput\n validate={[required(), uniqueName]}\n variant=\"outlined\"\n name={props.input.name}\n value={props.input.value}\n style={{ margin: 0, marginRight: 10 }}\n InputProps={{\n classes: {\n input: classes.dataValueNameSingle,\n notchedOutline: classes.inputBorder,\n },\n }}\n onChange={props.input.onChange}\n />\n )}\n </Field>\n <Box display=\"flex\">\n {/* {console.log(fields.value[index].isDisabled)} */}\n {\n category === \"Phase\" ? (\n <IconButton\n color=\"inherit\"\n aria-label=\"remove value\"\n className={classes.deleteButton}\n onClick={() => {\n const proceed = window.confirm(\n \"You are deleting the entry. Are you sure?\"\n );\n if (proceed) {\n fields.remove(index);\n }\n }}\n >\n <Tooltip title=\"Delete\">\n <DeleteIcon style={{ fill: \"rgba(0,0,0,0.54\" }} />\n </Tooltip>\n </IconButton>\n ) : (\n <FormControlLabel\n control={\n <Switch\n checked={\n fields.value[index]?.isDisabled === true\n ? false\n : true\n }\n onChange={() => {\n fields.update(index, {\n ...fields.value[index],\n isDisabled: !fields.value[index]?.isDisabled,\n });\n }}\n />\n }\n label={\n fields.value[index]?.isDisabled === true\n ? \"Disabled\"\n : \"Enabled\"\n }\n />\n )\n // <Switch\n // checked={isDiabled}\n // onChange={handleToggle}\n // color=\"primary\"\n // name=\"checkedB\"\n // inputProps={{ 'aria-label': 'primary checkbox' }}\n // />\n }\n </Box>\n </Box>\n );\n })\n }\n </FieldArray>\n <IconButton\n color=\"inherit\"\n aria-label=\"add value\"\n onClick={() => push(\"masterDataValues\", undefined)}\n className={classes.addfieldButton}\n >\n <AddCircleOutlineIcon />\n <span style={{ fontSize: 16, marginLeft: 10 }}>Add Field</span>\n </IconButton>\n <Grid item xs={12}>\n <div className={classes.buttonFieldsContainer}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled={submitting || pristine}\n >\n Save\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={form.reset}\n className={classes.cancelButton}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Box>\n );\n\n return <div>No data</div>;\n};\n\nexport default ProjectMasterDataList;\n","import Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport arrayMutators from \"final-form-arrays\";\nimport * as React from \"react\";\nimport {\n Error,\n Loading,\n TextInput,\n required,\n useDataProvider,\n \n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { Autocomplete, TextField } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n width: \"100%\",\n [theme.breakpoints.down(\"md\")]: {\n display: \"block\",\n },\n // maxWidth: 360,\n // backgroundColor: 'pink',\n },\n dataList: {\n borderRadius: 12,\n backgroundColor: theme.palette.background.paper,\n marginRight: 20,\n width: 350,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n MainDataList: {\n width: \"350px\" /* Updated width based on the provided styles */,\n height: \"100vh\",\n backgroundClor:\n theme.palette.background.paper /* Updated background color */,\n borderRadius: 12 /* Added border-radius */,\n marginRight: 20,\n position: \"sticky\",\n overflowY: \"hidden\",\n /* Added responsive styling for small screens */\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginRight: 0,\n },\n \"&:hover\": {\n overflowY: \"auto\",\n },\n },\n dataValueList: {\n width: 832,\n marginLeft: 20,\n borderRadius: 12,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginLeft: 0,\n marginTop: 15,\n },\n },\n dataValueName: {\n width: \"100%\",\n paddingTop: 9,\n paddingBottom: 9,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueNameSingle: {\n width: 350,\n minHeight: 37,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueDescription: {\n width: \"100%\",\n marginTop: 16,\n marginLeft: 16,\n },\n toolbar: {\n display: \"flex\",\n width: 350,\n justifyContent: \"space-between\",\n },\n navPadding: {\n padding: 0,\n },\n listSelected: {\n backgroundColor: \"#405189 !important\",\n },\n listText: {\n fontWeight: 500,\n color: \"#333333\",\n },\n listTextSelected: {\n fontWeight: 500,\n color: \"#fff\",\n },\n secondboxTitle: {\n paddingLeft: 24,\n paddingTop: 14,\n },\n containerBox: {\n display: \"grid\",\n gridTemplateColumns: \"1fr\",\n gridGap: \"20px\",\n paddingLeft: 40,\n paddingRight: 72,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n containerBoxTwo: {\n display: \"flex\",\n paddingLeft: 40,\n paddingRight: 33,\n gap: 16,\n [theme.breakpoints.down(\"md\")]: {\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n deleteButton: {\n marginTop: -16,\n marginLeft: 20,\n padding: 0,\n backgroundColor: \"transparent !important\",\n },\n addfieldButton: {\n backgroundColor: \"transparent !important\",\n paddingLeft: 40,\n marginBottom: 36,\n },\n buttonFieldsContainer: {\n paddingLeft: 40,\n marginBottom: 35,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexGrow: 1,\n paddingRight: 40,\n },\n },\n cancelButton: {\n marginLeft: 25,\n },\n}));\n\nconst ReadinessGovernancetMasterDataList = (props) => {\n const { type ,handleSnackbarOpen} = props;\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [data, setData] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState();\n const [selectedImpact, setSelectedImpact] = React.useState();\n const [valueCardData, setValueCardData] = React.useState();\n const [valueCardLoading, setValueCardLoading] = React.useState(false);\n const [valueCardError, setValueCardError] = React.useState();\n\n const dataProvider = useDataProvider();\n\n const [selectedIndex, setSelectedIndex] = React.useState();\n\n const onSubmit = (values, form) => {\n // console.log(values);\n dataProvider\n .postRequest(\"BusinessReadlinessMaster\", {\n queryType: \"update\",\n data: {\n id: values.id,\n name: values.name,\n },\n })\n .then((response) => {\n const updatedData = [...data];\n updatedData[selectedIndex] = values;\n setData(updatedData);\n setValueCardData(values);\n handleSnackbarOpen(\"Master Data updated successfully\", \"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = (values) => {\n const errors = {};\n return errors;\n };\n\n React.useEffect(() => {\n setLoading(true);\n dataProvider\n .postRequest(\"BusinessReadlinessMaster\", {\n queryType: \"list\",\n data: {\n type: type,\n },\n })\n .then((response) => {\n setData(response.data);\n setSelectedIndex(0);\n setValueCardData(response.data[0]);\n setSelectedImpact(response.data[0]);\n setLoading(false);\n })\n .catch((error) => {\n handleSnackbarOpen(`Master data are unavailable: ${error.message}`, \"warning\");\n setError(error.message);\n setLoading(false);\n });\n }, []);\n\n const handleListItemClick = (event, index, changeRG) => {\n // console.log(assessmentType);\n setSelectedIndex(index);\n setValueCardData(changeRG);\n setSelectedImpact(changeRG);\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n if (!data || data.length === 0) {\n return (\n <div className={classes.root}>\n <Card className={classes.dataList} style={{ padding: 32 }}>\n No Data Available\n </Card>\n </div>\n );\n }\n\n return (\n <div className={classes.root}>\n {isSmall ? (\n <Autocomplete\n disablePortal\n id=\"combo-box-demo\"\n getOptionLabel={(option) => `${option.name}`}\n options={data}\n value={selectedImpact}\n sx={{ width: \"100%\" }}\n onChange={(event, newValue) =>\n handleListItemClick(event, data.indexOf(newValue), newValue)\n }\n renderInput={(params) => <TextField {...params} label=\"Impact\" />}\n />\n ) : (\n <Card className={classes.MainDataList}>\n <List\n className={classes.navPadding}\n component=\"nav\"\n aria-label=\"main mailbox folders\"\n >\n {data.map((changeRG, index) => (\n <ListItem\n key={index}\n button\n selected={selectedIndex === index}\n classes={{ selected: classes.listSelected }}\n onClick={(event) => handleListItemClick(event, index, changeRG)}\n >\n <ListItemText\n primary={`${changeRG.name}`}\n className={\n selectedIndex === index\n ? classes.listTextSelected\n : classes.listText\n }\n />\n </ListItem>\n ))}\n </List>\n </Card>\n )}\n {Boolean(\n selectedIndex !== null && selectedIndex !== undefined && valueCardData\n ) && (\n <Form\n onSubmit={onSubmit}\n mutators={{\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={valueCardData}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values,\n }) => (\n <Card className={classes.dataValueList}>\n <CardHeader\n // title={\n // valueCardData\n // ? `${valueCardData.riskName}`\n // : null\n // }\n classes={{\n title: classes.secondboxTitle,\n }}\n />\n {/* <Divider style={{ backgroundColor: \"#C4C4C4\", marginBottom: 30 }} /> */}\n {valueCardData && (\n <Box className={classes.containerBox}>\n <TextInput\n multiline\n validate={[required()]}\n variant=\"outlined\"\n source=\"name\"\n label={``}\n initialValue={valueCardData.name}\n style={{ margin: 0 }}\n InputProps={{\n classes: {\n input: classes.dataValueName,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Box>\n )}\n\n <form onSubmit={handleSubmit}>\n <div className={classes.buttonFieldsContainer}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled={submitting || pristine}\n >\n Save\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={form.reset}\n className={classes.cancelButton}\n >\n Cancel\n </Button>\n </div>\n </form>\n </Card>\n )}\n />\n )}\n </div>\n );\n};\n\nexport default ReadinessGovernancetMasterDataList;\n","import Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport Divider from \"@material-ui/core/Divider\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport arrayMutators from \"final-form-arrays\";\nimport * as React from \"react\";\nimport {\n Error,\n Loading,\n TextInput,\n required,\n useDataProvider,\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { Autocomplete, TextField } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n width: \"100%\",\n [theme.breakpoints.down(\"md\")]: {\n display: \"block\",\n },\n // maxWidth: 360,\n // backgroundColor: 'pink',\n },\n dataList: {\n borderRadius: 12,\n backgroundColor: theme.palette.background.paper,\n marginRight: 20,\n width: 350,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n MainDataList: {\n width: \"350px\" /* Updated width based on the provided styles */,\n height: \"100vh\",\n backgroundClor:\n theme.palette.background.paper /* Updated background color */,\n borderRadius: 12 /* Added border-radius */,\n marginRight: 20,\n position: \"sticky\",\n overflowY: \"hidden\",\n /* Added responsive styling for small screens */\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginRight: 0,\n },\n \"&:hover\": {\n overflowY: \"auto\",\n },\n },\n dataValueList: {\n width: 832,\n marginLeft: 20,\n borderRadius: 12,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginLeft: 0,\n marginTop: 15,\n },\n },\n dataValueName: {\n width: \"100%\",\n paddingTop: 9,\n paddingBottom: 9,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueNameSingle: {\n width: 350,\n minHeight: 37,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueDescription: {\n width: \"100%\",\n marginTop: 16,\n marginLeft: 16,\n },\n toolbar: {\n display: \"flex\",\n width: 350,\n justifyContent: \"space-between\",\n },\n navPadding: {\n padding: 0,\n },\n listSelected: {\n backgroundColor: \"#405189 !important\",\n },\n listText: {\n fontWeight: 500,\n color: \"#333333\",\n },\n listTextSelected: {\n fontWeight: 500,\n color: \"#fff\",\n },\n secondboxTitle: {\n paddingLeft: 24,\n paddingTop: 14,\n },\n containerBox: {\n display: \"grid\",\n gridTemplateColumns: \"1fr\",\n gridGap: \"20px\",\n paddingLeft: 40,\n paddingRight: 72,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n containerBoxTwo: {\n display: \"flex\",\n paddingLeft: 40,\n paddingRight: 33,\n gap: 16,\n [theme.breakpoints.down(\"md\")]: {\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n deleteButton: {\n marginTop: -16,\n marginLeft: 20,\n padding: 0,\n backgroundColor: \"transparent !important\",\n },\n addfieldButton: {\n backgroundColor: \"transparent !important\",\n paddingLeft: 40,\n marginBottom: 36,\n },\n buttonFieldsContainer: {\n paddingLeft: 40,\n marginBottom: 35,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexGrow: 1,\n paddingRight: 40,\n },\n },\n cancelButton: {\n marginLeft: 25,\n },\n}));\n\nconst RiskAssessmentMasterDataList = (props) => {\n const { type ,handleSnackbarOpen} = props;\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [data, setData] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState();\n const [selectedImpact, setSelectedImpact] = React.useState();\n const [valueCardData, setValueCardData] = React.useState();\n const [valueCardLoading, setValueCardLoading] = React.useState(false);\n const [valueCardError, setValueCardError] = React.useState();\n\n const dataProvider = useDataProvider();\n \n const [selectedIndex, setSelectedIndex] = React.useState();\n\n const onSubmit = (values, form) => {\n // console.log(values);\n dataProvider\n .postRequest(\"RiskAssessmentMaster\", {\n queryType: \"update\",\n data: {\n id: values.id,\n riskInfo: values.riskInfo,\n riskDescription: values.riskDescription,\n impactDescription: values.impactDescription,\n },\n })\n .then((response) => {\n const updatedData = [...data];\n updatedData[selectedIndex] = values;\n setData(updatedData);\n setValueCardData(values);\n handleSnackbarOpen(\"Master Data updated successfully\", \"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = (values) => {\n const errors = {};\n return errors;\n };\n\n React.useEffect(() => {\n setLoading(true);\n dataProvider\n .postRequest(\"RiskAssessmentMaster\", {\n queryType: \"list\",\n })\n .then((response) => {\n setData(response.data);\n setSelectedIndex(0);\n setValueCardData(response.data[0]);\n setSelectedImpact(response.data[0]);\n setLoading(false);\n })\n .catch((error) => {\n handleSnackbarOpen(`Master data are unavailable: ${error.message}`, \"warning\");\n setError(error.message);\n setLoading(false);\n });\n }, []);\n\n const handleListItemClick = (event, index, assessmentType) => {\n console.log(assessmentType);\n setSelectedIndex(index);\n setValueCardData(assessmentType);\n setSelectedImpact(assessmentType);\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n if (!data || data.length === 0) {\n return (\n <div className={classes.root}>\n <Card className={classes.dataList} style={{ padding: 32 }}>\n No Data Available\n </Card>\n </div>\n );\n }\n\n return (\n <div className={classes.root}>\n {isSmall ? (\n <Autocomplete\n disablePortal\n id=\"combo-box-demo\"\n getOptionLabel={(option) => `${option.riskName}`}\n options={data}\n value={selectedImpact}\n sx={{ width: '100%' }}\n onChange={(event, newValue) =>\n handleListItemClick(event, data.indexOf(newValue), newValue)\n }\n renderInput={(params) => <TextField {...params} label=\"Impact\" />}\n />\n ) : (\n <Card className={classes.MainDataList}>\n <List\n className={classes.navPadding}\n component=\"nav\"\n aria-label=\"main mailbox folders\"\n >\n {data.map((riskAssessment, index) => (\n <ListItem\n key={index}\n button\n selected={selectedIndex === index}\n classes={{ selected: classes.listSelected }}\n onClick={(event) =>\n handleListItemClick(event, index, riskAssessment)\n }\n >\n <ListItemText\n primary={`${riskAssessment.riskName}`}\n className={\n selectedIndex === index\n ? classes.listTextSelected\n : classes.listText\n }\n />\n </ListItem>\n ))}\n </List>\n </Card>\n )}\n\n {Boolean(\n selectedIndex !== null && selectedIndex !== undefined && valueCardData\n ) && (\n <Form\n onSubmit={onSubmit}\n mutators={{\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={valueCardData}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values,\n }) => (\n <Card className={classes.dataValueList}>\n <CardHeader\n title={valueCardData ? `${valueCardData.riskName}` : null}\n classes={{\n title: classes.secondboxTitle,\n }}\n />\n <Divider\n style={{ backgroundColor: \"#C4C4C4\", marginBottom: 30 }}\n />\n {valueCardData && (\n <Box className={classes.containerBox}>\n <TextInput\n multiline\n validate={[required()]}\n variant=\"outlined\"\n source=\"riskInfo\"\n label={`${valueCardData.riskName} (Description)`}\n initialValue={valueCardData.riskInfo}\n style={{ margin: 0 }}\n InputProps={{\n classes: {\n input: classes.dataValueName,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n <TextInput\n multiline\n validate={[required()]}\n variant=\"outlined\"\n source=\"riskDescription\"\n label={`Risk Description`}\n initialValue={valueCardData.riskDescription}\n style={{ margin: 0 }}\n InputProps={{\n classes: {\n input: classes.dataValueName,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n <TextInput\n multiline\n validate={[required()]}\n variant=\"outlined\"\n source=\"impactDescription\"\n label={`Impact Description`}\n initialValue={valueCardData.impactDescription}\n style={{ margin: 0 }}\n InputProps={{\n classes: {\n input: classes.dataValueName,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n {/* <Box pl={9}></Box> */}\n </Box>\n )}\n\n <form onSubmit={handleSubmit}>\n <div className={classes.buttonFieldsContainer}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled={submitting || pristine}\n >\n Save\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={form.reset}\n className={classes.cancelButton}\n >\n Cancel\n </Button>\n </div>\n </form>\n </Card>\n )}\n />\n )}\n </div>\n );\n};\n\nexport default RiskAssessmentMasterDataList;\n","import Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport arrayMutators from \"final-form-arrays\";\nimport * as React from \"react\";\nimport {\n Error,\n Loading,\n TextInput,\n required,\n useDataProvider,\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { Autocomplete, TextField } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n width: \"100%\",\n [theme.breakpoints.down(\"md\")]: {\n display: \"block\",\n },\n // maxWidth: 360,\n // backgroundColor: 'pink',\n },\n dataList: {\n borderRadius: 12,\n backgroundColor: theme.palette.background.paper,\n marginRight: 20,\n width: 350,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n MainDataList: {\n width: \"350px\" /* Updated width based on the provided styles */,\n height: \"100vh\",\n backgroundClor:\n theme.palette.background.paper /* Updated background color */,\n borderRadius: 12 /* Added border-radius */,\n marginRight: 20,\n position: \"sticky\",\n overflowY: \"hidden\",\n /* Added responsive styling for small screens */\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginRight: 0,\n },\n \"&:hover\": {\n overflowY: \"auto\",\n },\n },\n dataValueList: {\n width: 883,\n marginLeft: 20,\n borderRadius: 12,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n marginLeft: 0,\n marginTop: 15,\n },\n },\n dataValueName: {\n width: 350,\n paddingTop: 9,\n paddingBottom: 9,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueNameSingle: {\n width: 350,\n minHeight: 37,\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n dataValueDescription: {\n width: \"100%\",\n marginTop: 16,\n marginLeft: 16,\n },\n toolbar: {\n display: \"flex\",\n width: 350,\n justifyContent: \"space-between\",\n },\n navPadding: {\n padding: 0,\n },\n listSelected: {\n backgroundColor: \"#405189 !important\",\n },\n listText: {\n fontWeight: 500,\n color: \"#333333\",\n },\n listTextSelected: {\n fontWeight: 500,\n color: \"#fff\",\n },\n secondboxTitle: {\n paddingLeft: 24,\n paddingTop: 14,\n },\n containerBox: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr\",\n gridGap: \"20px\",\n paddingLeft: 40,\n paddingRight: 72,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n containerBoxTwo: {\n display: \"flex\",\n paddingLeft: 40,\n paddingRight: 33,\n gap: 16,\n [theme.breakpoints.down(\"md\")]: {\n flexDirection: \"column\",\n paddingLeft: 15,\n paddingRight: 15,\n },\n },\n deleteButton: {\n marginTop: -16,\n marginLeft: 20,\n padding: 0,\n backgroundColor: \"transparent !important\",\n },\n addfieldButton: {\n backgroundColor: \"transparent !important\",\n paddingLeft: 40,\n marginBottom: 36,\n },\n buttonFieldsContainer: {\n paddingLeft: 40,\n marginBottom: 35,\n [theme.breakpoints.down(\"md\")]: {\n display: \"flex\",\n flexGrow: 1,\n paddingRight: 40,\n },\n },\n cancelButton: {\n marginLeft: 25,\n },\n}));\n\nconst RiskMatrixDataList = (props) => {\n const { type,handleSnackbarOpen } = props;\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [data, setData] = React.useState();\n const [riskMatirxMasters, setRiskMatrixMasters] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState();\n const [selectedImpact, setSelectedImpact] = React.useState();\n const [valueCardData, setValueCardData] = React.useState();\n const [valueCardLoading, setValueCardLoading] = React.useState(false);\n const [valueCardError, setValueCardError] = React.useState();\n\n const dataProvider = useDataProvider();\n \n const [selectedIndex, setSelectedIndex] = React.useState();\n\n const onSubmit = (values, form) => {\n dataProvider\n .postRequest(\"RiskMatrixMaster\", {\n queryType: \"update\",\n data: {\n id: values.id,\n riskDescription: values.riskDescription,\n },\n })\n .then((response) => {\n const updatedData = [...data];\n updatedData[selectedIndex] = values;\n setData(updatedData);\n setValueCardData(values);\n handleSnackbarOpen(\"Master Data updated successfully\", \"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = (values) => {\n const errors = {};\n return errors;\n };\n\n React.useEffect(() => {\n dataProvider\n .postRequest(\"RiskMatrixMaster\", {\n queryType: \"list\",\n data: {},\n })\n .then(({ data }) => {\n setData(data);\n setSelectedIndex(0);\n setValueCardData(data[0]);\n setSelectedImpact(data[0]);\n // else setError(\"No details found\")\n setLoading(false);\n })\n .catch(() => {\n console.log(\"Something went wrong\");\n });\n }, []);\n\n const handleListItemClick = (event, index, risk) => {\n setSelectedIndex(index);\n setValueCardData(risk);\n setSelectedImpact(risk);\n };\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n if (!data || data.length === 0) {\n return (\n <div className={classes.root}>\n <Card className={classes.dataList} style={{ padding: 32 }}>\n No Data Available\n </Card>\n </div>\n );\n }\n\n return (\n <div className={classes.root}>\n {isSmall ? (\n <Autocomplete\n disablePortal\n id=\"combo-box-demo\"\n getOptionLabel={(option) => `${option.type} - ${option.riskLabel}`}\n options={data}\n value={selectedImpact}\n sx={{ width: \"100%\" }}\n onChange={(event, newValue) =>\n handleListItemClick(event, data.indexOf(newValue), newValue)\n }\n renderInput={(params) => <TextField {...params} label=\"Impact\" />}\n />\n ) : (\n <Card className={classes.MainDataList}>\n <List\n className={classes.navPadding}\n component=\"nav\"\n aria-label=\"main mailbox folders\"\n >\n {data.map((risk, index) => (\n <ListItem\n key={index}\n button\n selected={selectedIndex === index}\n classes={{ selected: classes.listSelected }}\n onClick={(event) => handleListItemClick(event, index, risk)}\n >\n <ListItemText\n primary={`${risk.type} - ${risk.riskLabel}`}\n className={\n selectedIndex === index\n ? classes.listTextSelected\n : classes.listText\n }\n />\n </ListItem>\n ))}\n </List>\n </Card>\n )}\n {Boolean(\n selectedIndex !== null && selectedIndex !== undefined && valueCardData\n ) && (\n <Form\n onSubmit={onSubmit}\n mutators={{\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={valueCardData}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n }, // injected from final-form-arrays above\n pristine,\n form,\n submitting,\n values,\n }) => (\n <Card className={classes.dataValueList}>\n <CardHeader\n // title={\n // valueCardData\n // ? `${valueCardData.riskName}`\n // : null\n // }\n classes={{\n title: classes.secondboxTitle,\n }}\n />\n {/* <Divider style={{ backgroundColor: \"#C4C4C4\", marginBottom: 30 }} /> */}\n {valueCardData && (\n <Box className={classes.containerBox}>\n <TextInput\n multiline\n validate={[required()]}\n variant=\"outlined\"\n source=\"riskDescription\"\n label={``}\n initialValue={valueCardData.riskDescription}\n style={{ margin: 0 }}\n InputProps={{\n classes: {\n input: classes.dataValueName,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Box>\n )}\n\n <form onSubmit={handleSubmit}>\n <div className={classes.buttonFieldsContainer}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled={submitting || pristine}\n >\n Save\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={form.reset}\n className={classes.cancelButton}\n >\n Cancel\n </Button>\n </div>\n </form>\n </Card>\n )}\n />\n )}\n </div>\n );\n};\n\nexport default RiskMatrixDataList;\n","import Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport { Title } from \"react-admin\";\nimport { CHANGE_ASSESSMENT } from \"../../framework/constants\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport ChangeAssessmentMasterDataList from \"./changeAssessmentMasterData\";\nimport FaqList from \"./faq\";\nimport ProjectMasterDataList from \"./projectMasterData\";\nimport ReadinessGovernancetMasterDataList from \"./readinessGovernanceMaster\";\nimport RiskAssessmentMasterDataList from \"./riskAssessmentMasterData\";\nimport RiskMatrixDataList from \"./riskMatrixData\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { Alert, ButtonBase, Snackbar } from \"@mui/material\";\nimport ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nconst useStyles = makeStyles((theme) => ({\n root: {\n // width: '25%',\n width: '90vw',\n // overflowX: \"hidden\",\n flexGrow: 1,\n // backgroundColor: theme.palette.background.paper,\n },\n '& .MuiTabs-fixed': {\n overflow: 'auto'\n },\n tabPanel: {\n marginTop: 30,\n marginBottom: 50\n },\n tabItemStyle: {\n textTransform: 'capitalize'\n },\n title: {\n textTransform: \"uppercase\",\n // fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\n\nconst MyTabScrollButton = React.forwardRef((props, ref) => {\n const { direction, ...other } = props;\n\n return (\n <ButtonBase\n component=\"div\"\n ref={ref}\n style={{\n opacity: other.disabled ? 0 : 1, \"&:focus\": {\n backgroundColor: '#0b5bdb',\n },\n }}\n {...other}\n >\n {direction === \"left\" ? (\n <ArrowBackIosNewIcon sx={{\n backgroundColor: '#00A0D9', textAlign: 'center', color: '#fff', marginRight: '10px', borderRadius: '50%', fontSize: '30px', padding: '5px', \"&:focus\": {\n backgroundColor: '#0b5bdb',\n },\n \"&:hover\": {\n backgroundColor: '#0486b5',\n },\n }} />\n ) : (\n <ArrowForwardIosIcon sx={{\n backgroundColor: '#00A0D9', textAlign: 'center', color: '#fff', marginLeft: '10px', borderRadius: '50%', fontSize: '30px', padding: '5px', \"&:focus\": {\n backgroundColor: '#0b5bdb',\n },\n \"&:hover\": {\n backgroundColor: '#0486b5',\n },\n }} />\n )}\n </ButtonBase>\n );\n});\nconst StyledTabs = withStyles({\n\n root: {\n maxWidth: \"85vw\",\n '& .MuiTabs-fixed': {\n overflowX: 'auto !important',\n\n },\n // backgroundColor: \"#fff\"\n // borderBottom: '2px solid #ccc', // Border for all tabs\n },\n indicator: {\n display: \"none\",\n // justifyContent: \"center\",\n // backgroundColor: \"transparent\",\n // height: 5,\n // \"& > span\": {\n // maxWidth: 80,\n // width: \"100%\",\n // backgroundColor: \"#EFF2F7\"\n // },\n },\n '& .Mui-selected': {\n borderBottom: '10px solid #f0f', // Remove border for the active tab\n },\n '& .MuiTabs-fixed': {\n overflowX: 'auto !important',\n\n }\n})((props) => <Tabs {...props} style={{ overflow: 'auto' }} ScrollButtonComponent={MyTabScrollButton} TabIndicatorProps={{ children: <span /> }} />);\n\nconst StyledTab = withStyles((theme) => ({\n root: {\n textTransform: \"none\",\n color: \"#000\",\n fontWeight: theme.typography.fontWeightRegular,\n // fontSize: theme.typography.pxToRem(15),\n fontSize: '14px',\n padding: \"0 20px\",\n \"&:focus\": {\n opacity: 1,\n },\n minWidth: 97,\n // paddingLeft: 0,\n // paddingRight: 0,\n borderBottom: \"2px solid #cdd0d1\",\n '&:not($selected)': {\n // borderBottomColor: '#ccc', // Add border for unselected tabs\n },\n \"&$selected\": {\n // borderTop: \"2px solid #0Ab39C\",\n marginBottom: '2px',\n borderTopRightRadius: '5px',\n borderTopLeftRadius: '5px',\n // paddingBottom: \"-10px\",\n fontWeight: '600',\n borderBottom: 'none',\n // backgroundColor: \"#EFF2F7\", // Change this to the color you desire\n backgroundColor: \"#FFFFFF\", // Change this to the color you desire\n color: \"#000\", // Change this to the color you desire for the text\n\n },\n },\n selected: {}\n}))((props) => <Tab disableRipple {...props} />);\n\nconst AntTabs = withStyles({\n root: {\n },\n indicator: {\n backgroundColor: '#828282',\n height: 5,\n },\n})(Tabs);\n\n\nconst AntTab = withStyles((theme) => ({\n root: {\n textTransform: 'none',\n minWidth: 72,\n marginRight: theme.spacing(4),\n color: '#B5B5B5',\n '&$selected': {\n color: '#252525',\n fontWeight: 400,\n fontStyle: 'normal',\n fontSize: 16,\n },\n },\n selected: {},\n}))((props) => <Tab disableRipple {...props} />);\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n aria-labelledby={`simple-tab-${index}`}\n {...other}\n >\n {value === index && <div>{children}</div>}\n </div>\n );\n}\n\nTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n};\n\nfunction a11yProps(index) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`,\n };\n}\n\nexport default function MasterDataTabs(props) {\n const classes = useStyles();\n const [value, setValue] = React.useState(0);\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const user = TokenStorage.getUserDetails();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n return (\n <WithPermission resource=\"MasterData\" bypassUser={isSuperAdmin} action={[\"view\"]} {...props} >\n <div className={classes.root} >\n <Title title=\"Master Data\" className={classes.title} />\n <StyledTabs\n value={value}\n onChange={handleChange}\n aria-label=\"simple tabs example\"\n\n >\n <StyledTab className={classes.tabItemStyle} label=\"Change Impact\" {...a11yProps(0)} />\n <StyledTab className={classes.tabItemStyle} label=\"Change Environment\" {...a11yProps(1)} />\n <StyledTab className={classes.tabItemStyle} label=\"Risk Assessment\" {...a11yProps(2)} />\n <StyledTab className={classes.tabItemStyle} label=\"Risk Matrix\" {...a11yProps(3)} />\n <StyledTab className={classes.tabItemStyle} label=\"Change Readiness\" {...a11yProps(4)} />\n <StyledTab className={classes.tabItemStyle} label=\"Change Governance\" {...a11yProps(5)} />\n <StyledTab className={classes.tabItemStyle} label=\"Project\" {...a11yProps(6)} />\n <StyledTab className={classes.tabItemStyle} label=\"FAQ\" {...a11yProps(7)} />\n </StyledTabs>\n <TabPanel value={value} index={0} className={classes.tabPanel}>\n <ChangeAssessmentMasterDataList type={CHANGE_ASSESSMENT.IMPACT} handleSnackbarOpen={handleSnackbarOpen} />\n </TabPanel>\n <TabPanel value={value} index={1} className={classes.tabPanel}>\n <ChangeAssessmentMasterDataList type={CHANGE_ASSESSMENT.ENVIRONMENT} handleSnackbarOpen={handleSnackbarOpen} />\n </TabPanel>\n <TabPanel value={value} index={2} className={classes.tabPanel}>\n <RiskAssessmentMasterDataList handleSnackbarOpen={handleSnackbarOpen} />\n </TabPanel>\n <TabPanel value={value} index={3} className={classes.tabPanel}>\n <RiskMatrixDataList handleSnackbarOpen={handleSnackbarOpen}/>\n </TabPanel>\n <TabPanel value={value} index={4} className={classes.tabPanel}>\n <ReadinessGovernancetMasterDataList type=\"Readiness\" handleSnackbarOpen={handleSnackbarOpen} />\n </TabPanel>\n <TabPanel value={value} index={5} className={classes.tabPanel}>\n <ReadinessGovernancetMasterDataList type=\"Governance\" handleSnackbarOpen={handleSnackbarOpen}/>\n </TabPanel>\n <TabPanel value={value} index={6} className={classes.tabPanel}>\n <ProjectMasterDataList handleSnackbarOpen={handleSnackbarOpen} />\n </TabPanel>\n <TabPanel value={value} index={7} className={classes.tabPanel}>\n <FaqList handleSnackbarOpen={handleSnackbarOpen}/>\n </TabPanel>\n </div>\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n}\n","import axios from 'axios';\nimport jwt from 'jsonwebtoken';\nimport { TokenStorage } from '../utils/TokenStorage';\n\nconst powerBiApiBaseUrl = 'https://api.powerbi.com/v1.0/myorg';\n\nconst powerBiApi = async (method, endpoint, headers = {}, params = {}) => {\n const accessToken = await checkAccessTokenExpiration();\n\n try {\n const response = await axios({\n method,\n url: `${powerBiApiBaseUrl}/${endpoint}`,\n headers: {\n Authorization: `Bearer ${accessToken}`,\n ...headers,\n },\n params,\n });\n return { ...response.data, accessToken };\n } catch (error) {\n console.error('Power BI API Error:', error.response?.data || error.message);\n throw error;\n }\n};\n\nexport default powerBiApi;\n\n\n\nexport const checkAccessTokenExpiration = async () => {\n\n const accessToken = TokenStorage.getPbiAccessToken();\n // if (accessToken === 'undefined' || refreshToken === 'undefined') {\n // TokenStorage.clear();\n // return;\n // }\n const checkExpiration = () => {\n const decodedToken = jwt.decode(accessToken, { complete: true });\n\n if (!decodedToken || !decodedToken.payload || !decodedToken.payload.exp) {\n // Token is not valid or does not contain expiration information\n return true;\n }\n\n // Compare the expiration time with the current time (in seconds)\n const currentTimestamp = Math.floor(Date.now() / 1000);\n const expirationTimestamp = decodedToken.payload.exp;\n\n return currentTimestamp >= expirationTimestamp;\n };\n\n const isExpired = checkExpiration();\n\n if (isExpired) {\n // console.log('scope ....')\n const token = await TokenStorage.getNewPbiToken();\n const { pbi_access_token } = token.data.pbiToken\n return pbi_access_token\n } else {\n return accessToken;\n }\n\n};","import { models } from 'powerbi-client';\nimport { PowerBIEmbed } from 'powerbi-client-react';\nimport { useState } from 'react';\nimport { AutocompleteInput, Loading, ReferenceInput, Title, usePermissions } from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport powerBiApi, { checkAccessTokenExpiration } from '../../framework/pbiDataProvider';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\nimport { Box } from '@mui/material';\n\nfunction ChangeImpactAssessmentReport(props) {\n const user = TokenStorage.getUserDetails()\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n const [projectId, setProjectId] = useState();\n const [pbiEmbedConfig, setPbiEmbedConfig] = useState({\n type: 'report',\n id: '',\n embedUrl: \"\",\n accessToken: \"\",\n tokenType: models.TokenType.Aad,\n settings: {\n panes: {\n filters: {\n expanded: false,\n visible: false\n }\n },\n navContentPaneEnabled: false,\n // background: models.BackgroundType.Transparent\n },\n eventHooks: {\n accessTokenProvider: checkAccessTokenExpiration\n }\n })\n const { permissions } = usePermissions();\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n // useEffect(() => {\n // powerBiApi(\"GET\", \"reports/d7509ab2-7eb4-4261-a891-c51645fbc3cb\").then(res => {\n // // powerBiApi(\"GET\", \"reports/725283e5-4a2a-4b90-b18b-cf132b8445e7\").then(res => {\n // // powerBiApi(\"GET\", \"reports/51f8c67e-28fb-48b6-9fa3-99488a859aff\").then(res => {\n // const { id, embedUrl, accessToken } = res;\n // setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl, accessToken })\n // });\n\n // }, []);\n\n const handleProjectChange = async (id) => {\n setProjectId(id);\n if (pbiEmbedConfig.embedUrl) {\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"id\"\n },\n operator: \"In\",\n values: [id]\n }\n ];\n\n await window.report.updateFilters(\n models.FiltersOperations.Replace,\n filtersArray\n );\n }\n else {\n powerBiApi(\"GET\", \"reports/d7509ab2-7eb4-4261-a891-c51645fbc3cb\").then(res => {\n // powerBiApi(\"GET\", \"reports/725283e5-4a2a-4b90-b18b-cf132b8445e7\").then(res => {\n // powerBiApi(\"GET\", \"reports/51f8c67e-28fb-48b6-9fa3-99488a859aff\").then(res => {\n const { id, embedUrl, accessToken } = res;\n setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl, accessToken })\n });\n }\n\n };\n return (\n <WithPermission resource=\"Impact Assessment Report\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title=\"Change Impact Assessment\" />\n <div>\n <div style={{ maxWidth: \"320px\" }}>\n <Form\n onSubmit={() => { }}\n render={() => (\n <form>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n onChange={(value) => {\n handleProjectChange(value);\n }}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </form>\n )}\n />\n </div>\n {\n (!pbiEmbedConfig.embedUrl && !projectId) ? <Box height=\"80vh\" justifyContent='center' alignItems='center' display='flex'> Please select a project </Box> : <PowerBIEmbed\n embedConfig={pbiEmbedConfig}\n eventHandlers={\n new Map([\n ['loaded', async function () {\n\n // await window.report.updateFilters(models.FiltersOperations.RemoveAll);\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"id\"\n },\n operator: \"In\",\n values: [projectId]\n },\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"Users(clientId).id\"\n },\n operator: \"In\",\n values: [impersonateUser ? impersonateUser.id : user.id]\n }\n ];\n\n await window.report.updateFilters(\n models.FiltersOperations.Add,\n filtersArray\n );\n // console.log('Report has loaded', window.report);\n // navigator.clipboard.writeText(JSON.stringify(window.report))\n // console.log('Report has loaded', window.report);\n }],\n ['rendered', function () { console.log(window.report) }],\n ['error', function (event) { console.log(event.detail); }],\n ])\n }\n\n cssClassName={\"Embed-container\"}\n\n getEmbeddedComponent={(embeddedReport) => {\n console.log(embeddedReport)\n window.report = embeddedReport;\n }}\n />\n }\n\n </div>\n </WithPermission>\n );\n}\n\nexport default ChangeImpactAssessmentReport;","import { Box, Button, Divider, Grid, IconButton, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport arrayMutators from \"final-form-arrays\";\nimport * as React from \"react\";\nimport {\n AutocompleteInput,\n Loading,\n RadioButtonGroupInput, ReferenceInput,\n TextInput,\n Title,\n maxLength,\n required,\n useDataProvider,\n useNotify,\n usePermissions\n} from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport { kpiChoice } from \"../../framework/constants\";\nimport { impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport moment from \"moment\";\nimport { Alert, Snackbar } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: \"5px\",\n backgroundColor: \"#FFFFFF\",\n borderRadius: '5px',\n padding: '15px',\n // borderTop: '2px solid #B1b1b1'\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n referenceMargin: {\n margin: 0,\n },\n gridsmeCard: {\n paddingLeft: 40,\n paddingBottom: 40\n },\n unitTextHeading: {\n fontStyle: \"normal\",\n color: \"#333333\",\n fontSize: 24,\n margin: 0,\n marginTop: 31,\n marginLeft: 40,\n marginBottom: 35,\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n gridItemPadding: {\n padding: \"0px !important\",\n marginRight: 30,\n marginBottom: 25,\n },\n smeButton: {\n padding: 0,\n marginLeft: \"-10px\",\n },\n saveButton: {\n width: 155,\n height: 48,\n backgroundColor: \"#ACACAC\",\n borderRadius: 8,\n fontSize: 16,\n fontWeight: 500,\n fontStyle: \"normal\",\n textTransform: \"capitalize\",\n },\n responsiveTitle: {\n [theme.breakpoints.down('md')]: {\n whiteSpace: \"break-spaces\",\n fontSize: 19\n },\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nconst KpiCriteria = (props) => {\n const { type } = props;\n const [loading, setLoading] = React.useState();\n const [initialValues, setInitialValues] = React.useState();\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n // const localProjectDetails = TokenStorage.getProjectDetails()\n const classes = useStyles();\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n const { loading: loadingPermissions, permissions } = usePermissions();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const isXS = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n impersonatedURL(isImpersonating, `#/${type === \"GoNoGo\" ? \"go_no_go_criteria\" : \"close_out_criteria\"}?impersonated`);\n const getKpiCriterias = async (projectId) => {\n setLoading(true);\n return dataProvider\n .postRequest(\"KpiCriteria\", {\n queryType: \"list\",\n data: {\n projectId,\n type\n }\n })\n .then((response) => {\n return response.data\n });\n };\n\n const onSubmit = (values, form) => {\n const kpiCriterias = values.kpiCriterias.filter(Boolean).map(kpiItem => ({\n assessment: kpiItem.assessment,\n commentary: kpiItem.commentary,\n kpi: kpiItem.kpi,\n projectId: kpiItem.projectId,\n type: kpiItem.type\n }))\n const { createdAt, ...kpiOverall } = values.kpiOverall[0];\n\n kpiCriterias.push(kpiOverall)\n dataProvider\n .postRequest(\"KpiCriteria\", {\n queryType: \"create\",\n data: {\n projectId: values.projectId,\n type,\n kpiCriterias: kpiCriterias\n },\n })\n .then((response) => {\n handleSnackbarOpen(`KPI ${type} Criteria Operation Completed Successfully`, \"success\");\n form.initialize(values);\n form.restart();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n };\n\n const validate = (values) => {\n const errors = {};\n if (\n values &&\n values.kpiCriterias &&\n values.kpiCriterias.length === 0\n ) {\n errors.kpiCriteria_errors = \"Please add at least one KPI criteria\";\n }\n\n // if (\n // values?.kpiOverall[0]?.assessment === \"\"\n // ) {\n // errors.kpiCriteria_errors = \"Please add overall KPI\";\n // }\n\n return errors;\n };\n\n // React.useEffect(() => {\n const handleProjectChange = (projectId) => {\n getKpiCriterias(projectId)\n .then((kpiCriterias) => {\n const kpiOverall = kpiCriterias.filter(kpi => kpi.type === `${type}Overall`)\n const kpi = kpiCriterias.filter(kpi => kpi.type === type)\n\n setInitialValues((prev) => {\n return {\n ...prev,\n projectId,\n kpiCriterias: kpi.length === 0 ? [{ projectId, kpi: \"\", assessment: \"\", commentary: \"\", type: type }] : kpi,\n kpiOverall: kpiOverall.length === 0 ? [{ projectId, kpi: `${type === \"GoNoGo\" ? \"Go/No-Go\" : \"Close-Out\"} Criteria`, assessment: \"\", commentary: \"\", type: `${type}Overall` }] : kpiOverall\n }\n })\n\n setLoading(false);\n\n }).catch(error => {\n console.log(error);\n handleSnackbarOpen(\"error in getting KPI criterias\", \"error\")\n })\n\n }\n // }, [])\n\n return (\n <>\n <WithPermission resource=\"Change Assessment\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\", \"edit\"]} {...props} >\n <Title title={`${type === \"GoNoGo\" ? \"Go/No-Go\" : \"Close-Out\"} Criteria`} className={classes.title} />\n <Form\n initialValues={initialValues}\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n subscription={{ values: true }}\n validate={validate}\n render={({\n handleSubmit,\n form,\n submitting,\n pristine,\n values,\n form: {\n mutators: { push, pop },\n },\n }) => (\n <form>\n <Box display=\"flex\" sx={{ alignItems: isSmall ? \"flex-start\" : \"center\", justifyContent: \"space-between\", flexDirection: isSmall ? \"column\" : \"row\" }}>\n <Box style={{ width: isXS ? \"100%\" : 483 }}>\n <Grid container spacing={2}>\n <Grid item lg={8} xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n sort={{ field: 'name', order: 'ASC' }}\n onChange={(value) => {\n handleProjectChange(value, form);\n }}\n filter={{ isDraft: false, status: true }}\n className={classes.referenceMargin}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n </Box>\n <Box>\n <Typography style={{ color: \"gray\", marginBottom: isSmall && 12 }}>\n {initialValues && initialValues.kpiCriterias && initialValues.kpiCriterias.length > 0 && initialValues.kpiCriterias[0].createdAt && `Updated at ${moment(initialValues.kpiCriterias[0].createdAt).format(\"hh:mm:ss a, MM/DD/YYYY\")} (UTC)`}\n </Typography>\n </Box>\n </Box>\n {Boolean(values.projectId) &&\n (loading ? (\n <Loading />\n ) : (\n <Box className={classes.root}>\n <Box mb={2}>\n <Box p={2}>\n <KpiCriterias\n // index={index}\n push={push}\n projectId={values.projectId}\n type={type}\n kpiCriteriasData={initialValues.kpiCriterias}\n />\n </Box>\n </Box>\n <Field name=\"kpiCriteria_errors\">\n {({ input, meta }) => (\n <Box color=\"red\" mb={2}>\n {meta.error && <span>{meta.error}</span>}\n </Box>\n )}\n </Field>\n <div className={classes.actionToolbar}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"button\"\n onClick={handleSubmit}\n disabled={submitting || pristine}\n >\n Save\n </Button>\n </div>\n </Box>\n ))}\n </form>\n )}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n </>\n );\n};\n\nconst KpiCriterias = ({ push, projectId, type, kpiCriteriasData }) => {\n const form = useForm();\n const [kpiCriterias, setKpiCriterias] = React.useState([{ projectId, kpi: \"\", assessment: \"\", commentary: \"\", type: type }]);\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n React.useEffect(() => {\n if (Array.isArray(kpiCriteriasData)) {\n if (kpiCriteriasData.length > 0) {\n setKpiCriterias(kpiCriteriasData)\n }\n }\n }, [kpiCriteriasData])\n\n return (\n <div >\n <Box>\n <Grid\n container\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n spacing={2}\n style={{ display: isSmall ? \"none\" : \"flex\" }}\n >\n <Grid item xs={12} md={4} >\n <Typography variant='h5'>KPI</Typography>\n </Grid>\n <Grid item xs={12} md={3} >\n <Typography variant='h5' >Assessment</Typography>\n </Grid>\n <Grid item xs={12} md={4} >\n <Typography variant='h5'>Commentary</Typography>\n </Grid>\n <Grid item xs={12} md={1}>\n {/* <Typography variant='h5'>Commentary</Typography> */}\n </Grid>\n </Grid>\n\n </Box>\n {Boolean(kpiCriterias) && kpiCriterias.map((requirement, i) => (\n Boolean(requirement) &&\n <>\n <Grid\n container\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n spacing={isSmall ? 0 : 2}\n // sx={{ border: \"1px solid red\" }}\n >\n <Grid item md={4} style={{ width: \"100%\" }}>\n <TextInput\n variant=\"outlined\"\n source={`kpiCriterias[${i}].kpi`}\n label=\"\"\n placeholder=\"KPI (max 80 characters)\"\n className={classes.inputMargin}\n fullWidth\n validate={[required(), maxLength(80)]}\n />\n\n </Grid>\n <Grid item md={3} style={{ width: \"100%\", display: \"flex\", justifyContent: \"flex-start\", alignItems: \"flex-start\", }} >\n <RadioButtonGroupInput\n variant=\"outlined\"\n label=\"\"\n source={`kpiCriterias[${i}].assessment`}\n row={true}\n choices={kpiChoice}\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item md={4} xs={12} style={{ width: isSmall ? \"100%\" : \"80%\" }} >\n <TextInput\n variant=\"outlined\"\n source={`kpiCriterias[${i}].commentary`}\n label=\"Commentary (max 255 characters)\"\n className={classes.inputMargin}\n fullWidth\n multiline\n validate={[maxLength(255)]}\n />\n </Grid>\n <Grid item md={1} xs={2} style={{ width: \"20%\", marginTop: \"-15px\" }}>\n {\n isSmall ? <Box sx={{ justifyContent: \"center\", display: \"flex\" }}>\n <Button variant=\"contained\"\n style={{ backgroundColor: \"#f06548cc\", color: \"#fff\", }}\n onClick={() => {\n const proceed = window.confirm('You are deleting the entry. Are you sure?');\n if (proceed) {\n kpiCriterias[i] = undefined\n form.change(`kpiCriterias[${i}]`, undefined)\n setKpiCriterias([...kpiCriterias])\n };\n }}\n >\n Delete\n </Button>\n </Box> :\n <IconButton\n color=\"inherit\"\n aria-label=\"remove value\"\n onClick={() => {\n const proceed = window.confirm('You are deleting the entry. Are you sure?');\n if (proceed) {\n kpiCriterias[i] = undefined\n form.change(`kpiCriterias[${i}]`, undefined)\n setKpiCriterias([...kpiCriterias])\n };\n }}\n >\n <DeleteIcon />\n </IconButton>\n }\n </Grid>\n\n </Grid>\n {\n isSmall && <Box sx={{ marginY: \"12px\" }} >\n <Divider />\n </Box>\n }\n </>\n ))}\n <Grid container item xs={12} alignItems=\"center\" justifyContent=\"center\">\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={() => {\n push(`kpiCriterias`, { projectId, kpi: \"\", assessment: \"\", commentary: \"\", type: type });\n if (kpiCriterias) {\n kpiCriterias.push({ projectId, kpi: \"\", assessment: \"\", commentary: \"\", type: type });\n setKpiCriterias([...kpiCriterias])\n }\n\n else\n setKpiCriterias([{ projectId, kpi: \"\", assessment: \"\", commentary: \"\", type: type }])\n }}\n color=\"primary\"\n variant=\"text\"\n >\n Add Criteria\n </Button>\n </Grid>\n <Box marginTop={2} marginBottom={2}>\n <Divider />\n </Box>\n <Box style={{ backgroundColor: \"#E3E5EE\", minHeight: \"70px\", padding: \"20px 10px 0px\", borderRadius: '10px', marginTop: '20px', border: \"1px solid lightgrey\" }}>\n <Grid\n container\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n spacing={isSmall ? 0 : 6}\n >\n <Grid item xs={12} md={4} style={{ marginTop: '-15px' }}>\n <Typography variant='h6'>\n {type === \"GoNoGo\" ? \"Project meets Go criteria\" : \"Project meets Close-out criteria\"}\n </Typography>\n </Grid>\n <Grid item xs={12} md={3} style={{ padding: \"6px\", marginTop: '5px' }}>\n <RadioButtonGroupInput\n variant=\"outlined\"\n label=\"\"\n source={`kpiOverall[0].assessment`}\n row={true}\n choices={kpiChoice}\n validate={[required(), maxLength(255)]}\n // style={{backgroundColor: \"#fff\", height: '44px', padding: '0 10px'}}\n />\n </Grid>\n <Grid item xs={12} md={5} style={{ padding: \"6px\" }}>\n <TextInput\n variant=\"outlined\"\n source={`kpiOverall[0].commentary`}\n label=\"Commentary (max 255 characters)\"\n className={classes.inputMargin}\n fullWidth\n multiline\n validate={[maxLength(255)]}\n InputProps={{\n style: {\n minHeight: \"41px\",\n width: \"95%\"\n }\n }}\n />\n </Grid>\n {/* <Grid item lg={1}></Grid> */}\n </Grid>\n </Box>\n </div>\n )\n\n}\n\nexport default KpiCriteria;\n","import {\n Box,\n Button,\n Divider,\n IconButton,\n TextareaAutosize,\n Tooltip,\n Typography,\n useMediaQuery,\n withStyles,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\nimport clsx from \"clsx\";\nimport React, { useEffect, useState } from \"react\";\nimport { Loading, useDataProvider, useNotify } from \"react-admin\";\nimport { impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport { Alert, Snackbar } from \"@mui/material\";\n\nconst LightTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 11,\n },\n}))(Tooltip);\nconst useStyles = makeStyles((theme) => ({\n actionToolbar: {\n display: \"flex\",\n marginTop: 40,\n justifyContent: \"flex-end\",\n },\n forecastTitle: {\n backgroundColor: \"#F2F2F2\",\n display: \"flex\",\n },\n forecastCard: {\n marginBottom: 30,\n margin: \"0 auto\",\n width: \"90%\",\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n forecastCardRow: {\n display: \"flex\",\n },\n forecastCardWeek: {\n width: \"17%\",\n fontSize: 14,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"row\",\n [theme.breakpoints.down(\"md\")]: {\n fontSize: 14,\n flexDirection: \"column\",\n },\n textAlign: \"center\",\n },\n forecastRiskContainer: {\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr 1fr\",\n placeItems: \"start\",\n margin: \"5px 4px\",\n alignItems: \"flex-start\",\n },\n forecastRiskBox: {\n width: \"150px\",\n height: 51,\n [theme.breakpoints.down(\"md\")]: {\n minWidth: 64,\n height: 40,\n },\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 0.7,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n \"&.border\": {\n opacity: 1,\n },\n },\n forecastTitleText: {\n fontSize: 16,\n fontWeight: 500,\n fontStyle: \"normal\",\n margin: 0,\n },\n commentary: {\n width: \"100%\",\n height: \"150px\",\n },\n selectedAssessment: {\n margin: \"0 10px\",\n padding: \"4px 4px\",\n boprderRadius: \"10px\",\n textAlign: \"center\",\n \"&.activeRed\": {\n border: \"2px solid #EB5757\",\n },\n \"&.activeGreen\": {\n border: \"2px solid #27AE60\",\n },\n \"&.activeAmber\": {\n border: \"2px solid #F2994A\",\n },\n },\n overallImpact: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n [theme.breakpoints.down(\"xs\")]: {\n flexDirection: \"column\",\n },\n },\n}));\n\nconst HtmlTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: \"#f5f5f9\",\n color: \"rgba(0, 0, 0, 0.87)\",\n maxWidth: 220,\n fontSize: theme.typography.pxToRem(12),\n border: \"1px solid #dadde9\",\n },\n}))(Tooltip);\n\nexport const EnvironmentAssessment = ({\n record,\n activeStep,\n handleBack,\n handleNext,\n steps,\n setIsUpdateProjectDetails,\n}) => {\n const [assessmentMasters, setAssessmentMaster] = useState([]);\n const classes = useStyles();\n const dataProvider = useDataProvider();\n // const form = useForm();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const localProjectDetails = TokenStorage.getProjectDetails();\n const [impactForcast, setImpactForcast] = useState([]);\n // const formValues = form.getState().values;\n const [activeIndex, setActiveIndex] = useState([]);\n const [envCalculation, setEnvCalculation] = useState([]);\n const [mtCalculation, setMtCalculation] = useState([]);\n const [stCalculation, setStCalculation] = useState([]);\n const [commentary, setCommentary] = useState([]);\n const [overallCommentary, setOverallCommentary] = useState([\n { commentary: \"\", type: \"Environment\" },\n { commentary: \"\", type: \"Maturity\" },\n { commentary: \"\", type: \"Saturation\" },\n ]);\n const [impactResponse, setImpactResponse] = useState([]);\n const [isUpdatedAssessment, setIsUpdatedAssesment] = useState([]);\n const [isImpactsLoading, setImpactsLoading] = useState(true);\n const user = TokenStorage.getUserDetails();\n const { isImpersonating } = user ? user : {};\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n\n useEffect(() => {\n dataProvider\n .postRequest(\"ChangeAssessmentMaster\", {\n // id: null,\n queryType: \"retrieve\",\n data: { type: [\"Maturity\", \"Saturation\", \"Environment\"] },\n })\n .then((response) => {\n setAssessmentMaster(response.data);\n setImpactsLoading(false);\n console.log(response);\n })\n .catch((error) => {\n console.log(error);\n });\n }, []);\n\n useEffect(() => {\n dataProvider\n .postRequest(\"ChangeAssessmentDetails\", {\n // id: null,\n queryType: \"retrieve\",\n data: {\n projectId: localProjectDetails.id,\n type: [\"Maturity\", \"Saturation\", \"Environment\"],\n },\n })\n .then((response) => {\n setActiveIndex(\n response.data.assessmentDetails.map((item) => item.impactLevel)\n );\n setCommentary(\n response.data.assessmentDetails.map((item) => item.commentary)\n );\n setEnvCalculation(\n response.data.assessmentDetails.map((item) => {\n if (item.type == \"Environment\") return item.score;\n })\n );\n setMtCalculation(\n response.data.assessmentDetails.map((item) => {\n if (item.type == \"Maturity\") return item.score;\n })\n );\n setStCalculation(\n response.data.assessmentDetails.map((item) => {\n if (item.type == \"Saturation\") return item.score;\n })\n );\n setIsUpdatedAssesment(response.data);\n setImpactForcast(response.data.assessmentDetails);\n setOverallCommentary(\n response.data.assessmentScores.length > 0\n ? response.data.assessmentScores\n : [\n { commentary: \"\", type: \"Environment\" },\n { commentary: \"\", type: \"Maturity\" },\n { commentary: \"\", type: \"Saturation\" },\n ]\n );\n })\n .catch((error) => {\n console.log(error);\n });\n }, []);\n const handleRiskBtnClick = async (index, imp, activeIndx) => {\n const calc =\n Number(imp?.dimensionWeight) * Number(activeIndx?.dimensionScore);\n\n console.log(imp.type, calc);\n\n if (imp.type === \"Environment\") {\n const updateCalc = [...envCalculation];\n updateCalc[index] = calc;\n setEnvCalculation(updateCalc);\n } else if (imp.type === \"Maturity\") {\n const updateCalc = [...mtCalculation];\n updateCalc[index] = calc;\n setMtCalculation(updateCalc);\n } else if (imp.type === \"Saturation\") {\n const updateCalc = [...stCalculation];\n updateCalc[index] = calc;\n setStCalculation(updateCalc);\n }\n\n const udpateIndex = [...activeIndex];\n udpateIndex[index] = activeIndx?.name;\n setActiveIndex(udpateIndex);\n const params = {\n projectId: localProjectDetails?.id,\n changeAssessmentMasterId: Number(imp.id),\n impactLevel: activeIndx?.name,\n type: imp.type,\n score: calc,\n id: impactForcast[index]?.id || null,\n };\n const updateImpacts = [...impactForcast];\n updateImpacts[index] = params;\n setImpactForcast(updateImpacts);\n };\n const handleCommentary = (index, id, value) => {\n if (value?.length <= 255) {\n const updateCommentary = [...commentary];\n updateCommentary[index] = value;\n setCommentary(updateCommentary);\n }\n };\n const handleOverallCommentary = (index, value, type) => {\n // console.log(value)\n if (value?.length <= 255) {\n const updateCommentary = [...overallCommentary];\n updateCommentary[index] = {\n id: updateCommentary[index]?.id || null,\n commentary: value,\n type: type,\n };\n setOverallCommentary(updateCommentary);\n }\n };\n const handleSteper = async (values, status) => {\n const stepers = {\n id: localProjectDetails.id,\n isDraft: true,\n stepCount: 4,\n };\n dataProvider\n .postRequest(\"Project\", {\n queryType: \"updateStep\",\n data: stepers,\n })\n .then((response) => {\n // form.restart();\n console.log(response);\n // onClose(false, true);\n if (status == \"draft\") {\n TokenStorage.clearProjectData();\n impersonatedURL(isImpersonating, \"#/project?impersonated\");\n } else {\n handleNext(response.data);\n }\n // refresh();\n // createMilestoneView()\n })\n .catch((error) => {\n console.log(error);\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n };\n\n const validation = (value) => {\n // console.log(value)\n let hasImpactLevel = true\n if (value.length === 9) {\n value.map((item) => {\n if (!item) {\n handleSnackbarOpen(`Please fill the all change environment assessment`, \"warning\")\n hasImpactLevel = false\n }\n })\n return hasImpactLevel\n }\n else {\n handleSnackbarOpen(`Please fill the all change environment assessment`, \"warning\")\n }\n\n return false\n }\n const handleSubmit = (status) => {\n // console.log(impactForcast);\n // const uniqueArray = Array.from(new Set(impactForcast.map(item => item.changeAssessmentMasterId)))\n // .map(changeAssessmentMasterId => impactForcast.find(item => item.changeAssessmentMasterId === changeAssessmentMasterId));\n\n const isValidated = validation(impactForcast)\n // if (impactForcast.length === 9) {\n if (isValidated) {\n\n\n const requestBody = impactForcast.map((item, index) => {\n const com = commentary[index];\n if (com !== undefined) {\n return {\n ...item,\n commentary: com,\n };\n } else {\n return {\n ...item,\n commentary: \"\",\n };\n }\n });\n const overallAssessments = [\n {\n id: overallCommentary[0]?.id || null,\n projectId: localProjectDetails.id,\n overallScore: [\n ...envCalculation,\n ...mtCalculation,\n ...stCalculation,\n ].reduce((acc, current) => acc + (current || 0), 0),\n commentary: overallCommentary[0]?.commentary,\n type: \"Environment\",\n },\n {\n id: overallCommentary[1]?.id || null,\n projectId: localProjectDetails.id,\n overallScore: mtCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ),\n commentary: overallCommentary[1]?.commentary,\n type: \"Maturity\",\n },\n {\n id: overallCommentary[2]?.id || null,\n projectId: localProjectDetails.id,\n overallScore: stCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ),\n commentary: overallCommentary[2]?.commentary,\n type: \"Saturation\",\n },\n ];\n const values = {\n projectId: localProjectDetails.id,\n assessmentDetails: requestBody,\n assessmentScores: overallAssessments,\n type: [\"Maturity\", \"Saturation\", \"Environment\"],\n };\n // if (isUpdatedAssessment.length > 0) {\n dataProvider\n .postRequest(\"ChangeAssessmentDetails\", {\n queryType: \"update\",\n data: values,\n })\n .then(async (response) => {\n setImpactResponse(response.data);\n //\n if (status === \"draft\" || localProjectDetails?.isDraft == true) {\n await handleSteper(response.data, status);\n } else {\n handleNext(response.data);\n }\n console.log(response);\n })\n .catch((error) => {\n handleSnackbarOpen(`Environment assessment changes: ${error.message}`, \"error\");\n console.log(error);\n });\n }\n // } else {\n\n // }\n };\n\n const getEnvCalculation = (calculation) => {\n const totalCalculation = calculation?.reduce(\n (acc, current) => acc + (current || 0),\n 0\n );\n\n if (totalCalculation >= 1 && totalCalculation <= 4) {\n return { color: \"#27AE60\", label: \"Low\" };\n } else if (totalCalculation > 22 && totalCalculation <= 7) {\n return { color: \"#F2994A\", label: \"Medium\" };\n } else if (totalCalculation > 9) {\n return { color: \"#EB5757\", label: \"High\" };\n }\n return { color: \"\", label: \"\" }; // Handle other cases if needed\n };\n const getMtCalculation = (calculation) => {\n const totalCalculation = calculation?.reduce(\n (acc, current) => acc + (current || 0),\n 0\n );\n\n if (totalCalculation >= 1 && totalCalculation <= 4) {\n return { color: \"#27AE60\", label: \"Low\" };\n } else if (totalCalculation > 22 && totalCalculation <= 7) {\n return { color: \"#F2994A\", label: \"Medium\" };\n } else if (totalCalculation > 9) {\n return { color: \"#EB5757\", label: \"High\" };\n }\n return { color: \"\", label: \"\" }; // Handle other cases if needed\n };\n const getStCalculation = (calculation) => {\n const totalCalculation = calculation?.reduce(\n (acc, current) => acc + (current || 0),\n 0\n );\n\n if (totalCalculation >= 1 && totalCalculation <= 22) {\n return { color: \"#27AE60\", label: \"Low\" };\n } else if (totalCalculation > 22 && totalCalculation <= 30) {\n return { color: \"#F2994A\", label: \"Medium\" };\n } else if (totalCalculation > 30) {\n return { color: \"#EB5757\", label: \"High\" };\n }\n return { color: \"\", label: \"\" }; // Handle other cases if needed\n };\n return (\n <div>\n {!isImpactsLoading ? (\n assessmentMasters?.map((impact, index) => (\n <div>\n {isSmall ? (\n <div>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"center\">\n <Typography className={classes.heading}>\n {index + 1}\n {\". \"} {impact?.name}\n </Typography>\n <LightTooltip\n title={impact?.description}\n placement=\"left-start\"\n >\n <IconButton aria-label=\"info\">\n <InfoOutlinedIcon className={classes.outlineIcon} />\n </IconButton>\n </LightTooltip>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeRed:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[2]?.name === \"Emerging\"\n : false,\n \"risk-high\": true,\n border:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n style={{ width: \"100%\" }}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[2]\n )\n }\n >\n {impact.impactLevels[2]?.name}\n </Button>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeAmber:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[1]?.name === \"Developing\"\n : false,\n \"risk-medium\": true,\n border:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n style={{ width: \"100%\" }}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[1]\n )\n }\n >\n {impact.impactLevels[1]?.name}\n </Button>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeGreen:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[0]?.name === \"Mature\"\n : false,\n \"risk-low\": true,\n border:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n style={{ width: \"100%\" }}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[0]\n )\n }\n >\n {impact.impactLevels[0]?.name}\n </Button>\n </Box>\n <Box style={{ display: \"flex\", justifyContent: \"center\" }}>\n <TextareaAutosize\n aria-label=\"commentary\"\n minRows={3}\n placeholder={`Enter ${impact.type} commentary (max 255 characters)`}\n style={{\n width: \"90%\",\n margin: \"10px 0\",\n padding: \"4px 4px\",\n }}\n onChange={(e) =>\n handleCommentary(index, impact.id, e.target.value)\n }\n value={commentary[index] || \"\"}\n />\n </Box>\n <Box sx={{ margin: \"10px\" }}>\n <Divider />\n </Box>\n </div>\n ) : (\n <div className={classes.forecastCardRow}>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"start\",\n flexDirection: \"column\",\n width: \"20%\",\n padding: \"18px\",\n borderRight: \"1px solid #C4C4C4\",\n }}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Typography className={classes.heading}>\n {index + 1}\n {\". \"} {impact?.name}\n </Typography>\n <LightTooltip\n title={impact?.description}\n placement=\"left-start\"\n >\n <IconButton aria-label=\"info\">\n <InfoOutlinedIcon className={classes.outlineIcon} />\n </IconButton>\n </LightTooltip>\n </Box>\n </Box>\n <div className={classes.forecastRiskContainer}>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeRed:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">\n {\" \"}\n {impact.impactLevels[2]?.description &&\n impact.impactLevels[2]?.description\n .split(\"\\n\")\n .map((text, index) => (\n <React.Fragment key={index}>\n {text}\n <br />\n </React.Fragment>\n ))}\n </Typography>\n </Box>\n }\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[2]?.name === \"Emerging\"\n : false,\n \"risk-high\": true,\n border:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[2]\n )\n }\n >\n {impact.impactLevels[2]?.name}\n </Button>\n </HtmlTooltip>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeAmber:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">\n {\" \"}\n {impact.impactLevels[1]?.description &&\n impact.impactLevels[1]?.description\n .split(\"\\n\")\n .map((text, index) => (\n <React.Fragment key={index}>\n {text}\n <br />\n </React.Fragment>\n ))}\n </Typography>\n </Box>\n }\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[1]?.name === \"Developing\"\n : false,\n \"risk-medium\": true,\n border:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[1]\n )\n }\n >\n {impact.impactLevels[1]?.name}\n </Button>\n </HtmlTooltip>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeGreen:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">\n {\" \"}\n {impact.impactLevels[0]?.description &&\n impact.impactLevels[0]?.description\n .split(\"\\n\")\n .map((text, index) => (\n <React.Fragment key={index}>\n {text}\n <br />\n </React.Fragment>\n ))}\n </Typography>\n </Box>\n }\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[0]?.name === \"Mature\"\n : false,\n \"risk-low\": true,\n border:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[0]\n )\n }\n >\n {impact.impactLevels[0]?.name}\n </Button>\n </HtmlTooltip>\n </Box>\n <Box>\n {/* <TextField id=\"standard-basic\" label=\"Commentary\" InputProps={{\n classes: {\n input: classes.commentary,\n // notchedOutline: classes.inputBorder,\n },\n }} name=\"comentary\" variant=\"outlined\" /> */}\n\n <TextareaAutosize\n aria-label=\"commentary\"\n minRows={3}\n placeholder={`Enter ${impact.type} commentary (max 255 characters)`}\n style={{ width: \"100%\" }}\n onChange={(e) =>\n handleCommentary(index, impact.id, e.target.value)\n }\n value={commentary[index] || \"\"}\n />\n </Box>\n </div>\n </div>\n )}\n </div>\n ))\n ) : (\n <Loading />\n )}\n <Box style={{ width: \"100%\", backgroundColor: \"#c4cdd5\" }}>\n <Divider variant=\"fullWidth\" />\n </Box>\n <Box\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n {mtCalculation.length > 0 &&\n overallCommentary.map(\n (item, index) =>\n item.type === \"Maturity\" && (\n <Box style={{ width: \"100%\" }}>\n <p\n style={{ fontSize: \"20px\", fontWeight: \"600\", textAlign: 'center' }}\n >{`Change ${item.type}`}</p>\n <Box\n className={classes.overallImpact}\n >\n {mtCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) > 0 &&\n mtCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) < 2 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#27AE60\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Mature\n </Button>\n )}\n {mtCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) > 1 &&\n mtCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) < 3 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#F2994A\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Developing\n </Button>\n )}\n {mtCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) > 2 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#EB5757\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Emerging\n </Button>\n )}\n <TextareaAutosize\n aria-label=\"commentary\"\n minRows={3}\n placeholder=\"Enter Overall Maturity commentary (max 255 characters)\"\n style={{\n width: isSmall ? \"90%\" : \"320px\",\n margin: isSmall ? \"10px 0\" : \"0 5px\",\n padding: \"6px 2px\",\n }}\n onChange={(e) =>\n handleOverallCommentary(1, e.target.value, \"Maturity\")\n }\n value={item?.commentary || \"\"}\n helperText={`${item?.commentary?.length}/255 characters`}\n />\n </Box>\n </Box>\n )\n )}\n {stCalculation.length > 0 &&\n overallCommentary.map(\n (item, index) =>\n item.type === \"Saturation\" && (\n <Box style={{ width: \"100%\" }}>\n <p\n style={{ fontSize: \"20px\", fontWeight: \"600\", textAlign: 'center' }}\n >{`Change ${item.type}`}</p>\n <Box\n className={classes.overallImpact}\n >\n {stCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) >= 1 &&\n stCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) <= 4 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#27AE60\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Mature\n </Button>\n )}\n {stCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) >= 5 &&\n stCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) <= 7 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#F2994A\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Developing\n </Button>\n )}\n {stCalculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ) > 7 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#EB5757\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Emerging\n </Button>\n )}\n <TextareaAutosize\n aria-label=\"commentary\"\n minRows={3}\n placeholder=\"Enter Overall Saturation commentary (max 255 characters)\"\n style={{\n width: isSmall ? \"90%\" : \"320px\",\n margin: isSmall ? \"10px 0\" : \"0 5px\",\n padding: \"6px 2px\",\n }}\n onChange={(e) =>\n handleOverallCommentary(2, e.target.value, \"Saturation\")\n }\n value={item?.commentary || \"\"}\n />\n </Box>\n </Box>\n )\n )}\n {[...envCalculation, ...mtCalculation, ...stCalculation].length > 0 &&\n overallCommentary.map(\n (item, index) =>\n item.type === \"Environment\" && (\n <Box style={{ width: \"100%\" }}>\n <p\n style={{ fontSize: \"20px\", fontWeight: \"600\", textAlign: 'center' }}\n >{`Change ${item.type}`}</p>\n <Box\n className={classes.overallImpact}\n >\n {[\n ...envCalculation,\n ...mtCalculation,\n ...stCalculation,\n ].reduce((acc, current) => acc + (current || 0), 0) > 0 &&\n [\n ...envCalculation,\n ...mtCalculation,\n ...stCalculation,\n ].reduce((acc, current) => acc + (current || 0), 0) <=\n 11 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#27AE60\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Mature\n </Button>\n )}\n {[\n ...envCalculation,\n ...mtCalculation,\n ...stCalculation,\n ].reduce((acc, current) => acc + (current || 0), 0) > 11 &&\n [\n ...envCalculation,\n ...mtCalculation,\n ...stCalculation,\n ].reduce((acc, current) => acc + (current || 0), 0) <=\n 19 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#F2994A\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Developing\n </Button>\n )}\n {[\n ...envCalculation,\n ...mtCalculation,\n ...stCalculation,\n ].reduce((acc, current) => acc + (current || 0), 0) >\n 19 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#EB5757\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Emerging\n </Button>\n )}\n <TextareaAutosize\n aria-label=\"commentary\"\n minRows={3}\n placeholder=\"Enter Overall Environment commentary (max 255 characters)\"\n style={{\n width: isSmall ? \"90%\" : \"320px\",\n margin: isSmall ? \"10px 0\" : \"0 5px\",\n padding: \"6px 2px\",\n }}\n onChange={(e) =>\n handleOverallCommentary(\n 0,\n e.target.value,\n \"Environment\"\n )\n }\n value={item?.commentary || \"\"}\n />\n </Box>\n </Box>\n )\n )}\n </Box>\n\n <div className={classes.actionToolbar}>\n {activeStep > 0 && (\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={handleBack}\n >\n Previous\n </Button>\n )}\n {!(activeStep === steps.length) && (\n <Button\n type=\"button\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={() => handleSubmit(\"notDraft\")}\n >\n Next\n </Button>\n )}\n {!(activeStep === steps.length) &&\n localProjectDetails?.isDraft == true && (\n <Button\n type=\"button\"\n variant=\"contained\"\n color=\"secondary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={() => handleSubmit(\"draft\")}\n // onClick={this.handleSubmit}\n >\n Save To Draft\n </Button>\n )}\n </div>\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </div>\n );\n};\n","import {\n Box,\n Button,\n Divider,\n IconButton,\n TextareaAutosize,\n Tooltip,\n Typography,\n useMediaQuery,\n withStyles,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\nimport clsx from \"clsx\";\nimport React, { useEffect, useState } from \"react\";\nimport { Loading, useDataProvider } from \"react-admin\";\nimport { impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport { Alert, Snackbar } from \"@mui/material\";\nconst LightTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 11,\n },\n}))(Tooltip);\nconst useStyles = makeStyles((theme) => ({\n actionToolbar: {\n display: \"flex\",\n marginTop: 40,\n justifyContent: \"flex-end\",\n },\n forecastTitle: {\n backgroundColor: \"#F2F2F2\",\n display: \"flex\",\n },\n forecastCard: {\n marginBottom: 30,\n margin: \"0 auto\",\n width: \"90%\",\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n forecastCardRow: {\n display: \"flex\",\n },\n forecastCardWeek: {\n width: \"17%\",\n fontSize: 14,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"row\",\n [theme.breakpoints.down(\"md\")]: {\n fontSize: 14,\n flexDirection: \"column\",\n },\n textAlign: \"center\",\n },\n forecastRiskContainer: {\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr 1fr\",\n placeItems: \"start\",\n margin: \"5px 4px\",\n alignItems: \"flex-start\",\n },\n forecastRiskBox: {\n width: \"150px\",\n height: 51,\n [theme.breakpoints.down(\"md\")]: {\n minWidth: 64,\n height: 40,\n },\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 0.7,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n \"&.border\": {\n opacity: 1,\n },\n },\n forecastTitleText: {\n fontSize: 16,\n fontWeight: 500,\n fontStyle: \"normal\",\n margin: 0,\n },\n commentary: {\n width: \"100%\",\n height: \"150px\",\n },\n selectedAssessment: {\n margin: \"0 10px\",\n padding: \"4px 4px\",\n boprderRadius: \"10px\",\n textAlign: \"center\",\n \"&.activeRed\": {\n border: \"2px solid #EB5757\",\n },\n \"&.activeGreen\": {\n border: \"2px solid #27AE60\",\n },\n \"&.activeAmber\": {\n border: \"2px solid #F2994A\",\n },\n },\n overallImpact: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n [theme.breakpoints.down(\"xs\")]: {\n flexDirection: \"column\",\n },\n },\n}));\n\nconst HtmlTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: \"#f5f5f9\",\n color: \"rgba(0, 0, 0, 0.87)\",\n maxWidth: 220,\n fontSize: theme.typography.pxToRem(12),\n border: \"1px solid #dadde9\",\n },\n}))(Tooltip);\n\nexport const ImpactAssesment = ({\n record,\n activeStep,\n handleBack,\n handleNext,\n steps,\n setIsUpdateProjectDetails,\n}) => {\n const [impacts, setImpacts] = useState([]);\n const [impactForcast, setImpactForcast] = useState([]);\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const dataProvider = useDataProvider();\n const user = TokenStorage.getUserDetails();\n // const form = useForm();\n // const formValues = form.getState().values;\n const [activeIndex, setActiveIndex] = useState([]);\n const [calculation, setCalculation] = useState([]);\n const [commentary, setCommentary] = useState([]);\n const [overallCommentry, setOverallCommentry] = useState({ commentary: \"\" });\n const [calculations, setCalculations] = useState([]);\n const [impactResponse, setImpactResponse] = useState([]);\n const [isUpdatedAssessment, setIsUpdatedAssesment] = useState([]);\n const [isImpactsLoading, setImpactsLoading] = useState(true);\n const localProjectDetails = TokenStorage.getProjectDetails();\n const { isImpersonating } = user ? user : {};\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n // const resource = \"Milestone\";\n\n useEffect(() => {\n dataProvider\n .postRequest(\"ChangeAssessmentMaster\", {\n // id: null,\n queryType: \"retrieve\",\n data: { type: [\"Impact\"] },\n })\n .then((response) => {\n setImpacts(response.data);\n setImpactsLoading(false);\n console.log(response);\n })\n .catch((error) => {\n console.log(error);\n });\n }, []);\n\n useEffect(() => {\n dataProvider\n .postRequest(\"ChangeAssessmentDetails\", {\n // id: null,\n queryType: \"retrieve\",\n data: {\n projectId: localProjectDetails?.id,\n type: [\"Impact\"],\n },\n })\n .then((response) => {\n setActiveIndex(\n response.data.assessmentDetails.map((item) => item.impactLevel)\n );\n setCommentary(\n response.data.assessmentDetails.map((item) => item.commentary)\n );\n setIsUpdatedAssesment(response.data);\n setImpactForcast(response.data.assessmentDetails);\n setCalculation(\n response.data.assessmentDetails.map((item) => item.score)\n );\n setOverallCommentry(\n response.data.assessmentScores[0] || { commentary: \"\" }\n );\n console.log(response);\n })\n .catch((error) => {\n console.log(error);\n });\n }, []);\n\n const handleRiskBtnClick = async (index, imp, activeIndx) => {\n const calc =\n Number(imp?.dimensionWeight) * Number(activeIndx?.dimensionScore);\n const updateCalc = [...calculation];\n updateCalc[index] = calc;\n setCalculation(updateCalc);\n // setCalculation()\n const udpateIndex = [...activeIndex];\n udpateIndex[index] = activeIndx?.name;\n // console.log(index, activeIndx)\n setActiveIndex(udpateIndex);\n const params = {\n projectId: localProjectDetails?.id,\n changeAssessmentMasterId: Number(imp.id),\n impactLevel: activeIndx?.name,\n score: calc,\n type: \"Impact\",\n id: impactForcast[index]?.id || null,\n };\n const updateImpacts = [...impactForcast];\n updateImpacts[index] = params;\n setImpactForcast(updateImpacts);\n };\n const handleCommentary = (index, id, value) => {\n const updateCommentary = [...commentary];\n updateCommentary[index] = value;\n setCommentary(updateCommentary);\n };\n const handleOverallCommentary = (value) => {\n const oldObject = { ...overallCommentry };\n oldObject[\"commentary\"] = value;\n setOverallCommentry(oldObject);\n };\n const handleSteper = async (values, status) => {\n const stepers = {\n id: localProjectDetails.id,\n isDraft: true,\n stepCount: 3,\n };\n dataProvider\n .postRequest(\"Project\", {\n queryType: \"updateStep\",\n data: stepers,\n })\n .then((response) => {\n // form.restart();\n console.log(response);\n if (status == \"draft\") {\n TokenStorage.clearProjectData();\n impersonatedURL(isImpersonating, \"#/project?impersonated\");\n } else {\n handleNext(response.data);\n }\n // handleNext(response.data)\n // refresh();\n // createMilestoneView()\n })\n .catch((error) => {\n console.log(error);\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n };\n const validation = (value) => {\n let hasImpactLevel = true\n if (value.length === 15) {\n value.map((item) => {\n if (!item) {\n handleSnackbarOpen(`Please fill the all change impact assessment`, \"warning\")\n hasImpactLevel = false\n }\n })\n return hasImpactLevel\n }\n else {\n handleSnackbarOpen(`Please fill the all change impact assessment`, \"warning\")\n }\n\n return false\n }\n const handleSubmit = (status) => {\n // const uniqueArray = Array.from(new Set(impactForcast.map(item => item.changeAssessmentMasterId)))\n // .map(changeAssessmentMasterId => impactForcast.find(item => item.changeAssessmentMasterId === changeAssessmentMasterId));\n // console.log(uniqueArray)\n // console.log(impactForcast)\n \n const isValidated = validation(impactForcast)\n\n if (isValidated) {\n // if (impactForcast.length === 15) {\n const requestBody = impactForcast.map((item, index) => {\n const com = commentary[index];\n if (com !== undefined) {\n return {\n ...item,\n commentary: com,\n };\n } else {\n return {\n ...item,\n commentary: \"\",\n };\n }\n });\n const overallAssessments = [\n {\n id: overallCommentry?.id || null,\n projectId: localProjectDetails.id,\n overallScore: calculation.reduce(\n (acc, current) => acc + (current || 0),\n 0\n ),\n commentary: overallCommentry.commentary,\n type: \"Impact\",\n },\n ];\n\n const values = {\n projectId: localProjectDetails.id,\n assessmentDetails: requestBody,\n assessmentScores: overallAssessments,\n type: [\"Impact\"],\n };\n\n dataProvider\n .postRequest(\"ChangeAssessmentDetails\", {\n queryType: \"update\",\n data: values,\n })\n .then(async (response) => {\n setImpactResponse(response.data);\n // handleNext(response.data)\n console.log(response);\n if (status === \"draft\" || localProjectDetails?.isDraft == true) {\n await handleSteper(response.data, status);\n } else {\n handleNext(response.data);\n }\n })\n .catch((error) => {\n console.log(error);\n handleSnackbarOpen(`Impact assessment changes: ${error.message}`, \"error\")\n });\n }\n };\n return (\n <div>\n {!isImpactsLoading ? (\n impacts?.map((impact, index) => (\n <div>\n {isSmall ? (\n <div>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"center\">\n <Typography className={classes.heading}>\n {index + 1}\n {\". \"} {impact?.name}\n </Typography>\n <LightTooltip\n title={impact?.description}\n placement=\"left-start\"\n >\n <IconButton aria-label=\"info\">\n <InfoOutlinedIcon className={classes.outlineIcon} />\n </IconButton>\n </LightTooltip>\n </Box>\n <Box\n style={{\n display: \"flexx\",\n justifyContent: \"center\",\n flexDirection: \"column\",\n }}\n >\n <Box\n className={clsx(classes.selectedAssessment, {\n activeRed:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[2]?.name === \"High\" ||\n impact.impactLevels[2]?.name === \"Challenging\"\n : false,\n \"risk-high\": true,\n border:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n style={{ width: \"100%\" }}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[2]\n )\n }\n >\n {impact.impactLevels[2]?.name}\n </Button>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeAmber:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[1]?.name === \"Medium\" ||\n impact.impactLevels[1]?.name === \"Marginal\"\n : false,\n \"risk-medium\": true,\n border:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n style={{ width: \"100%\" }}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[1]\n )\n }\n >\n {impact.impactLevels[1]?.name}\n </Button>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeGreen:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[0]?.name === \"Low\" ||\n impact.impactLevels[0]?.name === \"Acceptable\"\n : false,\n \"risk-low\": true,\n border:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n style={{ width: \"100%\" }}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[0]\n )\n }\n >\n {impact.impactLevels[0]?.name}\n </Button>\n </Box>\n <Box style={{ display: \"flex\", justifyContent: \"center\" }}>\n <TextareaAutosize\n aria-label=\"Commentary (max 255 characters)\"\n minRows={3}\n placeholder=\"Commentary (max 255 characters)\"\n style={{\n width: \"90%\",\n margin: \"10px 0\",\n padding: \"4px 4px\",\n }}\n onChange={(e) =>\n handleCommentary(index, impact.id, e.target.value)\n }\n value={commentary[index] || \"\"}\n />\n </Box>\n <Box sx={{ margin: \"10px\" }}>\n <Divider />\n </Box>\n </Box>\n </div>\n ) : (\n <div className={classes.forecastCardRow}>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"start\",\n flexDirection: \"column\",\n width: \"20%\",\n padding: \"18px\",\n borderRight: \"1px solid #C4C4C4\",\n }}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Typography className={classes.heading}>\n {index + 1}\n {\". \"} {impact?.name}\n </Typography>\n <LightTooltip\n title={impact?.description}\n placement=\"left-start\"\n >\n <IconButton aria-label=\"info\">\n <InfoOutlinedIcon className={classes.outlineIcon} />\n </IconButton>\n </LightTooltip>\n </Box>\n </Box>\n <div className={classes.forecastRiskContainer}>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeRed:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">\n {\" \"}\n {impact.impactLevels[2]?.description &&\n impact.impactLevels[2]?.description\n .split(\"\\n\")\n .map((text, index) => (\n <React.Fragment key={index}>\n {text}\n <br />\n </React.Fragment>\n ))}\n </Typography>\n </Box>\n }\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[2]?.name === \"High\" ||\n impact.impactLevels[2]?.name === \"Challenging\"\n : false,\n \"risk-high\": true,\n border:\n impact.impactLevels[2]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[2]\n )\n }\n >\n {impact.impactLevels[2]?.name}\n </Button>\n </HtmlTooltip>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeAmber:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">\n {\" \"}\n {impact.impactLevels[1]?.description &&\n impact.impactLevels[1]?.description\n .split(\"\\n\")\n .map((text, index) => (\n <React.Fragment key={index}>\n {text}\n <br />\n </React.Fragment>\n ))}\n </Typography>\n </Box>\n }\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[1]?.name === \"Medium\" ||\n impact.impactLevels[1]?.name === \"Marginal\"\n : false,\n \"risk-medium\": true,\n border:\n impact.impactLevels[1]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[1]\n )\n }\n >\n {impact.impactLevels[1]?.name}\n </Button>\n </HtmlTooltip>\n </Box>\n <Box\n className={clsx(classes.selectedAssessment, {\n activeGreen:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n >\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">\n {\" \"}\n {impact.impactLevels[0]?.description &&\n impact.impactLevels[0]?.description\n .split(\"\\n\")\n .map((text, index) => (\n <React.Fragment key={index}>\n {text}\n <br />\n </React.Fragment>\n ))}\n </Typography>\n </Box>\n }\n >\n <Button\n className={clsx(classes.forecastRiskBox, {\n active: impact\n ? impact.impactLevels[0]?.name === \"Low\" ||\n impact.impactLevels[0]?.name === \"Acceptable\"\n : false,\n \"risk-low\": true,\n border:\n impact.impactLevels[0]?.name ===\n impactForcast[index]?.impactLevel,\n })}\n onClick={() =>\n handleRiskBtnClick(\n index,\n impact,\n impact.impactLevels[0]\n )\n }\n >\n {impact.impactLevels[0]?.name}\n </Button>\n </HtmlTooltip>\n </Box>\n <Box>\n <TextareaAutosize\n aria-label=\"Commentary (max 255 characters)\"\n minRows={3}\n placeholder=\"Commentary (max 255 characters)\"\n style={{ width: \"100%\" }}\n onChange={(e) =>\n handleCommentary(index, impact.id, e.target.value)\n }\n value={commentary[index] || \"\"}\n />\n </Box>\n </div>\n </div>\n )}\n </div>\n ))\n ) : (\n <Loading />\n )}\n <Box style={{ width: \"100%\", backgroundColor: \"#c4cdd5\" }}>\n <Divider variant=\"fullWidth\" />\n </Box>\n {calculation.length > 0 && (\n <Box>\n <p\n style={{ fontSize: \"20px\", fontWeight: \"600\", textAlign: \"center\" }}\n >\n Overall Impact Assessment\n </p>\n <Box className={classes.overallImpact}>\n {calculation.reduce((acc, current) => acc + (current || 0), 0) >=\n 15 &&\n calculation.reduce((acc, current) => acc + (current || 0), 0) <=\n 22 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#27AE60\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Low Impact\n </Button>\n )}\n {calculation.reduce((acc, current) => acc + (current || 0), 0) >\n 22 &&\n calculation.reduce((acc, current) => acc + (current || 0), 0) <=\n 30 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#F2994A\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n Medium Impact\n </Button>\n )}\n {calculation.reduce((acc, current) => acc + (current || 0), 0) >\n 30 && (\n <Button\n style={{\n padding: \"20px 16px\",\n borderRadius: \"5px\",\n backgroundColor: \"#EB5757\",\n width: isSmall ? \"90%\" : \"180px\",\n }}\n >\n High Impact\n </Button>\n )}\n <TextareaAutosize\n aria-label=\"commentary\"\n minRows={3}\n placeholder=\"Enter overall impact commentary\"\n style={{\n width: isSmall ? \"90%\" : \"320px\",\n margin: isSmall ? \"10px 0\" : \"0 5px\",\n padding: \"6px 2px\",\n }}\n onChange={(e) => handleOverallCommentary(e.target.value)}\n value={overallCommentry?.commentary || \"\"}\n />\n </Box>\n </Box>\n )}\n <div className={classes.actionToolbar}>\n {activeStep > 0 && (\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={handleBack}\n >\n Previous\n </Button>\n )}\n {!(activeStep === steps.length) && (\n <Button\n type=\"button\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={() => handleSubmit(\"notDraft\")}\n >\n Next\n </Button>\n )}\n {!(activeStep === steps.length) &&\n localProjectDetails?.isDraft == true && (\n <Button\n type=\"button\"\n variant=\"contained\"\n color=\"secondary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={() => handleSubmit(\"draft\")}\n // onClick={this.handleSubmit}\n >\n Save To Draft\n </Button>\n )}\n </div>\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </div>\n );\n};\n","import Button from \"@material-ui/core/Button\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { useForm } from \"react-final-form\";\n\nconst useStyles = makeStyles({\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n});\nexport const ProjectFormButton = ({ activeStep, handleSubmit, handleBack, steps, isDraft }) => {\n const classes = useStyles();\n const form = useForm();\n return (\n <div className={classes.actionToolbar}>\n {activeStep > 0 && (\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={handleBack}\n >\n Previous\n </Button>\n )}\n {!(activeStep === steps.length - 1) && (\n <Button\n type=\"button\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={() => {\n // setDraftStatus(prev => !prev)\n form.change('isNext', true)\n handleSubmit()\n }}\n >\n Next\n </Button>\n )}\n {!(activeStep === steps.length - 1) && (isDraft == true) && (\n <Button\n type=\"button\"\n variant=\"contained\"\n color=\"secondary\"\n size=\"large\"\n style={{ marginRight: 25 }}\n onClick={() => {\n // setDraftStatus(prev => !prev)\n form.change('isDraft', true)\n handleSubmit()\n }}\n >\n Save To Draft\n </Button>\n )}\n {activeStep === steps.length - 1 && (\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n // disabled={submitting}\n >\n Submit\n </Button>\n )}\n </div>\n )\n}\n","\nimport { Box, Divider, useMediaQuery } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport arrayMutators from \"final-form-arrays\";\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport {\n AutocompleteInput,\n DateInput,\n Loading,\n TextInput,\n maxLength, required,\n useDataProvider,\n useRefresh\n} from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport palette from \"../../framework/theme/palette\";\nimport { impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport { ProjectFormButton } from \"./ProjectFormButton\";\nimport { Alert, Snackbar } from \"@mui/material\";\n// import CustomDrawer from \"../customComponents/customDrawer\";\n\nconst useStyles = makeStyles({\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n deleteIcon: {\n color: palette.customsColor.amber,\n '&:hover': {\n color: '#f06548cc'\n }\n },\n removeMileston: {\n color: palette.customsColor.amber,\n '&:hover': {\n color: '#f06548cc'\n }\n },\n});\n\nexport const CreateMilestone = ({ record, activeStep, handleBack, handleNext, steps, setIsUpdateProjectDetails }) => {\n const [initialValues, setInitialValues] = React.useState();\n const user = TokenStorage.getUserDetails();\n const dataProvider = useDataProvider();\n\n const refresh = useRefresh();\n const classes = useStyles();\n const localProjectDetails = TokenStorage.getProjectDetails()\n const [milestoneLoading, setMilestoneLoading] = React.useState(true);\n const [projectPhasesArray, setProjectPhasesArray] = React.useState([])\n const resource = \"Milestone\";\n const { isImpersonating } = user ? user : {};\n const [draftStatus, setDraftStatus] = React.useState(false)\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n React.useEffect(() => {\n if (localProjectDetails !== undefined && localProjectDetails !== null) {\n dataProvider\n .getOne(\"Project\", { id: localProjectDetails?.id })\n .then((response) => {\n setProjectPhasesArray(response.data);\n })\n .catch((error) => {\n console.log(error)\n });\n }\n\n }, [])\n\n const handleSteper = async (isNext) => {\n const stepers = {\n id: localProjectDetails.id,\n isDraft: true,\n stepCount: 2\n }\n dataProvider\n .postRequest('Project', {\n queryType: \"updateStep\",\n data: stepers,\n })\n .then((response) => {\n // form.restart();\n console.log(response)\n // onClose(false, true);\n if (!isNext) {\n TokenStorage.clearProjectData()\n impersonatedURL(isImpersonating, '#/project?impersonated')\n }\n handleNext(response.data)\n // refresh();\n // createMilestoneView()\n })\n .catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n const onSubmit = (values, form, status) => {\n // console.log(status, form)\n // console.log(values)\n // const mst = values.milestones.filter(itm => itm != null)\n const isNext = values.isNext;\n const milestoneData = {\n projectId: +localProjectDetails.id,\n milestones: values.milestones.filter(milestone => Boolean(milestone)).map(milestone => ({\n name: milestone.name,\n projectPhase: milestone.projectPhase,\n milestoneDate: milestone.milestoneDate,\n }))\n }\n dataProvider\n .postRequest(resource, {\n queryType: \"update\",\n data: milestoneData,\n })\n .then(async (response) => {\n // form.restart();\n console.log(response)\n // onClose(false, true);\n // console.log(status)\n // handleNext(response.data)\n if (!isNext) {\n await handleSteper(isNext)\n }\n else {\n handleNext(response.data)\n }\n\n // refresh();\n // createMilestoneView()\n })\n .catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n };\n\n const validate = () => { };\n\n React.useEffect(() => {\n console.log('projectPhases1', record);\n /* if (record && record.id) {\n const projectPhases = record.projectPhases ? record.projectPhases : null;\n console.log('projectPhases_create', projectPhases);\n setInitialValues({ milestones: [{}], projectPhases: projectPhases })\n } */\n createMilestoneView();\n }, [projectPhasesArray]);\n\n const createMilestoneView = React.useCallback(\n async () => {\n if (localProjectDetails && localProjectDetails.id) {\n const milestones = await dataProvider\n .getList(\"Milestone\", {\n pagination: { page: 1, perPage: 25 },\n sort: { field: \"id\", order: \"ASC\" },\n filter: { projectId: localProjectDetails.id },\n })\n milestones.data = milestones.data ? milestones.data.map(milestone => ({\n name: milestone.name,\n projectPhase: milestone.projectPhase,\n milestoneDate: new Date(milestone.milestoneDate),\n })) : null;\n\n // const projectPhases = record.projectPhases ? record.projectPhases : null;\n\n // console.log('projectPhases', projectPhases);\n console.log(projectPhasesArray)\n setInitialValues({ milestones: milestones.data, projectPhases: projectPhasesArray.projectPhases })\n setMilestoneLoading(false)\n }\n },\n [dataProvider, projectPhasesArray],\n )\n\n return (\n <>\n\n {\n !milestoneLoading ? <Box mr={!isSmall && 4}>\n <Form\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={initialValues}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n },\n }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <MilestoneForm\n push={push}\n // onClose={onClose}\n projectStartDate={projectPhasesArray ? projectPhasesArray.startDate : null}\n projectEndDate={projectPhasesArray ? projectPhasesArray.endDate : null}\n projectPhases={initialValues ? initialValues.projectPhases : null}\n milestonesValues={initialValues ? initialValues.milestones : null}\n />\n\n <ProjectFormButton activeStep={activeStep} handleSubmit={handleSubmit} handleBack={handleBack} steps={steps} isDraft={projectPhasesArray?.isDraft} />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </form>\n )}\n />\n </Box> : <Loading />\n }\n </>\n\n );\n};\nconst MilestoneForm = ({ push, onClose, milestonesValues, projectStartDate, projectEndDate, projectPhases }) => {\n const [milestones, setMilestones] = React.useState();\n const form = useForm();\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const validateStartDate = (value, values, index) => {\n try {\n const startDate = value;\n const projectPhase = projectPhases.filter(e => e.name === values.milestones[index].projectPhase);\n\n if (!projectPhase || !(projectPhase.length > 0)) {\n return `Please select a valid Project phase`;\n }\n\n const phaseStartDate = moment(projectPhase[0].startDate).format(\"YYYY-MM-DD\");\n const phaseEndDate = moment(projectPhase[0].endDate).format(\"YYYY-MM-DD\");\n\n if (startDate && moment(startDate).isBefore(projectStartDate.slice(0, 10))) {\n return `should be greater than \"${moment(projectStartDate).format(\"DD/MM/YY\")}\"`;\n }\n\n if (startDate && moment(startDate).isSameOrAfter(projectEndDate.slice(0, 10))) {\n return `should be lesser than \"${moment(projectEndDate).format(\"DD/MM/YY\")}\"`;\n }\n\n if (startDate && !moment(startDate).isBetween(phaseStartDate, phaseEndDate, 'days', true)) {\n return `should be between \"${moment(phaseStartDate).format(\"DD/MM/YY\")}\" and \"${moment(phaseEndDate).format(\"DD/MM/YY\")}\"`;\n }\n\n } catch (e) {\n console.log(e);\n }\n };\n const handleAddMileston = () => {\n push(\"milestones\", undefined);\n milestones.push({})\n // console.log(push)\n // setMilestones([...milestones, {}])\n // setMilestones(prevMilestones => [...prevMilestones, {}]);\n }\n React.useEffect(() => {\n setMilestones(milestonesValues);\n }, [milestonesValues])\n if (milestones)\n return (\n <Box >\n {milestones.map((milestone, index) => (\n Boolean(milestone) && <Box> <Grid key={`${milestone.name}_${index}`} container direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"flex-start\" spacing={!isSmall && 6}>\n\n <Grid item xs={12} lg={3}>\n <Field fullWidth name={`milestones[${index}].name`} component=\"input\">\n {(props) => (\n <TextInput\n fullWidth\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"Milestone Name\"\n validate={[required(), maxLength(255)]}\n // style={{ width: '280px' }}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={3} >\n <Field fullWidth name={`milestones[${index}].projectPhase`} component=\"input\">\n {(props) => (\n <AutocompleteInput\n fullWidth\n variant=\"outlined\"\n label=\"Project Phase\"\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n optionValue=\"name\"\n optionText=\"name\"\n source={props.input.name}\n choices={projectPhases}\n validate={[required()]}\n // style={{ width: '280px' }}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={3}>\n <Field fullWidth name={`milestones[${index}].milestoneDate`} component=\"input\">\n {(props) => (\n <DateInput\n fullWidth\n variant=\"outlined\"\n label=\"Milestone Date\"\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n validate={[\n required(),\n (value, values) =>\n validateStartDate(value, values, index),\n ]}\n // style={{ width: '280px' }}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12} lg={2} style={{ margin: '6px 0' }}>\n <Button\n className={classes.removeMileston}\n variant=\"text\"\n startIcon={<DeleteIcon className={classes.deleteIcon} />}\n onClick={() => {\n milestones[index] = undefined\n form.change(`milestones[${index}]`, undefined)\n setMilestones([...milestones])\n }}\n >\n Remove Milestone\n </Button>\n </Grid>\n\n\n\n </Grid>\n <Box mt={2} mb={2}><Divider /></Box>\n </Box>\n ))}\n <Box style={{ display: 'flex', justifyContent: 'center', }}>\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={handleAddMileston}\n color=\"primary\"\n variant=\"text\"\n >\n Add Milestone\n </Button>\n </Box>\n </Box>\n )\n\n return null;\n}\n\nexport default CreateMilestone;\n","import { Box, Button, Card, Checkbox, useMediaQuery } from \"@material-ui/core\";\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport clsx from \"clsx\";\nimport moment from \"moment\";\nimport { Field, useForm } from \"react-final-form\";\nimport { startEndDatesOfWeeks } from \"../../utils/AppUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n forecastTitle: {\n backgroundColor: \"#F2F2F2\",\n display: \"flex\",\n },\n forecastCard: {\n marginBottom: 30,\n margin: \"0 auto\",\n overflowX: \"auto\",\n width: \"90%\",\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\"\n }\n },\n forecastCardRow: {\n display: \"flex\",\n },\n forecastCardWeek: {\n width: \"20%\",\n fontSize: 14,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"row\",\n [theme.breakpoints.down(\"md\")]: {\n fontSize: 14,\n flexDirection: \"column\",\n },\n textAlign: \"center\",\n },\n forecastRiskContainer: {\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr\",\n placeItems: \"center\",\n },\n forecastRiskBox: {\n width: 100,\n height: 45,\n [theme.breakpoints.down(\"md\")]: {\n minWidth: 64,\n height: 40,\n },\n [theme.breakpoints.down(\"sm\")]: {\n width: 50,\n height: 40,\n },\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n forecastTitleText: {\n fontSize: 16,\n fontWeight: 500,\n fontStyle: \"normal\",\n margin: 0,\n },\n selectedForcast: {\n // margin: '0 10px',\n // width: \"30%\",\n padding: \"4px 4px\",\n boprderRadius: '10px',\n textAlign: 'center',\n \"&.activeRed\": {\n border: '2px solid #EB5757'\n },\n \"&.activeGreen\": {\n border: '2px solid #27AE60'\n },\n \"&.activeAmber\": {\n border: '2px solid #F2994A'\n },\n },\n}));\n\nconst ProjectForecastsInputsContainer = ({ projectForecasts, setProjectForecasts, businessUnitId, isCreate }) => {\n const form = useForm();\n const formValues = form.getState().values;\n const classes = useStyles();\n const isSmallScreen = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const { businessUnitId: mainBu, startDate, endDate } = formValues;\n const firstImpactedBu = formValues.impactedBusinessUnits[0].id\n const handleRiskBtnClick = async (index, risk) => {\n projectForecasts[index].risk = risk;\n projectForecasts[index].week = index + 1;\n // assign same risk for all the higher weeks\n if (isCreate) {\n for (let i = index + 1; i < projectForecasts.length; i++) {\n projectForecasts[i].risk = risk;\n projectForecasts[i].week = i + 1;\n }\n\n }\n form.change(`projectForecasts[${businessUnitId}]`, [...projectForecasts]);\n setProjectForecasts([...projectForecasts]);\n };\n\n const isAllWeeksForecasted = (forecasts) => {\n let isForecasted = true;\n for (let i = 0; i < forecasts.length; i++) {\n if (forecasts[i] && !forecasts[i].risk) {\n isForecasted = false;\n break;\n }\n }\n\n return isForecasted;\n };\n\n const handleSkipForecast = (skip) => {\n if (skip) {\n const formValues = form.getState().values;\n const impactedUnits = formValues.impactedBusinessUnits;\n const weeksCount = startEndDatesOfWeeks(moment(startDate), moment(endDate)).length;\n const mainBuForecasts = formValues.projectForecasts[firstImpactedBu]; // replaced mainBu to firstImpactedBu\n form.batch(() => {\n for (const impactedUnit of impactedUnits) {\n const forecastsLength = formValues.projectForecasts[impactedUnit.id] ? formValues.projectForecasts[impactedUnit.id].length : 0;\n if (isCreate && !(forecastsLength < weeksCount)) {\n continue;\n }\n // set this main bu forecasts to impacted bu\n const impactedForeCasts = mainBuForecasts.map(projectForecast => (\n { ...projectForecast, businessUnitId: impactedUnit.id }\n ));\n form.change(`projectForecasts[${impactedUnit.id}]`, impactedForeCasts);\n }\n });\n // set this main bu forecasts to current bu\n const forecasts = mainBuForecasts.map(projectForecast => (\n { ...projectForecast, businessUnitId: businessUnitId }\n ))\n setProjectForecasts([...forecasts])\n }\n }\n\n return (\n <Box>\n <Card className={classes.forecastCard} elevation={3}>\n <div className={classes.forecastTitle}>\n <div className={classes.forecastCardWeek} style={{ borderRight: \"1px solid #C4C4C4\", padding: 18, marginRight: 5 }}>\n <h6 className={classes.forecastTitleText}>Weeks</h6>\n </div>\n <div className={classes.forecastRiskContainer}>\n <h6 className={classes.forecastTitleText}>HIGH</h6>\n <h6 className={classes.forecastTitleText}>MEDIUM</h6>\n <h6 className={classes.forecastTitleText}>LOW</h6>\n </div>\n </div>\n {projectForecasts.map((projectForecast, index) => (\n <div className={classes.forecastCardRow}>\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", flexDirection: \"column\", width: \"20%\", padding: \"18px\", borderRight: \"1px solid #C4C4C4\", marginRight: 5 }}>\n <Box whiteSpace=\"nowrap\">Week {index + 1}</Box>\n <Box className={classes.forecastCardWeek} >\n <Box whiteSpace=\"nowrap\">\n {moment(projectForecast.startDate).format(\"DD-MMM\")}\n </Box>\n <Box whiteSpace=\"nowrap\">\n {isSmallScreen ? <MoreVertIcon color=\"primary\" sx={{ opacity: .5 }} /> : \" - \"}\n </Box>\n <Box whiteSpace=\"nowrap\">\n {moment(projectForecast.endDate).format(\"DD-MMM\")}\n </Box>\n </Box>\n </Box>\n <div className={classes.forecastRiskContainer}>\n <Box className={clsx(classes.selectedForcast, {\n 'activeRed': projectForecast\n ? projectForecast.risk === \"H\"\n : false\n })}>\n <Button\n className={clsx(classes.forecastRiskBox, {\n \"active\": projectForecast\n ? projectForecast.risk === \"H\"\n : false,\n \"risk-high\": true,\n })}\n onClick={() => handleRiskBtnClick(index, \"H\")}\n />\n </Box>\n\n <Box className={clsx(classes.selectedForcast, {\n 'activeAmber': projectForecast\n ? projectForecast.risk === \"M\"\n : false\n })}>\n <Button\n className={clsx(classes.forecastRiskBox, {\n \"active\": projectForecast\n ? projectForecast.risk === \"M\"\n : false,\n \"risk-medium\": true,\n })}\n onClick={() => handleRiskBtnClick(index, \"M\")}\n />\n </Box>\n\n <Box className={clsx(classes.selectedForcast, {\n 'activeGreen': projectForecast\n ? projectForecast.risk === \"L\"\n : false\n })}>\n <Button\n className={clsx(classes.forecastRiskBox, {\n \"active\": projectForecast\n ? projectForecast.risk === \"L\"\n : false,\n \"risk-low\": true,\n })}\n onClick={() => handleRiskBtnClick(index, \"L\")}\n />\n </Box>\n\n </div>\n </div>\n ))}\n </Card>\n <Box>\n <Field name=\"projectForecasts\" subscription={{ value: true }}>\n {({ input: { value } }) =>\n value && value[firstImpactedBu] && value[firstImpactedBu].length > 0 ?\n (\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"center\">\n <FormGroup row>\n <FormControlLabel control={<Checkbox\n color=\"primary\"\n source=\"skip_forecast\"\n disabled={!isAllWeeksForecasted(value[firstImpactedBu])}\n onChange={handleSkipForecast}\n />} label=\"Copy to all impacted Business Unit's forecast\" />\n </FormGroup>\n </Box>\n )\n : null\n }\n </Field>\n </Box>\n </Box>\n );\n};\n\nexport default ProjectForecastsInputsContainer;","import { Typography } from \"@material-ui/core\";\nimport ButtonBase from \"@material-ui/core/ButtonBase\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport { Loading, useDataProvider, useNotify, } from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport dataProvider from \"../../framework/dataProvider\";\nimport { impersonatedURL, onFailureMessage, startEndDatesOfWeeks } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport { ProjectFormButton } from \"./ProjectFormButton\";\nimport ProjectForecastsInputsContainer from \"./projectForecastsInputsContainer\";\nimport { Alert, Snackbar } from \"@mui/material\";\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n subTitle: {\n marginBottom: 16,\n },\n forecastTitle: {\n backgroundColor: \"#F2F2F2\",\n display: \"flex\",\n },\n forecastCard: {\n marginBottom: 30,\n margin: \"0 auto\",\n width: \"90%\",\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\"\n }\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n inputWidthChange: {\n width: 322,\n [theme.breakpoints.down(\"xs\")]: {\n width: '83vw',\n }\n },\n inputWidthMargin: {\n // marginRight: 100,\n },\n referenceInputWidth: {\n width: 350,\n [theme.breakpoints.down(\"xs\")]: {\n width: '100%'\n }\n },\n gridBoxMargin: {\n marginBottom: 12,\n width: 350,\n },\n phaseDateWidth: {\n width: 132,\n [theme.breakpoints.down(\"xs\")]: {\n width: '35vw'\n },\n },\n gridContainer: {\n display: \"grid\",\n gridColumnGap: 100,\n [theme.breakpoints.up(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr 1fr\",\n },\n [theme.breakpoints.between(\"sm\", \"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n forecastTopDiv: {\n width: \"95%\",\n },\n projectNoteText: {\n fontSize: 12,\n fontStyle: \"normal\",\n fontWeight: 400,\n marginBottom: 30,\n },\n tabsComponentDiv: {\n marginTop: 20,\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n}));\n\nconst MyTabScrollButton = React.forwardRef((props, ref) => {\n const { direction, ...other } = props;\n\n return (\n <ButtonBase\n component=\"div\"\n ref={ref}\n style={{\n opacity: other.disabled ? 0 : 1, \"&:focus\": {\n backgroundColor: '#0b5bdb',\n },\n }}\n {...other}\n >\n {direction === \"left\" ? (\n <ArrowBackIosNewIcon sx={{\n backgroundColor: '#00A0D9', textAlign: 'center', color: '#fff', marginRight: '10px', borderRadius: '50%', fontSize: '30px', padding: '5px', \"&:focus\": {\n backgroundColor: '#0b5bdb',\n },\n \"&:hover\": {\n backgroundColor: '#0486b5',\n },\n }} />\n ) : (\n <ArrowForwardIosIcon sx={{\n backgroundColor: '#00A0D9', textAlign: 'center', color: '#fff', marginLeft: '10px', borderRadius: '50%', fontSize: '30px', padding: '5px', \"&:focus\": {\n backgroundColor: '#0b5bdb',\n },\n \"&:hover\": {\n backgroundColor: '#0486b5',\n },\n }} />\n )}\n </ButtonBase>\n );\n});\n\nconst StyledTabs = withStyles({\n indicator: {\n display: \"flex\",\n justifyContent: \"center\",\n backgroundColor: \"transparent\",\n height: 5,\n \"& > span\": {\n maxWidth: 80,\n width: \"100%\",\n backgroundColor: \"#4F4F4F\"\n },\n },\n})((props) => <Tabs style={{ width: '85vw' }} {...props} ScrollButtonComponent={MyTabScrollButton} TabIndicatorProps={{ children: <span /> }} />);\n\nconst StyledTab = withStyles((theme) => ({\n root: {\n textTransform: \"none\",\n color: \"#000\",\n fontWeight: theme.typography.fontWeightRegular,\n fontSize: theme.typography.pxToRem(15),\n marginRight: 60,\n \"&:focus\": {\n opacity: 1,\n },\n minWidth: 97,\n paddingLeft: 0,\n paddingRight: 0,\n },\n}))((props) => <Tab disableRipple {...props} />);\n\n\nconst ForecastToolbar = ({ activeStep, handleBack, handleNext, steps }) => {\n const user = TokenStorage.getUserDetails();\n const { isImpersonating } = user ? user : {};\n const classes = useStyles();\n const [project, setProject] = React.useState();\n const localProjectDetails = TokenStorage.getProjectDetails()\n const [value, setValue] = React.useState(0);\n const [valuedUnits, setvaluedUnits] = React.useState([]);\n const dataProvider = useDataProvider();\n const [initialValues, setInitialValues] = React.useState();\n \n\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n name: \"\",\n type: \"\"\n })\n const {vertical, horizontal} = anchorOrigin;\n const getProject = (id) => {\n return dataProvider\n .getOne(\"Project\", { id })\n .then((response) => response.data);\n };\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({name,type})\n setSnackbarOpen(true);\n };\n \n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n \n setSnackbarOpen(false);\n };\n \n React.useEffect(() => {\n getProject(localProjectDetails?.id)\n .then((data) => {\n setProject(data);\n setvaluedUnits(data.impactedBusinessUnits)\n })\n dataProvider\n .getList(\"ProjectForecast\", {\n pagination: { page: 1, perPage: 1000 },\n sort: { field: \"endDate\", order: \"ASC\" },\n filter: { projectId: localProjectDetails?.id },\n }).then(response => {\n\n const uniqueBusinessUnitIds = [...new Set(response.data.map(entry => entry.businessUnitId))];\n\n let forecasts = []\n\n uniqueBusinessUnitIds.map((id) => {\n let buBaseForcasts = []\n response.data.map((item) => {\n if (id === item.businessUnitId) {\n buBaseForcasts.push(item)\n }\n })\n return forecasts[id] = buBaseForcasts\n })\n console.log(\"forecasts\", forecasts);\n setInitialValues({ projectForecasts: forecasts, isCreate: !(forecasts.length > 0) })\n })\n }, []);\n\n const ForecastPanel = (props) => {\n const { children, value, index } = props;\n return <React.Fragment>{value === index && <React.Fragment>{children}</React.Fragment>}</React.Fragment>;\n };\n const handleSteper = async (values) => {\n const stepers = {\n id: localProjectDetails.id,\n isDraft: false,\n stepCount: 0\n }\n dataProvider\n .postRequest('Project', {\n queryType: \"updateStep\",\n data: stepers,\n })\n .then((response) => {\n // form.restart();\n console.log(response)\n // onClose(false, true);\n // handleNext(response.data)\n\n TokenStorage.clearProjectData()\n impersonatedURL(isImpersonating, '#/project?impersonated')\n\n // handleNext(response.data)\n // TokenStorage.clearProjectData()\n // impersonatedURL(isImpersonating, '#/project?impersonated')\n // refresh();\n // createMilestoneView()\n })\n .catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n const onSubmit = (values, form) => {\n\n const forecasts = values.projectForecasts.flat()\n const projectForecasts = forecasts.map(({ id, ...rest }) => ({ ...rest, clientId: user.id }))\n console.log(projectForecasts)\n\n dataProvider\n .postRequest(\"ProjectForecast\", {\n queryType: \"create\",\n data: {\n projectId: project.id,\n clientId: user.id,\n projectForecasts: projectForecasts\n }\n }).then(async (response) => {\n console.log(response)\n await handleSteper(values)\n handleSnackbarOpen(\"ProjectForecast updated successfully!\", \"success\")\n })\n .catch(error => {\n handleSnackbarOpen(error.message, \"warning\")\n });\n }\n\n return (\n <>\n {\n project && <Form\n\n onSubmit={onSubmit}\n initialValues={initialValues}\n validate={(values) => {\n const errors = {};\n // const weeksCount = getWeeksCount(moment(values.startDate), moment(values.endDate));\n const weeksCount = moment(values.endDate).diff(moment(values.startDate), 'week');\n const impactedBuCount = values.impactedBusinessUnits ? values.impactedBusinessUnits.length : 0;\n const forecastsValues = values && values.projectForecasts ? values.projectForecasts.flat() : null;\n if (forecastsValues) {\n if (forecastsValues.length < (weeksCount * (impactedBuCount))) {\n errors.projectForecasts = \"Please fill all the project forecast details\";\n // console.log(errors)\n } else {\n for (let i = 0; i < forecastsValues.length; i++) {\n if (\n forecastsValues[i] &&\n !forecastsValues[i].risk\n ) {\n errors.projectForecasts =\n \"Please fill all the project forecast details\";\n // console.log(errors)\n break;\n }\n }\n }\n } else {\n errors.projectForecasts =\n \"Please fill all the project forecast details\";\n // console.log(errors)\n }\n // console.log(errors)\n return errors;\n }}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit}>\n <div className={classes.tabsComponentDiv} >\n <StyledTabs\n value={value}\n onChange={handleChange}\n aria-label=\"styled tabs example\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {/* <StyledTab label={`${project.businessUnit.name}`} /> */}\n {valuedUnits.length > 0\n ? valuedUnits.map((unit) => (\n <StyledTab key={unit.id} label={`${unit.name}`}></StyledTab>\n ))\n : null}\n </StyledTabs>\n <Typography className={classes.padding} />\n {/* <ForecastPanel value={value} index={0}>\n <h6 className={classes.projectNoteText}>\n Note : Click / tap on the color brick to select the impact. You can\n change the severity of any week by selecting color brick of that week.\n {\n initialValues && initialValues.isCreate && \"Please note that the followed bricks will change to same impact which is selected.\"\n }\n\n </h6>\n <ProjectForecastsInputs businessUnitId={project.businessUnitId} project={project} />\n </ForecastPanel> */}\n {valuedUnits.length > 0\n ? valuedUnits.map((unit, index) => (\n <ForecastPanel key={unit.id} value={value} index={index}>\n <h6 className={classes.projectNoteText}>\n Note : Click / tap on the color brick to select the impact. You\n can change the severity of any week by selecting color brick of\n that week.\n {\n initialValues && initialValues.isCreate && \"Please note that the followed bricks will change to same impact which is selected.\"\n }\n </h6>\n <ProjectForecastsInputs businessUnitId={unit.id} project={project} />\n </ForecastPanel>\n ))\n : null}\n\n </div>\n <Field\n name=\"projectForecasts\"\n subscription={{ touched: true, error: true }}\n render={({ meta: { touched, error } }) =>\n touched && error ? (\n <span style={{ color: \"#d32f2f\" }}>{error}</span>\n ) : null\n }\n />\n <ProjectFormButton activeStep={activeStep} handleSubmit={handleSubmit} handleBack={handleBack} steps={steps} />\n </form>\n )}\n />\n }\n\n <Snackbar open={snackbarOpen} autoHideDuration={3000} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.name}\n </Alert>\n </Snackbar>\n </>\n );\n};\n\nconst ProjectForecastsInputs = ({ businessUnitId: bu, project }) => {\n const user = TokenStorage.getUserDetails();\n const form = useForm();\n const formValues = form.getState().values;\n const savedForecasts = formValues && formValues.projectForecasts ? formValues.projectForecasts[bu] : null;\n const [projectForecasts, setProjectForecasts] = React.useState(savedForecasts);\n const isCreate = formValues.isCreate\n const { startDate, endDate, businessUnitId, impactedBusinessUnits } = project\n form.change(\"startDate\", startDate)\n form.change(\"endDate\", endDate)\n form.change(\"businessUnitId\", businessUnitId)\n form.change(\"impactedBusinessUnits\", impactedBusinessUnits)\n const availableForecasts = formValues.projectForecasts ? formValues.projectForecasts[bu] : null;\n const [loading, setLoading] = React.useState();\n\n React.useEffect(() => {\n setLoading(true);\n if (!availableForecasts || (availableForecasts && availableForecasts.length === 0)) {\n dataProvider\n .getList(\"ProjectForecast\", {\n pagination: { page: 1, perPage: 1000 },\n sort: { field: \"endDate\", order: \"ASC\" },\n filter: { projectId: project.id, businessUnitId: bu },\n })\n .then(({ data }) => {\n let forecasts = data && data.length ? data : [];\n let weeks = startEndDatesOfWeeks(moment(startDate), moment(endDate));\n const forecastsCount = forecasts.length;\n const weeksCount = weeks.length;\n const updatedForecasts = forecasts.map(({ id, ...rest }) => ({ ...rest, clientId: user.id }))\n if (forecastsCount > weeksCount) {\n forecasts.splice(weeksCount, forecastsCount);\n } else if (forecastsCount < weeksCount) {\n for (let i = forecastsCount; i < weeksCount; i++) {\n updatedForecasts[i] = {\n ...weeks[i],\n businessUnitId: bu,\n projectId: project.id,\n clientId: user.id\n }\n }\n }\n setProjectForecasts(updatedForecasts)\n form.change(`projectForecasts[${bu}]`, updatedForecasts);\n setLoading(false);\n })\n .catch(error => {\n console.log(error)\n setProjectForecasts(null)\n setLoading(false);\n })\n } else {\n setLoading(false);\n }\n }, [bu, project]);\n\n if (loading) return <Loading />\n if (projectForecasts) return <ProjectForecastsInputsContainer\n isCreate={isCreate}\n projectForecasts={projectForecasts}\n setProjectForecasts={setProjectForecasts}\n businessUnitId={bu}\n />;\n\n return null;\n};\n\nexport default ForecastToolbar;","import {\n Box, Button, Divider,\n Grid,\n Step,\n StepButton,\n StepLabel,\n Stepper,\n Tooltip,\n Typography,\n useMediaQuery,\n withStyles\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport _ from \"lodash\";\nimport React, { useEffect, useState } from 'react';\nimport {\n AutocompleteArrayInput, AutocompleteInput, DateInput,\n FormDataConsumer,\n Loading,\n RadioButtonGroupInput,\n ReferenceArrayInput, ReferenceInput,\n TextInput,\n Title,\n maxLength,\n required,\n useDataProvider,\n usePermissions,\n useRefresh\n} from \"react-admin\";\nimport { Form, useForm } from \"react-final-form\";\nimport { PROJECT_DRIVERS_MASTER_DATA_ID, PROJECT_PHASE_MASTER_DATA_ID, STATUS_INACTIVE_ACTIVE_CHOICES } from \"../../framework/constants\";\nimport palette from \"../../framework/theme/palette\";\nimport { handleProjectInfo, impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\nimport { EnvironmentAssessment } from \"../impactAssesment/environmentAssessment\";\nimport { ImpactAssesment } from \"../impactAssesment/impactAssesment\";\nimport { ProjectFormButton } from \"./ProjectFormButton\";\nimport CreateMilestone from \"./createMilestone\";\nimport ForecastToolbar from \"./projectForecasts\";\nimport { Alert, Snackbar } from \"@mui/material\";\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n \"&.MuiTableCell-root\": {\n padding: 50,\n }\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n },\n labelDisbale: {\n display: 'none'\n },\n subTitle: {\n margin: '16px',\n },\n inputWidthMargin: {\n marginRight: 30,\n },\n referenceInputWidth: {\n width: 350,\n },\n stepperSection: {\n backgroundColor: palette.customsColor.creamium,\n padding: \"14px 16px\",\n borderRadius: \"5px\"\n // boxShadow: \"0 0 10px rgba(0,0,0,0.1)\"\n },\n referenceInputWidthOvr: {\n width: '100%',\n // paddingRight: '15px'\n },\n phaseDateWidth: {\n [theme.breakpoints.down(\"xs\")]: {\n width: \"100%\"\n }\n },\n phaseDateInput: {\n marginLeft: \"15px\",\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: \"0px\"\n }\n },\n bottomCardTitle: {\n backgroundColor: \"#E0E0E0\",\n },\n inputWidthChange: {\n width: '33vw',\n [theme.breakpoints.down(\"xs\")]: {\n width: '83vw',\n }\n },\n textAreaInput: {\n minHeight: '80px',\n lineHeight: 1.5\n },\n rowHeading: {\n fontFamily: \"Roboto\",\n fontStyle: \"normal\",\n fontWeight: \"normal\",\n fontSize: 16,\n color: \"#4F4F4F\",\n },\n forecastRiskBox: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: 60,\n height: 30,\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n forecastRiskBoxCSR: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: \"100%\",\n height: 20,\n opacity: 0.3,\n // borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n changeImpactBox: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: \"#FFFFFF\",\n width: 200,\n height: 30,\n opacity: 0.3,\n borderRadius: 4,\n \"&.active\": {\n opacity: 1,\n },\n \"&.risk-high\": {\n backgroundColor: \"#EB5757\",\n },\n \"&.risk-medium\": {\n backgroundColor: \"#F2994A\",\n },\n \"&.risk-low\": {\n backgroundColor: \"#27AE60\",\n },\n },\n borderRight: {\n borderRight: \"2px solid #C4C4C4\",\n },\n borderBottom: {\n borderBottom: \"2px solid #C4C4C4\",\n },\n borderRightCSR: {\n borderRight: \"2px solid white\",\n zIndex: -1\n },\n borderBottomCSR: {\n borderBottom: \"2px solid white\",\n },\n tableHeading1: {\n backgroundColor: \"#4473c4\",\n },\n tableHeading2: {\n backgroundColor: \"#F2F2F2\",\n },\n responsiveBox: {\n [theme.breakpoints.down('sm')]: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'start',\n alignItems: 'start',\n marginBottom: '5px',\n marginLeft: '0px',\n },\n },\n responsiveTable: {\n [theme.breakpoints.down('sm')]: {\n width: `calc(100vw - 63px)`,\n },\n },\n columnFreezed: {\n position: 'sticky',\n left: 0,\n // zIndex: 999,\n borderRight: '2px solid #C4C4C4',\n backgroundColor: '#F2F2F2'\n },\n columnFreezed1: {\n position: 'sticky',\n left: 0,\n // zIndex: 2000,\n borderRight: '2px solid #C4C4C4',\n borderBottom: '2px solid #C4C4C4',\n backgroundColor: '#fff'\n },\n columnLowPriority: {\n borderRight: \"2px solid #C4C4C4\",\n zIndex: -1,\n },\n gridContainer: {\n padding: '0 10px',\n margin: '0 10px',\n display: \"grid\",\n gridColumnGap: 100,\n [theme.breakpoints.up(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr 1fr\",\n },\n [theme.breakpoints.between(\"sm\", \"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n stepperHeader: {\n background: \"none\",\n padding: '10px 0',\n marginBottom: 60,\n [theme.breakpoints.down(\"sm\")]: {\n overflowX: \"auto\",\n height: \"100%\"\n },\n borderBottom: '3px solid #dadde9',\n '& .MuiStepper-horizontal': {\n overflowX: 'auto'\n },\n },\n\n activeStep: {\n color: '#f0f',\n },\n selectedAssessment: {\n margin: '0 5px',\n padding: \"3px 3px 3px 3px\",\n\n textAlign: 'center',\n \"&.activeRed\": {\n border: '2px solid #EB5757',\n boprderRadius: '10px',\n },\n \"&.activeGreen\": {\n border: '2px solid #27AE60',\n boprderRadius: '10px',\n },\n \"&.activeAmber\": {\n border: '2px solid #F2994A',\n boprderRadius: '10px',\n },\n },\n}));\n\nfunction getSteps() {\n return [\n \"Project Details\",\n \"Milestone\",\n \"Change Impact\",\n \"Change Environment\",\n \"Heatmap\"\n ];\n}\nconst HtmlTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: '#f5f5f9',\n color: 'rgba(0, 0, 0, 0.87)',\n maxWidth: 220,\n fontSize: theme.typography.pxToRem(12),\n border: '1px solid #dadde9',\n },\n}))(Tooltip);\nfunction getStepContent(step, handleBack, handleNext, steps, isUpdateProjectDetails, setIsUpdateProjectDetails, setActiveStep) {\n switch (step) {\n case 0:\n return <ProjectDetails\n activeStep={step}\n handleBack={handleBack}\n handleNext={handleNext}\n steps={steps}\n setIsUpdateProjectDetails={setIsUpdateProjectDetails}\n setActiveStep={setActiveStep}\n />;\n case 1:\n return <CreateMilestone\n record={isUpdateProjectDetails}\n activeStep={step}\n handleBack={handleBack}\n handleNext={handleNext}\n steps={steps}\n setIsUpdateProjectDetails={setIsUpdateProjectDetails}\n // projectPhases={projectPhases}\n // // assessmentTypes={sectionData.assessmentTypes}\n />\n case 2:\n return <ImpactAssesment record={isUpdateProjectDetails}\n activeStep={step}\n handleBack={handleBack}\n handleNext={handleNext}\n steps={steps}\n setIsUpdateProjectDetails={setIsUpdateProjectDetails} />\n case 3:\n return <EnvironmentAssessment record={isUpdateProjectDetails}\n activeStep={step}\n handleBack={handleBack}\n handleNext={handleNext}\n steps={steps}\n setIsUpdateProjectDetails={setIsUpdateProjectDetails} />\n\n case 4:\n return <ForecastToolbar\n activeStep={step}\n handleBack={handleBack}\n handleNext={handleNext}\n steps={steps} />\n default:\n return \"unknown step\";\n }\n}\nexport const ProjectCreate = (props) => {\n // console.log(props)\n const classes = useStyles();\n const [initialValues, setInitialValues] = useState({})\n const user = TokenStorage.getUserDetails();\n const getPorject = TokenStorage.getProjectDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n const [usesss, setNewUser] = useState(['sdklfjasld'])\n const { loading: loadingPermissions, permissions } = usePermissions();\n const [activeStep, setActiveStep] = useState(0);\n const [skippedSteps, setSkippedSteps] = useState([]);\n const steps = getSteps();\n const [completed, setCompleted] = React.useState({});\n const [isUpdateProjectDetails, setIsUpdateProjectDetails] = React.useState({});\n const [businessUnitId, setBusinessUnitId] = React.useState();\n const localProjectDetails = TokenStorage.getProjectDetails()\n const [showProjectInfo, setShowProjectInfo] = useState(\"\");\n const [proojectExists, setProjectExits] = useState({})\n const dataProvider = useDataProvider();\n const handleNext = (data) => {\n setActiveStep(activeStep + 1);\n };\n\n const handleBack = () => {\n setActiveStep(activeStep - 1);\n };\n const handleStep = (step) => () => {\n setActiveStep(step);\n };\n\n useEffect(() => {\n if (getPorject?.id) {\n handleProjectInfo(getPorject, activeStep, setShowProjectInfo)\n }\n }, [activeStep])\n\n React.useEffect(() => {\n if (localProjectDetails !== undefined && localProjectDetails !== null) {\n dataProvider\n .getOne(\"Project\", { id: localProjectDetails?.id })\n .then((response) => {\n console.log(response.data)\n setActiveStep(response.data.stepCount)\n setProjectExits(response.data)\n\n })\n .catch((error) => {\n console.log(error)\n });\n }\n\n }, [])\n return (\n <WithPermission resource=\"Project\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title className={classes.title} title={`${getPorject ? \"Edit Project\" : \"Create Project\"}`} />\n <Typography style={{ padding: '0 0 10px 0', margin: \"0 0 10px 0\" }}>{showProjectInfo}</Typography>\n <div className={classes.stepperSection}>\n\n\n <Stepper alternativeLabel nonLinear activeStep={activeStep} className={classes.stepperHeader}>\n {steps.map((step, index) => {\n return (\n <Step key={index}>\n {\n (!proojectExists?.isDraft) && (proojectExists?.status) ? <StepButton onClick={handleStep(index)} completed={completed[index]}>\n {step}\n </StepButton> : <StepLabel>{step}</StepLabel>\n }\n\n {/* <StepButton color=\"#f0f\" onClick={handleStep(index)} className={activeStep === index ? classes.activeStep : ''}>\n {step}\n </StepButton> */}\n {/* <StepLabel>{step}</StepLabel> */}\n {/* <StepLabel {...labelProps}>{step}</StepLabel> */}\n </Step>\n );\n })}\n </Stepper>\n\n {activeStep === steps.length ? (\n <Typography variant=\"h3\" align=\"center\">\n Thank You\n </Typography>\n ) : (\n <div>\n {getStepContent(activeStep, handleBack, handleNext, steps, isUpdateProjectDetails, setIsUpdateProjectDetails, setActiveStep)}\n </div>\n\n )}\n </div>\n </WithPermission>\n )\n}\n\nconst ProjectDetails = ({ activeStep, handleBack, handleNext, steps, setIsUpdateProjectDetails, setActiveStep }) => {\n const classes = useStyles();\n const user = TokenStorage.getUserDetails();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const [projectDriverChoices, setProjectDriverChoices] = React.useState();\n const [projectDriversLoading, setProjectDriversLoading] = React.useState();\n const [driverName, setDriverName] = React.useState();\n const dataProvider = useDataProvider();\n\n const [singleProject, setSingleProject] = React.useState({});\n const [showImpBus, setShowImpBus] = React.useState(false);\n const localProjectDetails = TokenStorage.getProjectDetails()\n const [projectId, setProjectId] = React.useState();\n const [projectPhases, setProjectPhases] = React.useState();\n const [projectPhasesLoading, setProjectPhasesLoading] = React.useState(false);\n const [projectPhasesError, setProjectPhasesError] = React.useState(false);\n const [projectInfo, setProjectInfo] = React.useState(\"\");\n const [loading, setLoading] = React.useState(false);\n const [pstatus, setPstatus] = React.useState(\"\");\n const [cstatus, setCtatus] = React.useState(\"\");\n const [changeStatusError, setChangeStatusError] = useState(\"\");\n const [projectStatusError, setProjectStatusError] = useState(\"\");\n const refresh = useRefresh();\n const resource = \"Project\";\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const { isImpersonating } = user ? user : {};\n\n React.useEffect(() => {\n setProjectPhasesLoading(true);\n dataProvider\n .getOne(\"MasterData\", { id: PROJECT_PHASE_MASTER_DATA_ID })\n .then((response) => {\n setProjectPhases(response.data.masterDataValues);\n // setNewProjectPhases(response.data.masterDataValues);\n setProjectPhasesLoading(false);\n })\n .catch((error) => {\n console.log(error)\n handleSnackbarOpen(\"Project phases are unavailable\", \"warning\");\n setProjectPhasesError(error.message);\n setProjectPhasesLoading(false);\n });\n }, []);\n\n React.useEffect(() => {\n if (localProjectDetails !== undefined && localProjectDetails !== null) {\n dataProvider\n .getOne(\"Project\", { id: localProjectDetails?.id })\n .then((response) => {\n console.log(response.data)\n const impactedBusinessUnits = _.map(\n response.data.impactedBusinessUnits,\n \"id\"\n );\n setSingleProject({\n ...response.data,\n impactedBusinessUnits,\n });\n console.log(impactedBusinessUnits)\n setCtatus(response.data.changeStatus)\n setPstatus(response.data.projectStatus)\n // setActiveStep(response.data.stepCount)\n response.data.businessUnitId ? setShowImpBus(true) : setShowImpBus(false)\n\n })\n .catch((error) => {\n console.log(error)\n });\n }\n\n }, [])\n const handleSteper = async (params, isNext) => {\n const stepers = {\n id: params.id,\n isDraft: true,\n stepCount: 1\n }\n dataProvider\n .postRequest(resource, {\n queryType: \"updateStep\",\n data: stepers,\n })\n .then((response) => {\n // form.restart();\n console.log(response)\n // onClose(false, true);\n if (!isNext) {\n TokenStorage.clearProjectData()\n impersonatedURL(isImpersonating, '#/project?impersonated')\n }\n handleNext(response.data)\n // refresh();\n // createMilestoneView()\n })\n .catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n const validate = (values) => {\n\n }\n const onSubmit = (values, form) => {\n const phases =\n values.projectPhases && values.projectPhases.length > 0\n ? values.projectPhases\n .filter((x) => x && x.endDate != null && x.endDate != \"\")\n .map((projectPhase, index) => ({\n name: projectPhases[index].name,\n startDate: projectPhase.startDate,\n endDate: projectPhase.endDate,\n }))\n : null;\n values.projectStatus = pstatus;\n values.changeStatus = cstatus;\n // values.isDraft = true;\n\n if (pstatus === '') {\n setProjectStatusError(\"required\")\n\n }\n if (cstatus === \"\") {\n setChangeStatusError(\"required\")\n\n }\n if (values?.id !== undefined && (pstatus !== '' && cstatus !== '')) {\n const { isNext, ...projectValues } = values;\n dataProvider\n .update(resource, {\n data: {\n ...projectValues,\n projectPhases: phases,\n },\n }).then(async (response) => {\n // console.log(response)\n\n setIsUpdateProjectDetails(response.data)\n if (!isNext) {\n await handleSteper(response.data, values)\n }\n else {\n handleNext(response.data)\n }\n\n }).catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n else if (values?.id == undefined && pstatus !== '' && cstatus !== '') {\n values.isDraft = true;\n const { isNext, ...projectValues } = values;\n dataProvider\n .create(resource, {\n data: {\n ...projectValues,\n projectPhases: phases,\n },\n })\n .then(async (response) => {\n // form.restart();\n // onClose(false);\n console.log(response)\n // refresh();\n TokenStorage.storeProjectDetails(JSON.stringify(response.data))\n values.id = response.data.id\n setIsUpdateProjectDetails(response.data)\n // handleNext(values)\n await handleSteper(response.data, isNext)\n\n })\n .catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n\n\n };\n const handleChange = (event) => {\n // setValue(event.target.value);\n setPstatus(event.target.value)\n };\n const validateStartDate = (startDate, values) => {\n const endDate = values.endDate;\n if (startDate && endDate && startDate >= endDate) {\n return \"start date can not be greater than end date\";\n }\n };\n\n const validateEndDate = (endDate, values) => {\n const startDate = values.startDate;\n if (endDate && startDate && endDate <= startDate) {\n return \"end date can not be lesser than start date\";\n }\n };\n\n const validateGoLiveDate = (goLiveDate, values) => {\n const startDate = values.startDate;\n const endDate = values.endDate;\n if (goLiveDate < startDate || goLiveDate > endDate) {\n return \"Go live Date should be in between start date and end date. \";\n }\n };\n\n const handleBuChange = () => {\n console.log(showImpBus);\n setShowImpBus(true);\n console.log(showImpBus);\n }\n\n React.useEffect(() => {\n dataProvider\n .getOne(\"ProjecDriverMasterData\", { id: PROJECT_DRIVERS_MASTER_DATA_ID })\n .then(({ data }) => {\n setProjectDriverChoices(data.masterDataValues)\n setProjectDriversLoading(false)\n })\n .catch(error => {\n console.log(error);\n setProjectDriversLoading(false)\n setProjectDriverChoices([])\n })\n }, [])\n\n\n const validatePhaseStartDate = (value, values, index) => {\n try {\n const startDate = value ? new Date(value) : null;\n const projectStartDate = values.startDate\n ? new Date(values.startDate)\n : null;\n const endDate = values.projectPhases[index].endDate\n ? new Date(values.projectPhases[index].endDate)\n : null;\n const prePhaseIndex = Math.max(index - 1, 0);\n const prePhaseEndDate = values.projectPhases[prePhaseIndex].endDate\n ? new Date(values.projectPhases[prePhaseIndex].endDate)\n : null;\n if (startDate && endDate && startDate >= endDate) {\n return \"should be lesser than end date\";\n }\n if (startDate && startDate < projectStartDate) {\n return `should be greater than \"${projectStartDate.toLocaleDateString('en-GB')}\"`;\n }\n if (\n index > 0 &&\n startDate &&\n prePhaseEndDate &&\n startDate <= prePhaseEndDate\n ) {\n return `should be greater than \"${prePhaseEndDate.toLocaleDateString('en-GB')}\"`;\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n const validatePhaseEndDate = (value, values, index) => {\n try {\n const endDate = value ? new Date(value) : null;\n const projectEndDate = values.endDate ? new Date(values.endDate) : null;\n const startDate = values.projectPhases[index].startDate\n ? new Date(values.projectPhases[index].startDate)\n : null;\n if (endDate && startDate && endDate <= startDate) {\n return \"should be greater than start date\";\n }\n if (endDate && endDate > projectEndDate) {\n return `should be lesser than \"${projectEndDate.toLocaleDateString('en-GB')}\"`;\n }\n if (startDate && !endDate) {\n return \"end date is required\";\n }\n } catch (e) {\n console.log(e);\n }\n };\n return (\n <>\n {\n projectPhases ?\n <Form onSubmit={onSubmit}\n validate={validate}\n initialValues={singleProject}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit}>\n\n <Grid container spacing={2}>\n {\n (singleProject.isDraft !== undefined) ? <>\n <Grid item xs={12} md={6} lg={6}>\n <span>Project Name</span>\n <TextInput\n variant=\"outlined\"\n // label=\"Project Name\"\n source=\"name\"\n // id=\"filled-full-width\"\n reference=\"\"\n label={false}\n InputLabelProps={{\n shrink: true,\n }}\n placeholder=\"Enter project name\"\n validate={[required(), maxLength(255)]}\n // className={classes.inputWidthMargin}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n // onChange={(e) => { console.log(e.target.value) }}\n />\n </Grid>\n <Grid item xs={12} lg={6} md={6}>\n <RadioButtonGroupInput\n label=\"Status\"\n source=\"status\"\n row={true}\n choices={STATUS_INACTIVE_ACTIVE_CHOICES}\n validate={[required()]}\n />\n </Grid>\n </> : <Grid item xs={12} md={12} lg={12}>\n <span>Project Name</span>\n <TextInput\n variant=\"outlined\"\n // label=\"Project Name\"\n source=\"name\"\n // id=\"filled-full-width\"\n reference=\"\"\n label={false}\n InputLabelProps={{\n shrink: true,\n }}\n placeholder=\"Enter project name\"\n validate={[required(), maxLength(255)]}\n // className={classes.inputWidthMargin}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n // onChange={(e) => { console.log(e.target.value) }}\n />\n </Grid>\n }\n\n <Grid item xs={12} md={6} lg={6}>\n <span>Project Sponsor</span>\n <ReferenceInput\n variant=\"outlined\"\n label={false}\n source=\"projectSponsorId\"\n reference=\"User\"\n // validate={[required()]}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={6}>\n <span>Business Owner</span>\n <ReferenceInput\n variant=\"outlined\"\n label={false}\n source=\"businessOwnerId\"\n reference=\"User\"\n // validate={[required()]}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n\n\n <Grid item xs={12} md={6} lg={6}>\n {/* <div onClick={console.log(\"hello bussss\")}> */}\n <span>Strategic Driver</span>\n <AutocompleteInput\n variant=\"outlined\"\n label={false}\n source=\"projectDriver\"\n optionValue=\"name\"\n optionText=\"name\"\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n choices={projectDriverChoices}\n validate={[required()]}\n onChange={(project) => setDriverName(project)}\n />\n {/* </div> */}\n </Grid>\n <Grid item xs={12} md={6} lg={6}>\n <span>Strategic Driver (Display Name)</span>\n <TextInput\n variant=\"outlined\"\n label={false}\n source=\"driverDisplayName\"\n id=\"filled-full-width\"\n InputLabelProps={{\n shrink: true,\n }}\n placeholder=\"Enter project name\"\n initialValue={driverName}\n validate={[required(), maxLength(255)]}\n // className={classes.inputWidthMargin}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n // onChange={(e) => { console.log(e.target.value) }}\n />\n </Grid>\n\n <Grid item xs={12} md={6} lg={4}>\n <span>Start Date</span>\n <DateInput\n variant=\"outlined\"\n label={false}\n source=\"startDate\"\n validate={[required(), validateStartDate]}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <span>End Date</span>\n <DateInput\n variant=\"outlined\"\n label={false}\n source=\"endDate\"\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n validate={[required(), validateEndDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <span>Go Live Date</span>\n <DateInput\n variant=\"outlined\"\n label={false}\n source=\"goLiveDate\"\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n validate={[required(), validateGoLiveDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n <Box style={{ width: '100%', backgroundColor: '#c4cdd5' }}>\n\n <Divider variant=\"fullWidth\" />\n </Box>\n <Typography className={classes.subTitle}>Project Phases</Typography>\n <Grid container className={classes.gridContainer} spacing={2}>\n {\n projectPhases?.map((projectPhase, index) => (\n <div key={projectPhase.id}>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid>\n <TextInput\n variant=\"outlined\"\n label={`Phase ${index + 1}`}\n source={`projectPhases[${index}].name`}\n initialValue={projectPhase.name}\n value={projectPhase.name}\n disabled={true}\n style={{ width: isSmall && \"100%\" }}\n // validate={[required(), maxLength(255)]}\n validate={[maxLength(255)]}\n InputProps={{\n classes: {\n input: classes.phaseDateWidth,\n notchedOutline: classes.inputBorder,\n }\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid >\n <Box style={{ display: \"flex\", flexDirection: isSmall ? \"column\" : \"row\" }}>\n <DateInput\n variant=\"outlined\"\n label=\"Start Date\"\n source={`projectPhases[${index}].startDate`}\n className={classes.phaseDateInput}\n validate={[\n // required(),\n (value, values) => validatePhaseStartDate(value, values, index),\n ]}\n InputProps={{\n classes: {\n input: classes.phaseDateWidth,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n <DateInput\n variant=\"outlined\"\n label=\"End Date\"\n source={`projectPhases[${index}].endDate`}\n className={classes.phaseDateInput}\n validate={[\n // required(),\n (value, values) => validatePhaseEndDate(value, values, index),\n ]}\n InputProps={{\n classes: {\n input: classes.phaseDateWidth,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Box>\n </Grid>\n {/* <h1>{projectPhase.name}</h1> */}\n </div>\n ))}\n </Grid>\n\n\n <Box style={{ width: '100%', backgroundColor: '#c4cdd5' }}>\n\n <Divider variant=\"fullWidth\" />\n </Box>\n\n <Grid item xs={12} md={6} lg={4}>\n <span>Change Lead</span>\n <ReferenceInput\n variant=\"outlined\"\n label={false}\n source=\"changeLeaderId\"\n reference=\"User\"\n validate={[required()]}\n fullWidth\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <Typography variant=\"body1\" style={{ display: 'block', textAlign: 'center' }}>Project Status</Typography>\n <Box style={{ display: 'flex', justifyContent: 'center' }}>\n\n <Box className={clsx(classes.selectedAssessment, {\n 'activeGreen': pstatus === \"green\"\n })}>\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">All project milestones are on track</Typography>\n </Box>\n }\n >\n <Button style={{ backgroundColor: '#27AE60', width: '80px', height: '41px', opacity: pstatus === 'green' ? 1 : '0.7', }}\n onClick={() => setPstatus(\"green\")}\n >\n GREEN\n </Button>\n </HtmlTooltip>\n\n </Box>\n\n\n <Box className={clsx(classes.selectedAssessment, {\n 'activeAmber': pstatus === \"amber\"\n })}>\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">One or several major milestones are delayed but delivery end date is not impacted</Typography>\n </Box>\n }\n >\n <Button style={{ backgroundColor: '#F2994A', width: '80px', height: '41px', opacity: pstatus === 'amber' ? '1' : '0.7', }}\n onClick={() => setPstatus(\"amber\")}\n >\n AMBER\n </Button>\n </HtmlTooltip>\n\n </Box>\n\n\n <Box className={clsx(classes.selectedAssessment, {\n 'activeRed': pstatus === \"red\"\n })}>\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">One or several major milestones are delayed and delivery end date is impacted</Typography>\n </Box>\n }\n >\n <Button style={{ backgroundColor: '#EB5757', width: '80px', height: '41px', opacity: pstatus === 'red' ? '1' : '0.7', }}\n onClick={() => setPstatus(\"red\")}\n >\n RED\n </Button>\n </HtmlTooltip>\n\n </Box>\n\n </Box>\n <p style={{ color: \"#EB5757\", textAlign: 'center', margin: '0 5px', padding: '0 15px' }}>{projectStatusError}</p>\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <Typography variant=\"body1\" style={{ display: 'block', textAlign: 'center' }}>Change Status</Typography>\n <Box style={{ display: 'flex', justifyContent: 'center' }}>\n\n <Box className={clsx(classes.selectedAssessment, {\n 'activeGreen': cstatus === \"green\"\n })}>\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">All project milestones are on track</Typography>\n </Box>\n }\n >\n <Button style={{ backgroundColor: '#27AE60', width: '80px', height: '41px', opacity: cstatus === 'green' ? 1 : '0.7', }}\n onClick={() => setCtatus(\"green\")}\n >\n GREEN\n </Button>\n </HtmlTooltip>\n\n </Box>\n\n <Box className={clsx(classes.selectedAssessment, {\n 'activeAmber': cstatus === \"amber\"\n })}>\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">One or several major milestones are delayed but delivery end date is not impacted</Typography>\n </Box>\n }\n >\n <Button style={{ backgroundColor: '#F2994A', width: '80px', height: '41px', opacity: cstatus === 'amber' ? '1' : '0.7', }}\n onClick={() => setCtatus(\"amber\")}\n >\n AMBER\n </Button>\n </HtmlTooltip>\n\n </Box>\n\n <Box className={clsx(classes.selectedAssessment, {\n 'activeRed': cstatus === \"red\"\n })}>\n <HtmlTooltip\n title={\n <Box>\n <Typography color=\"inherit\">One or several major milestones are delayed and delivery end date is impacted</Typography>\n </Box>\n }\n >\n <Button style={{ backgroundColor: '#EB5757', width: '80px', height: '41px', opacity: cstatus === 'red' ? '1' : '0.7', }}\n onClick={() => setCtatus(\"red\")}\n >\n RED\n </Button>\n </HtmlTooltip>\n\n </Box>\n </Box>\n <p style={{ color: \"#EB5757\", textAlign: 'center', margin: '0 5px', padding: '0 15px' }}>{changeStatusError}</p>\n </Grid>\n <Grid item xs={12} md={6} lg={6}>\n <span>Project Summary</span>\n <TextInput\n variant=\"outlined\"\n label={false}\n source=\"summary\"\n id=\"filled-full-width\"\n multiline\n InputLabelProps={{\n shrink: true,\n }}\n placeholder=\"Enter project summary (max 255 characters)\"\n validate={[maxLength(255)]}\n // className={classes.inputWidthMargin}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n InputProps={{\n classes: {\n input: classes.textAreaInput,\n notchedOutline: classes.inputBorder,\n },\n }}\n // onChange={(e) => { console.log(e.target.value) }}\n />\n </Grid>\n <Grid item xs={12} md={6} lg={6}>\n <span>Project Commentary</span>\n <TextInput\n variant=\"outlined\"\n label={false}\n source=\"commentary\"\n id=\"filled-full-width\"\n multiline\n fullWidth\n InputLabelProps={{\n shrink: true,\n }}\n placeholder=\"Enter project commentary (max 255 characters)\"\n validate={[maxLength(255)]}\n // className={classes.inputWidthMargin}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n InputProps={{\n classes: {\n input: classes.textAreaInput,\n notchedOutline: classes.inputBorder,\n },\n }}\n // onChange={(e) => { console.log(e.target.value) }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={6}>\n {/* <div onClick={console.log(\"hello bussss\")}> */}\n <span>Driver Business Unit</span>\n <BusinessUnitCP setShowImpBus={setShowImpBus} handleSnackbarOpen={handleSnackbarOpen} />\n {/* <ReferenceInput\n onChange={() => handleBuChange()}\n variant=\"outlined\"\n label={false}\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n validate={[required()]}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput> */}\n {/* </div> */}\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={6}>\n <span>Impacted Business Unit</span>\n {\n showImpBus ? <FormDataConsumer>\n {({ formData, ...rest }) => (\n <ReferenceArrayInput\n fullWidth\n variant=\"outlined\"\n label=\"\"\n source=\"impactedBusinessUnits\"\n reference=\"BusinessUnit\"\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n filter={{\n // excludeIds:\n // formData && formData.businessUnitId\n // ? [formData.businessUnitId]\n // : null,\n\n }}\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n )}\n </FormDataConsumer> : <TextInput\n disabled\n source=\"body\"\n variant=\"outlined\"\n label=\"Impacted Business Unit\"\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n />\n }\n </Grid>\n </Grid>\n <ProjectFormButton activeStep={activeStep} handleSubmit={handleSubmit} handleBack={handleBack} steps={steps} isDraft={singleProject?.isDraft === undefined ? true : singleProject.isDraft} />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </form>\n\n )}\n />\n :\n <Loading />\n }\n </>\n\n );\n};\n\n\nfunction BusinessUnitCP({ setShowImpBus, handleSnackbarOpen }) {\n const form = useForm();\n const classes = useStyles();\n const { values } = form.getState();\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => {\n const handleBuiChange = (event, newValue) => {\n // Add the newly selected business unit to the impactedBusinessUnits array\n // console.log(formData)\n // formData['impactedBusinessUnits'] = [97]\n // console.log(newValue, formData)\n // console.log(form)\n // console.log(form)\n // console.log(values)\n if (values && values.impactedBusinessUnits) {\n const impactedBUs = [...values.impactedBusinessUnits];\n if (impactedBUs.includes(event)) {\n\n form.change('impactedBusinessUnits', impactedBUs)\n } else {\n form.change('impactedBusinessUnits', [...impactedBUs, event])\n handleSnackbarOpen(\"Impacted business unit updated.\", \"success\")\n }\n }\n else {\n\n form.change('impactedBusinessUnits', [event])\n }\n\n // const updatedImpactedBusinessUnits = [...formData.impactedBusinessUnits, newValue.id];\n // Update the form data with the updated impactedBusinessUnits array\n setShowImpBus(true);\n // rest.input.onChange(updatedImpactedBusinessUnits);\n };\n return (\n <ReferenceInput\n onChange={handleBuiChange}\n variant=\"outlined\"\n label={false}\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n validate={[required()]}\n className={`${classes.referenceInputWidthOvr} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n )\n }}\n </FormDataConsumer>\n )\n}","import { Box, Button, Card, Divider, Grid, IconButton, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport arrayMutators from \"final-form-arrays\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport {\n AutocompleteInput,\n Loading,\n NumberInput, ReferenceInput,\n SelectInput, TextInput,\n Title,\n maxLength,\n required,\n useDataProvider,\n useNotify, usePermissions\n} from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport palette from \"../../framework/theme/palette\";\nimport { impersonatedURL, onFailureMessage } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport { Alert, Snackbar, Typography } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n referenceMargin: {\n margin: 0,\n },\n actionToolbar: {\n display: 'flex',\n marginTop: 40,\n justifyContent: 'flex-end'\n },\n gridsmeCard: {\n paddingLeft: 40,\n paddingBottom: 40\n },\n unitTextHeading: {\n fontStyle: \"normal\",\n color: \"#333333\",\n fontSize: 24,\n margin: 0,\n marginTop: 31,\n marginLeft: 40,\n marginBottom: 35,\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n gridItemPadding: {\n padding: \"0px !important\",\n marginRight: 30,\n marginBottom: 25,\n },\n smeButton: {\n padding: 0,\n marginLeft: \"-10px\",\n },\n saveButton: {\n width: 155,\n height: 48,\n backgroundColor: \"#ACACAC\",\n borderRadius: 8,\n fontSize: 16,\n fontWeight: 500,\n fontStyle: \"normal\",\n textTransform: \"capitalize\",\n },\n responsiveTitle: {\n [theme.breakpoints.down('md')]: {\n whiteSpace: \"break-spaces\",\n fontSize: 19\n // textAlign: 'center !important',\n },\n },\n deleteIcon: {\n color: palette.customsColor.amber,\n '&:hover': {\n color: '#f06548cc'\n }\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nconst SmeRequirementInputs = (props) => {\n const [loading, setLoading] = React.useState();\n const [updateSme, setUpdateSme] = React.useState();\n const [initialValues, setInitialValues] = React.useState();\n const [businessUnits, setBusinessUnits] = React.useState();\n const [smeRequirementsData, setSmeRequirementsData] = React.useState();\n const dataProvider = useDataProvider();\n\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const isXS = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n const { loading: loadingPermissions, permissions } = usePermissions();\n // impersonatedURL(isImpersonating, '#/sme_requirements?impersonated');\n impersonatedURL(isImpersonating, '#/sme_requirements?impersonated');\n\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const getProject = async (id) => {\n return dataProvider\n .getOne(\"Project\", { id })\n .then((response) => response.data);\n };\n\n const getSmeRequirements = async (projectId, businessUnitId) => {\n setLoading(true);\n return dataProvider\n .getList(\"SmeRequirement\", {\n filter: { projectId, businessUnitId },\n pagination: { page: 1, perPage: 50 },\n sort: { field: \"id\", order: \"ASC\" },\n })\n .then((response) => {\n return response.data\n });\n };\n\n const transformData = (values) => {\n\n const transformedData = {\n projectId: values.projectId,\n };\n\n const smeRequirements = [];\n\n values.smeRequirements.map((groupedSmeRequirements, index) => {\n groupedSmeRequirements.forEach(req => {\n if (req)\n smeRequirements.push({\n id: req.id,\n month: req.month,\n forecastEmployees: req.forecastEmployees,\n employees: req.employees,\n businessUnitId: req.businessUnitId,\n commentary: req.commentary,\n })\n })\n })\n\n transformedData.smeRequirements = smeRequirements;\n\n return transformedData;\n };\n const transformDataToFormValues = (values) => {\n const transformedData = {\n projectId: values.projectId,\n };\n\n const smeRequirementsForForm = [];\n const groupedBu = _.groupBy(values.smeRequirements, \"businessUnitId\")\n _.forOwn(groupedBu, (smeRequirements, businessUnitId) => {\n const modifiedSmes = smeRequirements.map(smeRequirement => ({\n id: smeRequirement.id,\n month: smeRequirement.month,\n forecastEmployees: smeRequirement.forecastEmployees,\n employees: smeRequirement.employees,\n commentary: smeRequirement.commentary,\n businessUnitId: smeRequirement.businessUnitId,\n businessUnit: smeRequirement.businessUnit\n }))\n\n smeRequirementsForForm[businessUnitId] = modifiedSmes;\n });\n\n transformedData.smeRequirements = smeRequirementsForForm;\n\n return transformedData;\n };\n\n const onSubmit = (values, form) => {\n dataProvider\n .postRequest(\"SmeRequirement\", {\n queryType: updateSme ? \"update\" : \"create\",\n data: transformData(values),\n })\n .then((response) => {\n updateSme\n ? handleSnackbarOpen(\"SME Requirements updated successfully\", \"success\")\n : handleSnackbarOpen(\"SME Requirements added successfully\", \"success\")\n form.initialize(values);\n form.restart();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n };\n\n const validate = (values) => {\n // console.log(values)\n const errors = {};\n if (\n values &&\n values.smeRequirements &&\n values.smeRequirements.length === 0\n ) {\n errors.smeRequirements_errors = \"please add at least one requirement\";\n }\n return errors;\n };\n\n // React.useEffect(() => {\n const handleProjectChange = (projectId) => {\n getProject(projectId)\n .then((data) => {\n const businessUnits = [];\n businessUnits.push(data.businessUnit)\n if (data.impactedBusinessUnits && data.impactedBusinessUnits.length) {\n data.impactedBusinessUnits.forEach((bu) => {\n businessUnits.push(bu)\n })\n }\n const uniqueBusinessUnits = businessUnits.filter((item, index, self) =>\n index === self.findIndex((t) => t.id === item.id && t.name === item.name)\n )\n setInitialValues((prev) => {\n return {\n ...prev,\n projectId: data.id,\n startDate: data.startDate,\n endDate: data.endDate\n }\n })\n setBusinessUnits(uniqueBusinessUnits)\n return data;\n });\n\n getSmeRequirements(projectId)\n .then((smeRequirements) => {\n console.log(smeRequirements);\n const isSmeReqAvailable = smeRequirements && smeRequirements.length > 0 ? true : false;\n const transformedData = isSmeReqAvailable ? transformDataToFormValues({ projectId, smeRequirements }) : [{ startDate: null }];\n setSmeRequirementsData(transformedData)\n setUpdateSme(isSmeReqAvailable);\n\n setInitialValues((prev) => {\n return {\n ...prev,\n smeRequirements: transformedData.smeRequirements ? transformedData.smeRequirements : [],\n updatedAt: smeRequirements && smeRequirements.length > 0 && smeRequirements[0]?.updatedAt\n }\n })\n\n setLoading(false);\n\n }).catch(error => {\n console.log(error);\n handleSnackbarOpen(\"error in getting SME requirements\", \"error\")\n })\n }\n\n // }, [])\n\n return (\n <>\n <WithPermission resource=\"Change Assessment\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\", \"edit\"]} {...props} >\n <Title title=\"Sme Requirements\" className={classes.title} />\n <Form\n initialValues={initialValues}\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n subscription={{ values: true }}\n validate={validate}\n render={({\n handleSubmit,\n form,\n submitting,\n pristine,\n values,\n form: {\n mutators: { push, pop },\n },\n }) => (\n <form>\n <Box display=\"flex\" sx={{ alignItems: isSmall ? \"flex-start\" : \"center\", justifyContent: \"space-between\", flexDirection: isSmall ? \"column\" : \"row\" }}>\n <Box style={{ width: isXS ? \"100%\" : 483 }}>\n <Grid container spacing={2}>\n <Grid item lg={8} xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n sort={{ field: 'name', order: 'ASC' }}\n onChange={(value) => {\n handleProjectChange(value, form);\n }}\n filter={{ isDraft: false, status: true }}\n className={classes.referenceMargin}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n </Box>\n <Box>\n <Typography sx={{ color: \"gray\", fontSize: \"14px\" }}>\n {initialValues && initialValues.updatedAt && `Updated at ${moment(initialValues.updatedAt).format(\"hh:mm:ss a, MM/DD/YYYY\")} (UTC)`}\n </Typography>\n </Box>\n </Box>\n {Boolean(values.projectId && businessUnits && smeRequirementsData) &&\n (loading ? (\n <Loading />\n ) : (\n <Box mt={5}>\n {businessUnits.map((businessUnit, index) => (\n <Box mb={2}>\n <Card>\n <Box p={2}>\n <Box mb={2}>{businessUnit.name}</Box>\n <BusinessUnitRequirements\n index={index}\n push={push}\n businessUnit={businessUnit}\n requirementValues={\n smeRequirementsData.smeRequirements\n ? smeRequirementsData.smeRequirements[businessUnit.id]\n : null}\n projectStartDate={values.startDate}\n projectEndDate={values.endDate}\n />\n </Box>\n </Card>\n </Box>\n ))}\n <Field name=\"smeRequirements_errors\">\n {({ input, meta }) => (\n <Box color=\"red\" mb={2}>\n {meta.error && <span>{meta.error}</span>}\n </Box>\n )}\n </Field>\n <div className={classes.actionToolbar}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"button\"\n onClick={handleSubmit}\n disabled={submitting || pristine}\n >\n Save\n </Button>\n </div>\n </Box>\n ))}\n </form>\n )}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n </>\n );\n};\n\nfunction getMonthsBetweenDates(startDate, endDate) {\n let months = new Set();\n\n // Ensure the start date is before the end date\n if (startDate > endDate) {\n return Array.from(months);\n }\n\n // Initialize the current date to the start date\n let currentDate = new Date(startDate);\n\n // Loop until the current date is before or equal to the end date\n while (currentDate <= endDate) {\n // Get the current month and year\n let currentMonth = currentDate.getMonth() + 1; // Months are zero-based\n let currentYear = currentDate.getFullYear();\n\n // Add the current month and year to the Set\n let currentMonthYear = `${currentYear}-${currentMonth.toString().padStart(2, '0')}`;\n const dateObj = moment(currentMonthYear + '-01');\n const monthYearString = dateObj.format('MMMM YYYY')\n months.add({ id: currentMonthYear, name: monthYearString });\n\n // Move to the next month\n currentDate.setMonth(currentDate.getMonth() + 1);\n }\n // console.log(Array.from(months))\n return Array.from(months);\n}\n\n\nfunction updateMonthsBasedOnRequirements(months, requirements) {\n if (requirements && (requirements.length > 0)) {\n\n for (const month of months) {\n // Check if there is a requirement for the current month\n const matchingRequirement = requirements.find(req => req && req.month === month.id);\n\n // Update the disabled property based on the existence of a matching requirement\n month.disabled = matchingRequirement;\n }\n }\n\n return months;\n}\n\nconst BusinessUnitRequirements = ({ index, push, businessUnit, requirementValues, projectStartDate, projectEndDate }) => {\n const [requirements, setRequirements] = React.useState();\n const form = useForm();\n const months = getMonthsBetweenDates(new Date(projectStartDate), new Date(projectEndDate));\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [selectedMonths, setSelectedMonths] = React.useState(updateMonthsBasedOnRequirements(months, requirementValues));\n\n React.useEffect(() => {\n setRequirements(requirementValues)\n }, [requirementValues])\n\n const handleMonthChange = () => {\n const changedRequirement = form.getState().values.smeRequirements[businessUnit.id];\n const updatedMonths = updateMonthsBasedOnRequirements(months, changedRequirement)\n setSelectedMonths(updatedMonths)\n }\n const maxDigits = value => {\n // console.log(value)\n\n return value && value.toString().length > 3\n ? 'Must be 3 digits or less'\n : null;\n };\n return (\n <div>\n {Boolean(requirements && requirements.length) && requirements.map((requirement, i) => (\n Boolean(requirement) && <>\n <Grid\n container\n alignItems=\"center\"\n spacing={isSmall ? 0 : 2}\n >\n <Grid item md={3} style={{ width: \"100%\" }}>\n <SelectInput\n variant=\"outlined\"\n source={`smeRequirements[${businessUnit.id}][${i}].month`}\n label=\"Month\"\n choices={selectedMonths}\n className={classes.inputMargin}\n fullWidth\n validate={[required(), maxLength(255)]}\n onChange={handleMonthChange}\n />\n\n </Grid>\n <Grid item md={2} style={{ width: isSmall ? \"100%\" : \"80%\" }} >\n <NumberInput\n fullWidth\n variant=\"outlined\"\n label=\"Forecast (SME)\"\n source={`smeRequirements[${businessUnit.id}][${i}].forecastEmployees`}\n validate={[required(), maxDigits]}\n />\n </Grid>\n <Grid item md={2} style={{ width: isSmall ? \"100%\" : \"80%\" }} >\n <NumberInput\n fullWidth\n variant=\"outlined\"\n label=\"Actual (SME)\"\n source={`smeRequirements[${businessUnit.id}][${i}].employees`}\n validate={[required(), maxDigits]}\n />\n </Grid>\n <Grid item md={4} style={{ width: isSmall ? \"100%\" : \"80%\" }} >\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Commentary (max 255 characters)\"\n multiline\n // resettable\n source={`smeRequirements[${businessUnit.id}][${i}].commentary`}\n validate={[maxLength(255)]}\n />\n </Grid>\n <Grid item md={1} xs={12} style={{ width: isSmall ? \"100%\" : \"20%\", marginTop: '-18px' }}>\n {\n isSmall ? <Box sx={{ justifyContent: \"center\", display: \"flex\" }}>\n <Button variant=\"contained\"\n style={{ backgroundColor: \"#f06548cc\", color: \"#fff\", }}\n onClick={() => {\n const proceed = window.confirm('You are deleting the entry. Are you sure?');\n if (proceed) {\n requirements[i] = undefined\n form.change(`smeRequirements[${requirement.businessUnitId}][${i}]`, undefined)\n setRequirements([...requirements])\n handleMonthChange()\n };\n }}\n >\n Delete SME\n </Button>\n </Box> : <IconButton\n color=\"inherit\"\n aria-label=\"remove value\"\n size=\"small\"\n onClick={() => {\n const proceed = window.confirm('You are deleting the entry. Are you sure?');\n if (proceed) {\n requirements[i] = undefined\n form.change(`smeRequirements[${requirement.businessUnitId}][${i}]`, undefined)\n setRequirements([...requirements])\n handleMonthChange()\n };\n }}\n >\n <DeleteIcon className={classes.deleteIcon} />\n </IconButton>\n }\n\n </Grid>\n\n </Grid>\n {\n isSmall && <Box sx={{ marginY: \"12px\" }} >\n <Divider />\n </Box>\n }\n </>\n\n ))}\n <Grid item xs={12} >\n <Box alignItems=\"center\" justifyContent=\"center\" display=\"flex\">\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={() => {\n push(`smeRequirements[${businessUnit.id}]`, { businessUnit, businessUnitId: businessUnit.id });\n if (requirements) {\n requirements.push({ businessUnit, businessUnitId: businessUnit.id });\n setRequirements([...requirements])\n }\n\n else\n setRequirements([{ businessUnit, businessUnitId: businessUnit.id }])\n }}\n color=\"primary\"\n variant=\"text\"\n >\n Add SME Requirement\n </Button>\n </Box>\n\n </Grid>\n </div>\n )\n\n}\n\nexport default SmeRequirementInputs;\n","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return windowDimensions;\n}\n","import {\n Box, Button, Card, Grid, makeStyles, Table,\n TableBody,\n TableCell,\n TableContainer, TableRow, Typography, useMediaQuery\n} from \"@material-ui/core\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport React from \"react\";\nimport { AutocompleteInput, Loading, ReferenceInput, TextInput, Title, useDataProvider, useNotify, usePermissions } from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport catLogo from \"../../assets/images/cat_logo_white.png\";\nimport theme from \"../../framework/theme\";\nimport { impersonatedURL, saveChangeReport } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport useWindowDimensions from \"../../utils/useWindowDimensions\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport { HeatMapTableInCSReport } from \"../changeHeatMap/allProjectsHeatMap_modified\";\n\nconst useStyles = makeStyles((theme) => ({\n drawerTitle: {\n fontWeight: 500,\n fontSize: 16,\n fontStyle: \"normal\",\n backgroundColor: \"#E0E0E0\",\n },\n}));\n\nexport const ChangeStatusReport = (props) => {\n const [projectId, setProjectId] = React.useState();\n const [project, setProject] = React.useState();\n const dataProvider = useDataProvider();\n const ref = React.useRef();\n const { loading: loadingPermissions, permissions } = usePermissions();\n const user = TokenStorage.getUserDetails();\n const notify = useNotify();\n\n // states to get the value of the input fields in the change status report\n const [projectChangeOverviewState, setProjectChangeOverviewState] = React.useState(\"\");\n const [keyMilestonesState, setKeyMilestonesState] = React.useState(\"\");\n const [changeReadinessState, setChangeReadinessState] = React.useState(\"\");\n const [changeImpactCommentState, setChangeImpactCommentState] = React.useState(\"\");\n const [goNoGoState, setGoNoGoState] = React.useState(\"\");\n const [subjectExpersReqCommentState, setSubExperstReqCommentState] = React.useState(\"\");\n const [assessmentValuesInCSR, setAssessmentValuesInCSR] = React.useState();\n\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n impersonatedURL(isImpersonating, '#/change_status_report?impersonated');\n\n const handleProjectChange = (id) => {\n setProjectId(id);\n };\n\n const getProject = (id) => {\n return dataProvider\n .getOne(\"Project\", { id })\n .then((response) => response.data);\n };\n\n React.useEffect(() => {\n getProject(projectId)\n .then((data) => {\n setProject(data);\n })\n setProjectChangeOverviewState(\"\");\n setKeyMilestonesState(\"\");\n setChangeReadinessState(\"\");\n setChangeImpactCommentState(\"\");\n setGoNoGoState(\"\");\n setSubExperstReqCommentState(\"\");\n setAssessmentValuesInCSR();\n }, [projectId]);\n\n const handleExportProjectData = () => {\n const changeStatusProjectDataArr = [];\n changeStatusProjectDataArr.push(project);\n changeStatusProjectDataArr.push(projectChangeOverviewState);\n changeStatusProjectDataArr.push(keyMilestonesState);\n changeStatusProjectDataArr.push(changeReadinessState);\n changeStatusProjectDataArr.push(changeImpactCommentState);\n changeStatusProjectDataArr.push(goNoGoState);\n changeStatusProjectDataArr.push(subjectExpersReqCommentState);\n changeStatusProjectDataArr.push(assessmentValuesInCSR);\n\n const changeStatusProjectData = JSON.stringify(changeStatusProjectDataArr);\n dataProvider\n .postRequestForPDF(\"ExportAllProjectChangeStatus\", {\n queryType: \"retrieve\",\n data: { changeStatusProjectData },\n })\n .then((response) => {\n saveChangeReport(response.data); //here you will saved the cooked pdf from the backend using response.data\n })\n .catch((error) => {\n notify(\"No change status data found to export\",\"warning\");\n });\n };\n\n return (\n <WithPermission resource=\"changeStatusReport\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <div>\n <Title title=\"Change Status Report\" style={{ textTransform: \"uppercase\",fontSize: \"20px\"}} />\n <Grid container spacing={2}>\n <Grid item md={3} xs={12} sm={12}>\n <Form\n onSubmit={() => { }}\n render={() => (\n <form>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n onChange={(value) => {\n handleProjectChange(value);\n }}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </form>\n )}\n />\n </Grid>\n <Grid item md={7} xs={12} sm={12}>\n\n </Grid>\n <Grid item md={2} xs={12} sm={12} style={{ marginTop: 8 }}>\n <Button\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n onClick={handleExportProjectData}\n disabled={!projectId}\n >\n {<DownloadIcon fontSize=\"small\" />}\n Export\n </Button>\n </Grid>\n </Grid>\n <div id=\"toDownload\">\n {projectId &&\n <Report\n projectId={projectId}\n exportRef={ref}\n projectChangeState={setProjectChangeOverviewState}\n keyMilestonesState={setKeyMilestonesState}\n changeReadinessState={setChangeReadinessState}\n changeImpactCommentState={setChangeImpactCommentState}\n goNoGoState={setGoNoGoState}\n subjectExpersReqCommentState={setSubExperstReqCommentState}\n assessmentValuesInCSR={setAssessmentValuesInCSR}\n />\n }\n </div>\n </div>\n </WithPermission>\n );\n};\n\nconst Report = ({\n projectId,\n exportRef,\n projectChangeState,\n keyMilestonesState,\n changeReadinessState,\n changeImpactCommentState,\n goNoGoState,\n subjectExpersReqCommentState,\n assessmentValuesInCSR,\n}) => {\n const dataProvider = useDataProvider();\n const [project, setProject] = React.useState();\n const [loading, setLoading] = React.useState();\n const [error, setError] = React.useState();\n const { width: windowWidth } = useWindowDimensions();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const handleSubmit = (values) => {\n console.log(values);\n };\n const handleCharacterLimit = (e, characterLimit) => {\n if (e.target.value.length > characterLimit) {\n e.target.value = e.target.value.substr(0, characterLimit);\n }\n };\n const getProject = (id) => {\n return dataProvider\n .getOne(\"Project\", { id })\n .then((response) => response.data);\n };\n\n React.useEffect(() => {\n setLoading(true);\n getProject(projectId)\n .then((data) => {\n setProject(data);\n setLoading(false);\n })\n .catch((error) => {\n setError(\"Something went wrong\");\n setLoading(false);\n });\n }, [projectId]);\n\n if (loading) return <Loading />;\n\n if (error) return <Box>{error}</Box>;\n\n if (!project) return null;\n let today = new Date();\n let dd = String(today.getDate()).padStart(2, \"0\");\n let mm = String(today.getMonth() + 1).padStart(2, \"0\"); //January is 0!\n let yyyy = today.getFullYear();\n today = dd + \"/\" + mm + \"/\" + yyyy;\n\n return (\n <>\n <Box\n style={{\n backgroundColor: \"#44546a\",\n color: \"white\",\n padding: \"5px 10px 5px 20px\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Box>\n <Typography variant=\"h6\" style={{ margin: 0 }}>\n Change Status Report - {project.name}\n </Typography>\n <Typography variant=\"subtitle1\">Report Date: {today}</Typography>\n </Box>\n <img style={{ height: \"50px\" }} src={catLogo} />\n </Box>\n <Form\n onSubmit={handleSubmit}\n render={() => (\n <form>\n <div ref={exportRef}>\n <Grid\n container\n spacing={3}\n style={{ marginTop: \"15px\", marginBottom: \"15px\" }}\n >\n <Grid item md={2} xs={6} sm={6}>\n <LabelField\n label=\"Project Sponsor\"\n value={project.projectSponsor.fullName}\n />\n </Grid>\n <Grid item md={2} xs={6} sm={6}>\n <LabelField\n label=\"Project Manager\"\n value={project.changeLeader.fullName}\n />\n </Grid>\n <Grid item md={2} xs={6} sm={6}>\n <LabelField\n label=\"Change Leader\"\n value={project.changeLeader.fullName}\n />\n </Grid>\n <Grid item md={2} xs={6} sm={6}>\n <LabelField\n label=\"Business Owner\"\n value={project.businessOwner.fullName}\n />\n </Grid>\n <Grid item md={2} xs={6} sm={6}>\n <LabelField\n label=\"Strategic Driver\"\n value={project.projectDriver}\n />\n </Grid>\n <Grid item md={2} xs={6} sm={6}>\n <LabelField\n label=\"Go Live Date\"\n value={new Date(project.endDate).toLocaleDateString(\n \"en-GB\"\n )}\n />\n </Grid>\n </Grid>\n <Grid container spacing={2}>\n <Grid item md={10}>\n <Grid container spacing={0}>\n {isSmall ? (\n <>\n <Grid item sm={12}>\n <Box fontWeight=\"bold\">Change Impact Overview</Box>\n <Box width=\"80vw\">\n <HeatMapTableInCSReport\n projectId={project.id}\n businessUnits={[\n { ...project.businessUnit, isMainBu: true },\n ...project.impactedBusinessUnits,\n ]}\n startDate={project.startDate}\n endDate={project.endDate}\n />\n </Box>\n </Grid>\n <Grid item sm={12}>\n <Box fontWeight=\"bold\">\n Subject Matter Experts Requirements\n </Box>\n <Box sx={{ width: \"80vw\" }}>\n <SmeReqTable\n projectId={projectId}\n startDate={project.startDate}\n />\n </Box>\n </Grid>\n <Grid item sm={12} style={{ width: \"100%\" }}>\n <Box fontWeight=\"bold\">Project / Change Overview</Box>\n <Box fullWidth>\n <TextInput\n variant=\"outlined\"\n multiline\n label=\"Description\"\n source=\"description\"\n rows={4}\n fullWidth\n />\n </Box>\n </Grid>\n </>\n ) : (\n <>\n <Grid item md={12}>\n <Box\n fontWeight=\"500\"\n style={{\n backgroundColor: \"#0070c0\",\n display: \"block\",\n color: \"white\",\n padding: \"0 5px\",\n width: \"25%\",\n }}\n >\n Project / Change Overview\n </Box>\n <Box>\n <TextInput\n margin=\"none\"\n style={{ padding: 0 }}\n variant=\"outlined\"\n multiline\n label={false}\n placeholder=\"1000 characters limit\"\n source=\"description\"\n rows={4}\n onKeyUp={(e) => handleCharacterLimit(e, 1000)}\n onKeyDown={(e) => handleCharacterLimit(e, 1000)}\n fullWidth\n onChange={(e) => {\n projectChangeState(e.target.value);\n }}\n />\n </Box>\n </Grid>\n <Grid item md={12}>\n <Box\n fontWeight=\"500\"\n style={{\n backgroundColor: \"#0070c0\",\n display: \"block\",\n color: \"white\",\n padding: \"0 5px\",\n marginBottom: \"2px\",\n width: \"25%\",\n }}\n >\n Change Impact Overview\n </Box>\n <Box width={windowWidth - windowWidth * 0.16 - 142}>\n <HeatMapTableInCSReport\n projectId={project.id}\n businessUnits={[\n { ...project.businessUnit, isMainBu: true },\n ...project.impactedBusinessUnits,\n ]}\n startDate={project.startDate}\n endDate={project.endDate}\n />\n </Box>\n <Box>\n <Typography variant=\"subtitle1\">\n Comments:\n </Typography>\n <TextInput\n variant=\"outlined\"\n multiline\n margin=\"none\"\n label={false}\n placeholder=\"500 characters limit\"\n source=\"commentsCIO\"\n rows={2}\n onKeyUp={(e) => handleCharacterLimit(e, 500)}\n onKeyDown={(e) => handleCharacterLimit(e, 500)}\n fullWidth\n onChange={(e) =>\n changeImpactCommentState(e.target.value)\n }\n />\n </Box>\n </Grid>\n <Grid item md={12}>\n <Box\n fontWeight=\"500\"\n style={{\n backgroundColor: \"#0070c0\",\n display: \"block\",\n color: \"white\",\n padding: \"0 5px\",\n width: \"25%\",\n }}\n >\n Subject Matter Experts Requirements\n </Box>\n <Box>\n <SmeReqTable\n projectId={projectId}\n startDate={project.startDate}\n />\n <Box>\n <Typography variant=\"subtitle1\">\n Comments:\n </Typography>\n\n <TextInput\n margin=\"none\"\n variant=\"outlined\"\n multiline\n label={false}\n placeholder=\"500 characters limit\"\n source=\"commentsSMER\"\n rows={2}\n onKeyUp={(e) => handleCharacterLimit(e, 500)}\n onKeyDown={(e) => handleCharacterLimit(e, 500)}\n fullWidth\n onChange={(e) =>\n subjectExpersReqCommentState(e.target.value)\n }\n />\n </Box>\n </Box>\n </Grid>\n </>\n )}\n </Grid>\n </Grid>\n <Grid item md={2}>\n <Grid container>\n <Box\n fontWeight=\"500\"\n style={{\n backgroundColor: \"#0070c0\",\n display: \"inline\",\n color: \"white\",\n padding: \"0 5px\",\n width: \"90%\",\n }}\n >\n Key Milestones\n </Box>\n <TextInput\n margin=\"none\"\n label={false}\n variant=\"outlined\"\n source=\"keyMilestones\"\n rows={4}\n multiline\n fullWidth\n onChange={(e) => keyMilestonesState(e.target.value)}\n />\n <Box\n fontWeight=\"500\"\n style={{\n backgroundColor: \"#0070c0\",\n display: \"inline\",\n color: \"white\",\n padding: \"0 5px\",\n width: \"90%\",\n }}\n >\n Change Readiness\n </Box>\n <TextInput\n variant=\"outlined\"\n margin=\"none\"\n label={false}\n placeholder=\"300 characters limit\"\n source=\"changeReadiness\"\n rows={3}\n multiline\n onKeyUp={(e) => handleCharacterLimit(e, 300)}\n onKeyDown={(e) => handleCharacterLimit(e, 300)}\n fullWidth\n onChange={(e) => changeReadinessState(e.target.value)}\n />\n <Box\n fontWeight=\"500\"\n style={{\n backgroundColor: \"#0070c0\",\n display: \"inline\",\n color: \"white\",\n padding: \"0 5px\",\n width: \"90%\",\n }}\n >\n Go / No Go\n </Box>\n <TextInput\n variant=\"outlined\"\n label={false}\n margin=\"none\"\n source=\"goNoGo\"\n placeholder=\"300 characters limit\"\n rows={3}\n multiline\n onKeyUp={(e) => handleCharacterLimit(e, 300)}\n onKeyDown={(e) => handleCharacterLimit(e, 300)}\n fullWidth\n onChange={(e) => goNoGoState(e.target.value)}\n />\n <LabelField\n style={{ width: \"100%\" }}\n value={\n <ChangeAssessmentReport\n projectId={project.id}\n businessUnit={project.businessUnit}\n impactedBusinessUnits={project.impactedBusinessUnits}\n assessmentValuesInCSR={assessmentValuesInCSR}\n />\n }\n impactBu={true}\n md={12}\n />\n </Grid>\n </Grid>\n </Grid>\n </div>\n </form>\n )}\n />\n </>\n );\n};\n\nconst ChangeAssessmentReport = ({\n projectId,\n businessUnit,\n impactedBusinessUnits,\n assessmentValuesInCSR\n}) => {\n const dataProvider = useDataProvider();\n const [assessmentValues, setAssessmentValues] = React.useState();\n const [loading, setLoading] = React.useState();\n const [error, setError] = React.useState();\n\n const getRisk = (value) => {\n switch (true) {\n case value >= 270:\n return { value: \"H\", color: \"#EB5757\" };\n case value >= 138:\n return { value: \"M\", color: \"#F2994A\" };\n case value < 138:\n return { value: \"L\", color: \"#27AE60\" };\n }\n };\n\n React.useEffect(async () => {\n setLoading(true);\n setAssessmentValues(null);\n setError(null);\n const businessUnits = [];\n businessUnits.push(businessUnit);\n businessUnits.push(...impactedBusinessUnits);\n\n const assessments = await Promise.all(\n businessUnits.map((businessUnit) =>\n dataProvider\n .getOne(\"AssessmentOverview\", {\n id: null,\n data: { projectId, businessUnitId: businessUnit.id },\n })\n .then((response) => {\n return { ...response.data, businessUnit };\n })\n .catch((error) => {\n // console.log(error)\n return null;\n })\n )\n );\n\n const filteredAssessments = assessments.filter((x) => Boolean(x));\n if (filteredAssessments && filteredAssessments.length > 0) {\n const data = filteredAssessments.map(\n ({ overallChangeImpactValue, businessUnit }) => ({\n risk: getRisk(overallChangeImpactValue),\n businessUnit,\n })\n );\n\n setAssessmentValues(data);\n } else {\n setError(\"No assessments found\");\n }\n setLoading(false);\n }, []);\n\n if (loading)\n return (\n <Box height={100}>\n <Loading />\n </Box>\n );\n\n if (error) return error;\n\n if (!assessmentValues) return null;\n assessmentValuesInCSR(assessmentValues);\n return (\n <Box display=\"flex\" flexDirection=\"column\">\n {assessmentValues.map((assessmentValue) => (\n <Box\n display=\"flex\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n mt={2}\n >\n <Box>{assessmentValue.businessUnit.name}</Box>\n <Box ml={2}>\n <Avatar\n style={{\n color: \"#ffffff\",\n backgroundColor: assessmentValue.risk.color,\n width: 25,\n height: 25,\n fontSize: theme.typography.fontSize,\n }}\n >\n {assessmentValue.risk.value}\n </Avatar>\n </Box>\n </Box>\n ))}\n </Box>\n );\n};\n\nconst LabelField = ({ label, value, impactBu, ...rest }) => (\n <Grid item flexDirection=\"column\" {...rest}>\n <Card style={{ border: \"1px solid \t#C8C8C8\" }}>\n <Box>\n {impactBu ? (\n <Box\n fontWeight=\"500\"\n style={{\n backgroundColor: \"#0070c0\",\n display: \"inline\",\n color: \"white\",\n padding: \"0 5px\",\n width: \"90%\",\n }}\n >\n Business Units Impacted\n </Box>\n ) : (\n <Box style={{ paddingLeft: \"5px\" }}>{label}</Box>\n )}\n\n <Box\n color={theme.palette.primary.main}\n style={{ padding: \"0 5px 5px 5px\" }}\n fontWeight=\"bold\"\n >\n {value}\n </Box>\n </Box>\n </Card>\n </Grid>\n);\n\nconst SmeReqTable = ({ projectId, startDate }) => {\n const classes = useStyles();\n const [projectSmeRequirements, setProjectSmeRequirements] =\n React.useState(false);\n const [loading, setLoading] = React.useState();\n const [error, setError] = React.useState();\n const dataProvider = useDataProvider();\n\n const getAllProjectsSmeReq = async (months) => {\n return dataProvider\n .postRequest(\"AllProjectsSmeReq\", {\n queryType: \"retrieve\",\n data: { startDate, projectId },\n })\n .then((response) => {\n return response.data;\n })\n .catch((error) => {\n setError(\"Error in fetching project SME requirements\");\n });\n };\n\n React.useEffect(async () => {\n setLoading(true);\n const allProjectsSmeReq = await getAllProjectsSmeReq();\n setLoading(false);\n setProjectSmeRequirements(allProjectsSmeReq);\n }, []);\n\n if (loading) return <Loading />;\n\n if (error) {\n return (\n <Box mb={3}>\n <Card>\n <Box p={3} color={theme.palette.error.main}>\n {error}\n </Box>\n </Card>\n </Box>\n );\n }\n\n if (\n !projectSmeRequirements ||\n (projectSmeRequirements && projectSmeRequirements.length === 0)\n ) {\n return (\n <Box mb={3}>\n <Card>\n <Box p={3} color={theme.palette.error.main}>\n No SME requirements found\n </Box>\n </Card>\n </Box>\n );\n }\n return (\n <Card style={{ border: \"1px solid \t#C8C8C8\" }}>\n <Box display=\"flex\" flexDirection=\"column\" overflow=\"auto\">\n <TableContainer>\n <Table aria-label=\"sme table\">\n <TableBody>\n {projectSmeRequirements.map((row, i) => (\n <TableRow\n key={row}\n sx={{ \"&:last-child td, &:last-child th\": { border: 0 } }}\n >\n {row.map(\n (cell, i) =>\n i > 0 && (\n <TableCell padding=\"none\" align=\"center\">\n <Box fontWeight={i == 0 ? 500 : null}>\n {cell.slice(0, 4)}\n </Box>\n </TableCell>\n )\n )}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Box>\n </Card>\n );\n};\n\nexport default ChangeStatusReport;\n","import { Box, Button, Card, Grid } from \"@material-ui/core\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { PasswordInput, Title, required, useDataProvider, useNotify, useRefresh } from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { useHistory } from 'react-router-dom';\nimport { onFailureMessage } from \"../../utils/AppUtils\";\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n justifyContent: \"center\",\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\n\nexport const ChangePassword = () => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const refresh = useRefresh();\n const history = useHistory();\n\n const onSubmit = (values, form) => {\n dataProvider\n .postRequest(\"ChangePassword\", {\n queryType: \"changePassword\",\n data: { ...values },\n }).then(({ data }) => {\n form.restart();\n notify(\"Password changed successfully\",\"success\");\n // Super admin should land to client list after sign in\n if (data.user.isSuperAdmin) {\n history.push(\"/user\");\n }\n // other user should land to dashboard after sign in\n else {\n history.push(\"/\");\n }\n refresh();\n })\n .catch(error => {\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n }\n\n const validate_confirm_password = (confirmPassword, values) => {\n if (confirmPassword !== values.newPassword)\n return \"confirm password is not matching\";\n }\n\n const validate = (values) => {\n const errors = {}\n\n if (values && values.oldPassword === values.newPassword)\n errors.newPassword = \"current and new password are same\";\n\n return errors;\n }\n\n return (\n <div>\n <Title title=\"Change Password\" className={classes.title}/>\n <Card>\n <Form\n onSubmit={onSubmit}\n validate={validate}\n render={({ handleSubmit }) => {\n return (\n <Grid container spacing={2} className={classes.root}>\n <Grid item md={4}>\n <Box display=\"flex\" flexDirection=\"column\" p={2}>\n <Box>\n <PasswordInput variant=\"outlined\" label=\"Current Password\" source=\"oldPassword\" validate={[required()]} fullWidth />\n </Box>\n <Box>\n <PasswordInput variant=\"outlined\" label=\"New Password\" source=\"newPassword\" validate={[required()]} fullWidth />\n </Box>\n <Box>\n <PasswordInput variant=\"outlined\" label=\"Confirm Password\" source=\"confirmPassword\" validate={[validate_confirm_password, required()]} fullWidth />\n </Box>\n <Box display=\"flex\" justifyContent=\"center\">\n <Button variant=\"contained\" color=\"primary\" onClick={handleSubmit}>Save</Button>\n </Box>\n </Box>\n </Grid>\n </Grid>\n )\n }}\n />\n\n </Card>\n </div>\n )\n}\n\nexport default ChangePassword;\n","import { Box, Grid } from '@material-ui/core';\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { models } from 'powerbi-client';\nimport { PowerBIEmbed } from 'powerbi-client-react';\nimport { useState } from 'react';\nimport { AutocompleteInput, ReferenceInput, Title, useNotify, usePermissions } from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport powerBiApi, { checkAccessTokenExpiration } from '../../framework/pbiDataProvider';\nimport { impersonatedURL } from '../../utils/AppUtils';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\n\nconst useStyles = makeStyles((theme) => ({\n referenceMargin: {\n margin: 0,\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nfunction RiskAssessmentReport(props) {\n const classes = useStyles();\n const notify = useNotify();\n const [projectId, setProjectId] = useState();\n const user = TokenStorage.getUserDetails();\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n impersonatedURL(isImpersonating, '#/change_risk_report?impersonated');\n const { permissions } = usePermissions();\n\n const [pbiEmbedConfig, setPbiEmbedConfig] = useState({\n type: 'report',\n id: '',\n embedUrl: \"\",\n accessToken: \"\",\n tokenType: models.TokenType.Aad,\n settings: {\n panes: {\n filters: {\n expanded: false,\n visible: false\n }\n },\n navContentPaneEnabled: false,\n // background: models.BackgroundType.Transparent\n },\n eventHooks: {\n accessTokenProvider: checkAccessTokenExpiration\n }\n })\n\n const handleProjectChange = async (id) => {\n setProjectId(id);\n if (pbiEmbedConfig.embedUrl) {\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"id\"\n },\n operator: \"In\",\n values: [id]\n }\n ];\n\n await window.report.updateFilters(\n models.FiltersOperations.Replace,\n filtersArray\n );\n }\n else {\n powerBiApi(\"GET\", \"reports/b8d14b41-f9d9-4444-ae40-14fce2e445e0\").then(res => {\n const { id, embedUrl, accessToken } = res;\n setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl, accessToken })\n });\n }\n\n };\n\n\n return (\n <WithPermission resource=\"Project Report\" permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title=\"Project Report\" className={classes.title} />\n <div>\n <div style={{ maxWidth: \"320px\" }}>\n <Form\n onSubmit={() => { }}\n render={() => (\n <form>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n onChange={(value) => {\n handleProjectChange(value);\n }}\n fullWidth\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </form>\n )}\n />\n </div>\n {\n (!pbiEmbedConfig.embedUrl && !projectId) ? <Box height=\"80vh\" justifyContent='center' alignItems='center' display='flex'> Please select a project </Box> : <PowerBIEmbed\n embedConfig={pbiEmbedConfig}\n eventHandlers={\n new Map([\n ['loaded', async function () {\n\n // await window.report.updateFilters(models.FiltersOperations.RemoveAll);\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"id\"\n },\n operator: \"In\",\n values: [projectId]\n },\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"Users(clientId).id\"\n },\n operator: \"In\",\n values: [impersonateUser ? impersonateUser.id : user.id]\n },\n ];\n await window.report.updateFilters(\n models.FiltersOperations.Add,\n filtersArray\n );\n // console.log('Report has loaded', filtersArray);\n // navigator.clipboard.writeText(JSON.stringify(window.report))\n // console.log('Report has loaded', window.report);\n }],\n ['rendered', function () {\n // const filtersArray = [{\n // $schema: \"http://powerbi.com/product/schema#basic\",\n // target: {\n // table: \"Projects\",\n // column: \"id\"\n // },\n // operator: \"In\",\n // values: [projectId]\n // }\n // ];\n // window.report.updateFilters(\n // models.FiltersOperations.Add,\n // filtersArray\n // );\n }],\n ['error', function (event) { console.log(event.detail); }],\n ])\n }\n\n cssClassName={\"Embed-container\"}\n\n getEmbeddedComponent={(embeddedReport) => {\n // console.log(embeddedReport)\n window.report = embeddedReport;\n }}\n />\n }\n\n </div>\n </WithPermission>\n );\n}\n\nexport default RiskAssessmentReport;\n\nconst ProjectList = ({ handleProjectChange }) => {\n return (\n <Form\n onSubmit={() => { }}\n render={() => (\n <form>\n <Box style={{ maxWidth: 483 }}>\n <Grid container spacing={2}>\n <Grid item lg={8} xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n onChange={(value) => {\n handleProjectChange(value);\n }}\n // className={classes.referenceMargin}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n </Grid>\n </Box>\n </form>\n )}\n />\n );\n};","import { models } from 'powerbi-client';\nimport { PowerBIEmbed } from 'powerbi-client-react';\nimport { useEffect, useState } from 'react';\nimport { Loading, Title, useNotify, usePermissions } from \"react-admin\";\nimport powerBiApi, { checkAccessTokenExpiration } from '../../framework/pbiDataProvider';\nimport { impersonatedURL } from '../../utils/AppUtils';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\n\nfunction PowerBiReportEmbed(props) {\n const { reportId, url, resource, title } = props;\n const notify = useNotify();\n const user = TokenStorage.getUserDetails();\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n impersonatedURL(isImpersonating, `#/${url}?impersonated`);\n const { permissions } = usePermissions();\n\n const [pbiEmbedConfig, setPbiEmbedConfig] = useState({\n type: 'report',\n id: '',\n embedUrl: \"\",\n accessToken: \"\",\n tokenType: models.TokenType.Aad,\n settings: {\n panes: {\n filters: {\n expanded: false,\n visible: false\n }\n },\n navContentPaneEnabled: false,\n // background: models.BackgroundType.Transparent\n },\n eventHooks: {\n accessTokenProvider: checkAccessTokenExpiration\n }\n })\n\n useEffect(() => {\n powerBiApi(\"GET\", `reports/${reportId}`).then(res => {\n const { id, embedUrl, accessToken } = res;\n setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl, accessToken })\n }).catch(error => {\n console.log(error);\n notify(\"Error in getting report\", \"error\")\n })\n }, []);\n\n return (\n <WithPermission resource={resource} permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title={title} style={{ textTransform: \"uppercase\",fontSize: \"20px\"}}/>\n <div>\n {\n !pbiEmbedConfig.embedUrl ? <Loading /> : <PowerBIEmbed\n embedConfig={pbiEmbedConfig}\n eventHandlers={\n new Map([\n ['loaded', async function () {\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"Users(clientId).id\"\n },\n operator: \"In\",\n values: [impersonateUser ? impersonateUser.id : user.id]\n },\n ];\n await window.report.updateFilters(\n models.FiltersOperations.Add,\n filtersArray\n );\n }],\n ['rendered', function () { }],\n ['error', function (event) { console.log(event.detail); }],\n ])\n }\n\n cssClassName={\"Embed-container\"}\n\n getEmbeddedComponent={(embeddedReport) => {\n window.report = embeddedReport;\n }}\n />\n }\n\n </div>\n </WithPermission>\n );\n}\n\nexport default PowerBiReportEmbed;\n","import PowerBiReportEmbed from './powerBiReportEmbed';\n\nfunction BusinessReadinessReport() {\n return (\n <PowerBiReportEmbed\n reportId='7e14804d-7eb7-4307-9ddc-2dbca2502d3d'\n resource='Readiness'\n url='change_business_readiness_report'\n />\n )\n}\n\nexport default BusinessReadinessReport;\n","import PowerBiReportEmbed from './powerBiReportEmbed'\n\nfunction KpiCloseOutReport() {\n return (\n <PowerBiReportEmbed\n reportId='66d6d305-70b0-4cc7-8c49-629fca03db48'\n resource='Close-Out Criteria'\n url='kpi_closeout_report'\n />\n )\n}\n\nexport default KpiCloseOutReport","import PowerBiReportEmbed from './powerBiReportEmbed'\n\nfunction KpiGoNoGoReport() {\n return (\n <PowerBiReportEmbed\n reportId='527fb5a0-a0ea-40eb-8f6d-b01848f640a3'\n resource='Go/No-Go Criteria'\n url='kpi_go_no_go_report'\n />\n )\n}\n\nexport default KpiGoNoGoReport","import React from 'react'\nimport PowerBiReportEmbed from './powerBiReportEmbed'\n\nfunction EnterpriseHealthSummary() {\n return (\n <PowerBiReportEmbed\n reportId='7bcdd8f0-b7c0-49af-9b4b-8b6c1168f36e'\n resource='Enterprise Report'\n url='enterprise_health_summary'\n title=\"Enterprise Portfolio Health\"\n />\n )\n}\n\nexport default EnterpriseHealthSummary","import { models } from 'powerbi-client';\nimport { PowerBIEmbed } from 'powerbi-client-react';\nimport { useEffect, useState } from 'react';\nimport { Loading, Title, useNotify, usePermissions } from \"react-admin\";\nimport powerBiApi, { checkAccessTokenExpiration } from '../../framework/pbiDataProvider';\nimport { impersonatedURL } from '../../utils/AppUtils';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\n\nfunction EnterpriseReport(props) {\n // const { reportId, url, resource, title } = props;\n const reportId = '421050e3-5165-4937-8598-a9e41a955361';\n const resource = 'Enterprise Report';\n const url = 'enterprise_report';\n const title = \"Enterprise Report\";\n const notify = useNotify();\n const user = TokenStorage.getUserDetails();\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n impersonatedURL(isImpersonating, `#/${url}?impersonated`);\n const { permissions } = usePermissions();\n\n const [pbiEmbedConfig, setPbiEmbedConfig] = useState({\n type: 'report',\n id: '',\n embedUrl: \"\",\n accessToken: \"\",\n tokenType: models.TokenType.Aad,\n settings: {\n panes: {\n filters: {\n expanded: false,\n visible: false\n }\n },\n navContentPaneEnabled: true,\n // background: models.BackgroundType.Transparent\n },\n eventHooks: {\n accessTokenProvider: checkAccessTokenExpiration\n }\n })\n\n useEffect(() => {\n powerBiApi(\"GET\", `reports/${reportId}`).then(res => {\n const { id, embedUrl, accessToken } = res;\n setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl, accessToken })\n }).catch(error => {\n console.log(error);\n notify(\"Error in getting report\", \"error\")\n })\n }, []);\n\n return (\n <WithPermission resource={resource} permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title={title} style={{ textTransform: \"uppercase\", fontSize: \"20px\" }} />\n <div>\n {\n !pbiEmbedConfig.embedUrl ? <Loading /> : <PowerBIEmbed\n embedConfig={pbiEmbedConfig}\n eventHandlers={\n new Map([\n ['loaded', async function () {\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"clientId\"\n },\n operator: \"In\",\n values: [impersonateUser ? impersonateUser.id : user.id]\n },\n ];\n await window.report.updateFilters(\n models.FiltersOperations.Add,\n filtersArray\n );\n // const pages = await window.report.getPages();\n // await pages[8].setActive();\n // console.log(\"Active page was set to: \\\"\" + pages[3].displayName + \"\\\"\");\n }],\n ['rendered', function () { }],\n ['error', function (event) { console.log(event.detail); }],\n ])\n }\n\n cssClassName={\"Embed-container\"}\n\n getEmbeddedComponent={(embeddedReport) => {\n window.report = embeddedReport;\n }}\n />\n }\n\n </div>\n </WithPermission>\n );\n}\n\nexport default EnterpriseReport","import { Button, IconButton, makeStyles } from \"@material-ui/core\";\nimport { Alert, Box, Snackbar } from \"@mui/material\";\nimport { useState, useRef, useEffect, DependencyList, useContext } from \"react\";\nimport { Title, useNotify } from \"react-admin\";\nimport { CustomsThemePalette } from \"../../framework/constants\";\nimport PhotoCamera from '@material-ui/icons/PhotoCamera';\nimport ReactCrop, {\n centerCrop,\n makeAspectCrop,\n Crop,\n PixelCrop,\n convertToPixelCrop,\n} from 'react-image-crop'\n\nimport 'react-image-crop/dist/ReactCrop.css';\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nimport dataProvider from \"../../framework/dataProvider\";\nimport { getClientId, onFailureMessage } from \"../../utils/AppUtils\";\nimport cat_logo_white from \"../../assets/images/cat_logo_white.png\";\nimport DeleteForeverIcon from '@mui/icons-material/DeleteForever';\nfunction centerAspectCrop(\n mediaWidth,\n mediaHeight,\n aspect,\n) {\n return centerCrop(\n makeAspectCrop(\n {\n unit: '%',\n width: 90,\n },\n aspect,\n mediaWidth,\n mediaHeight,\n ),\n mediaWidth,\n mediaHeight,\n )\n}\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n },\n heading: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightRegular,\n textTransform: \"uppercase\",\n },\n nonAccordionCard: {\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n title: {\n textTransform: \"uppercase\",\n // fontSize: \"20px\" // Adjust the font size as needed\n },\n input: {\n display: 'none',\n },\n uploadButton: {\n // height: '60px',\n // width: '140px',\n padding: \"10px 5px\",\n borderRadius: \"2px\"\n }\n}));\n\n\nconst ThemeCustomization = () => {\n const classes = useStyles();\n const [themeConfig, setThemeConfig] = useState({})\n const [isShowButton, setIsShowButton] = useState(false)\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({message: name, type: type})\n setSnackbarOpen(true);\n };\n \n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n \n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = useState({\n message: \"\",\n type: \"\"\n });\n \n const {vertical, horizontal} = anchorOrigin;\n const [imgSrc, setImgSrc] = useState('')\n const previewCanvasRef = useRef(null)\n const imgRef = useRef(null)\n const hiddenAnchorRef = useRef(null)\n const blobUrlRef = useRef('')\n const [crop, setCrop] = useState()\n const [completedCrop, setCompletedCrop] = useState()\n const [scale, setScale] = useState(1)\n const [rotate, setRotate] = useState(0)\n const [aspect, setAspect] = useState(16 / 9)\n const [defaultTheme, setDefaultTheme] = useState({});\n const [defaultLogo, setDefaultLogo] = useState(\"\");\n const { themeObject, setTheme, theme } = useContext(ThemeContext)\n useEffect(() => {\n const variables = {\n data: {\n clientId: getClientId(),\n },\n };\n dataProvider\n .getOne(\"ThemeCustomize\", variables)\n .then((response) => {\n const oldState = { ...theme };\n oldState['id'] = response.data.theme;\n if (response.data.url) {\n oldState['img'] = `data:image/png;base64,${response.data.url}`;\n }\n // console.log(res)\n setTheme(oldState)\n setDefaultTheme(response.data);\n setThemeConfig(response.data.theme)\n setIsShowButton(false)\n // setTheme({ id: response.data.theme, img: `data:image/png;base64,${response.data.url}` })\n if (response.data.url) {\n console.log(response.data)\n setDefaultLogo(`data:image/png;base64,${response.data.url}`)\n }\n })\n .catch((error) => {\n console.log(error.message)\n setThemeConfig('Blue')\n });\n }, [])\n\n\n const handleChooseTheme = (item) => {\n setThemeConfig(item.name)\n setIsShowButton(true)\n }\n\n\n function onSelectFile(e) {\n if (e.target.files && e.target.files.length > 0) {\n setIsShowButton(true)\n setCrop(undefined) // Makes crop preview update between images.\n const reader = new FileReader()\n reader.addEventListener('load', () =>\n setImgSrc(reader.result?.toString() || '')\n )\n reader.readAsDataURL(e.target.files[0])\n }\n }\n\n function onImageLoad(e) {\n if (aspect) {\n const { width, height } = e.currentTarget\n setCrop(centerAspectCrop(width, height, aspect))\n }\n }\n\n async function onDownloadCropClick() {\n const image = imgRef.current;\n\n\n let canvas;\n let base64Image;\n if (image) {\n\n // making blob to canvas images \n canvas = document.createElement('canvas');\n const scaleX = image.naturalWidth / image.width;\n const scaleY = image.naturalHeight / image.height;\n canvas.width = completedCrop.width;\n canvas.height = completedCrop.height;\n const ctx = canvas.getContext('2d');\n\n ctx.drawImage(\n image,\n completedCrop.x * scaleX,\n completedCrop.y * scaleY,\n completedCrop.width * scaleX,\n completedCrop.height * scaleY,\n 0,\n 0,\n completedCrop.width,\n completedCrop.height\n );\n\n base64Image = canvas.toDataURL('image/png').split(',')[1];\n }\n // console.log(base64Image)\n\n if (defaultTheme?.url || defaultTheme?.theme) {\n\n dataProvider.update('ThemeCustomize', {\n data: {\n id: defaultTheme.id,\n clientId: getClientId(),\n url: base64Image ? base64Image : defaultTheme?.url,\n theme: themeConfig\n }\n }).then((res) => {\n const oldState = { ...theme };\n handleSnackbarOpen(\"Theme update successfully\", \"success\");\n oldState['id'] = res.data.theme;\n if (res.data.url) {\n oldState['img'] = `data:image/png;base64,${res.data.url}`;\n }\n // console.log(res)\n setTheme(oldState)\n setImgSrc(null)\n setDefaultTheme(res.data)\n setIsShowButton(false)\n if (res.data.url) {\n setDefaultLogo(`data:image/png;base64,${res.data.url}`)\n }\n\n }).catch((err) => {\n console.log(err.message)\n })\n }\n else {\n dataProvider.create('ThemeCustomize', {\n data: {\n clientId: getClientId(),\n url: base64Image,\n theme: themeConfig\n }\n }).then((res) => {\n // console.log(res)\n const oldState = { ...theme };\n oldState['id'] = res.data.theme;\n if (res.data.url) {\n oldState['img'] = `data:image/png;base64,${res.data.url}`;\n }\n // console.log(res)\n setTheme(oldState)\n setImgSrc(null)\n setDefaultTheme(res.data)\n setIsShowButton(false)\n handleSnackbarOpen(\"Theme update successfully\", \"success\");\n if (res.data.url) {\n setDefaultLogo(`data:image/png;base64,${res.data.url}`)\n }\n }).catch((err) => {\n console.log(err.message)\n })\n }\n\n // return new Promise((resolve, reject) => {\n // canvas.toBlob((blob) => {\n // if (!blob) {\n // console.error('Canvas is empty');\n // return;\n // }\n\n // const url = URL.createObjectURL(blob);\n // const a = document.createElement('a');\n // a.href = url;\n // a.download = 'cropped.jpg';\n // document.body.appendChild(a);\n // a.click();\n // document.body.removeChild(a);\n // URL.revokeObjectURL(url);\n // }, 'image/jpeg');\n\n // });\n\n }\n\n const handleDeleteLogo = (id) => {\n dataProvider\n .delete(\"ThemeCustomize\", { id: id })\n .then((response) => {\n handleSnackbarOpen(\"Logo deleted successfully\", \"success\");\n console.log(response.data.data.delteThemeCustomization)\n setDefaultTheme(response.data.data.delteThemeCustomization)\n setDefaultLogo(\"\")\n // refresh();\n setTheme({ id: response.data.data.delteThemeCustomization.theme, img: cat_logo_white })\n })\n .catch((error) => {\n handleSnackbarOpen(error.message, \"error\");\n });\n }\n\n\n return (\n <div>\n <Title title=\"Theme Customization\" className={classes.title} />\n <Box display=\"flex\" justifyContent=\"left\" alignItems=\"start\" flexDirection={'column'} mb={2}>\n <Box display=\"flex\" justifyContent={\"left\"} alignItems={\"start\"} flexDirection={\"column\"}>\n <p style={{ paddingRight: \"8px\", marginBottom: \"4px\" }}>Your Company logo</p>\n {\n defaultLogo &&\n <Box>\n <img src={defaultLogo} style={{ width: \"120px\", height: \"120px\", margin: \"5px 0\" }} />\n </Box>\n }\n {\n defaultTheme?.url ? <Button onClick={() => handleDeleteLogo(defaultTheme?.id)} className={classes.uploadButton} variant=\"text\" color=\"primary\" component=\"span\" startIcon={<DeleteForeverIcon />}>\n Delete Logo\n </Button> : <> <input\n accept=\"image/*\"\n className={classes.input}\n id=\"contained-button-file\"\n multiple\n type=\"file\"\n onChange={onSelectFile}\n />\n <label htmlFor=\"contained-button-file\">\n\n <Button className={classes.uploadButton} variant=\"contained\" color=\"primary\" component=\"span\" startIcon={<PhotoCamera />}>\n Upload Logo\n </Button>\n </label>\n </>\n }\n </Box>\n\n <Box>\n\n {!!imgSrc && (\n <ReactCrop\n crop={crop}\n onChange={(_, percentCrop) => setCrop(percentCrop)}\n onComplete={(c) => setCompletedCrop(c)}\n // aspect={aspect}\n // minWidth={400}\n minHeight={100}\n style={{ margin: \"15px 0 10px 0\" }}\n // circularCrop\n >\n <img\n ref={imgRef}\n alt=\"Crop me\"\n src={imgSrc}\n style={{ transform: `scale(${scale}) rotate(${rotate}deg)`, maxHeight: \"400px\", maxWidth: \"400px\", margin: \"5px 0\" }}\n onLoad={onImageLoad}\n />\n </ReactCrop>\n )}\n </Box>\n\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'start', flexDirection: \"column\", flexWrap: 'wrap' }}>\n <div style={{ display: \"flex\", alignItems: 'start' }}>\n <p>Choose Theme Color</p>\n {/* <div style={{ margin: \"0 12px\", borderRadius: \"50%\", width: \"45px\", height: \"45px\", border: '3px solid #d3d3d3', display: \"flex\", alignItems: 'center', justifyContent: \"center\" }}>\n <div style={{ backgroundColor: \"#028FC2\", cursor: 'pointer', width: \"30px\", height: \"30px\", padding: \"10px\",borderRadius: \"50%\", }}></div>\n </div> */}\n </div>\n <div style={{ display: \"flex\", justifyContent: \"start\", flexWrap: \"wrap\" }}>\n {\n CustomsThemePalette.map((item, index) => (\n <Box sx={{ borderRadius: \"50%\", width: \"45px\", height: \"45px\", border: themeConfig == item.name ? '3px solid #d3d3d3' : \"0px\", display: \"flex\", alignItems: 'center', justifyContent: \"center\" }}>\n <Box key={index} sx={{\n margin: \"8px 5px\", cursor: 'pointer',\n backgroundColor: `${item.color}`, width: \"30px\", height: \"30px\", borderRadius: \"50%\", padding: themeConfig == item.name ? \"10px\" : \"0\",\n }} onClick={() => handleChooseTheme(item)}>\n\n </Box>\n </Box>\n ))\n }\n </div>\n </Box>\n {isShowButton && <Box display={\"flex\"} justifyContent={\"start\"} mt={5}>\n <Button variant=\"contained\" color=\"primary\" onClick={onDownloadCropClick}>Save Changes</Button>\n </Box>}\n\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </div>\n );\n};\n\n\n\n// function useDebounceEffect(\n// fn,\n// waitTime,\n// deps\n// ) {\n// useEffect(() => {\n// const t = setTimeout(() => {\n// fn.apply(undefined, deps)\n// }, waitTime)\n\n// return () => {\n// clearTimeout(t)\n// }\n// }, deps)\n// }\n\nexport default ThemeCustomization;\n","import { models } from 'powerbi-client';\nimport { PowerBIEmbed } from 'powerbi-client-react';\nimport { useEffect, useState } from 'react';\nimport { AutocompleteInput, Loading, ReferenceInput, Title, useDataProvider, useNotify, usePermissions } from \"react-admin\";\nimport powerBiApi, { checkAccessTokenExpiration } from '../../framework/pbiDataProvider';\nimport { currentDate, downloadPDF, getClientId, impersonatedURL, onFailureMessage, pbiFilterNoDuplicate, transformToPowerBIFilter } from '../../utils/AppUtils';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\nimport { Alert, Snackbar } from '@mui/material';\nimport { Form } from \"react-final-form\";\nimport { Box, Button, CircularProgress } from '@material-ui/core';\nimport DownloadIcon from '@mui/icons-material/Download';\nvar FileSaver = require(\"file-saver\");\n\nfunction PBIEmbed(props) {\n const { reportId, url, resource, title, pageName } = props;\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [defaultProjectId, setDefaultProjectId] = useState(null);\n const [project, setProject] = useState();\n const [pdfFilter, setPdfFilter] = useState([])\n const dataProvider = useDataProvider();\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n const [buttonLoader, setButtonLoader] = useState(false);\n\n const handleExportPDF = () => {\n setButtonLoader(true);\n dataProvider\n .postRequest(\"ExportReportPdf\", {\n queryType: \"retrieve\",\n data: {\n accessToken: TokenStorage.getPbiAccessToken(),\n reportId: reportId,\n pageName: pageName,\n filter: {\n clientId: getClientId(),\n id: defaultProjectId,\n filterArray: pdfFilter.length > 0 ? transformToPowerBIFilter(pdfFilter) : []\n }\n }\n }).then(response => {\n downloadPDF(response.data, project.name + \" - \" + title + \" \" + currentDate + \".pdf\");\n setButtonLoader(false);\n handleSnackbarOpen(\"File downloaded\", \"success\");\n })\n .catch(error => {\n setButtonLoader(false);\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const user = TokenStorage.getUserDetails();\n\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n impersonatedURL(isImpersonating, `#/${url}?impersonated`);\n const { permissions } = usePermissions();\n\n const [pbiEmbedConfig, setPbiEmbedConfig] = useState({\n type: 'report',\n id: '',\n embedUrl: \"\",\n accessToken: \"\",\n tokenType: models.TokenType.Aad,\n settings: {\n panes: {\n filters: {\n expanded: false,\n visible: false\n },\n pageNavigation: {\n visible: false\n }\n },\n // navContentPaneEnabled: false,\n // background: models.BackgroundType.Transparent\n },\n eventHooks: {\n accessTokenProvider: checkAccessTokenExpiration\n }\n })\n // \n useEffect(() => {\n // let defProjectId = null;\n dataProvider.getList('Project', {\n pagination: { page: 1, perPage: 10 },\n sort: { field: 'name', order: 'ASC' },\n filter: { isDraft: false, status: true }\n })\n .then(({ data }) => {\n // Set the default project ID to the first project's ID\n if (data.length > 0) {\n setDefaultProjectId(data[0].id);\n // defProjectId = data[0].id\n setProject(data[0])\n }\n })\n .catch(error => {\n console.error('Error fetching projects:', error);\n });\n powerBiApi(\"GET\", `reports/${reportId}`).then(res => {\n const { id, embedUrl, accessToken } = res;\n\n // if (defProjectId) {\n // const andFilterProjectId = projectListEnabled ? ` and Projects/id eq ${defProjectId}` : '';\n setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl: `${embedUrl}&filter=Projects/Client eq ${getClientId()}`, accessToken })\n // }\n }).catch(error => {\n handleSnackbarOpen(\"Error in getting report\", \"error\")\n })\n }, []);\n\n const handleProjectChange = async (id) => {\n // setProjectId(id);\n if (pbiEmbedConfig.embedUrl) {\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"id\"\n },\n operator: \"In\",\n values: [id]\n }\n ];\n\n await window.report.updateFilters(\n models.FiltersOperations.Replace,\n filtersArray\n );\n setDefaultProjectId(id)\n }\n getProject(id)\n .then(data => {\n setProject(data)\n // setLoading(false);\n })\n .catch(error => {\n // setError(\"error in getting project data\")\n })\n }\n\n const getProject = (id) => {\n return dataProvider\n .getOne(\"Project\", { id })\n .then((response) => response.data);\n };\n return (\n <WithPermission resource={resource} permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title={title} style={{ textTransform: \"uppercase\", fontSize: \"20px\" }} />\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <div style={{ maxWidth: \"320px\" }}>\n {\n defaultProjectId && <Form\n onSubmit={() => { }}\n render={() => (\n <form>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project\"\n source=\"projectId\"\n reference=\"Project\"\n onChange={(value) => {\n handleProjectChange(value);\n // console.log(value);\n }}\n fullWidth\n defaultValue={defaultProjectId}\n filter={{ isDraft: false, status: true }}\n sort={{ field: 'name', order: 'ASC' }}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </form>\n )}\n />\n\n }\n\n </div>\n {defaultProjectId &&\n <Box sx={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n\n <Button color=\"primary\" style={{ width: 80, height: 30, margin: \"auto\" }} onClick={handleExportPDF}>\n {\n buttonLoader ? <CircularProgress size={16} /> : <><DownloadIcon fontSize=\"small\" /> Export</>\n }\n </Button>\n </Box>\n }\n\n </div>\n\n <div>\n {\n\n !pbiEmbedConfig.embedUrl ? <Loading /> :\n\n !defaultProjectId ? <Loading /> : <PowerBIEmbed\n embedConfig={pbiEmbedConfig}\n eventHandlers={\n new Map([\n ['loaded', async function () {\n try {\n console.log(pageName, defaultProjectId);\n await window.report.setPage(pageName);\n\n const filtersArray = [\n {\n $schema: \"http://powerbi.com/product/schema#basic\",\n target: {\n table: \"Projects\",\n column: \"id\"\n },\n operator: \"In\",\n values: [defaultProjectId]\n }\n ];\n\n\n await window.report.updateFilters(\n models.FiltersOperations.Replace,\n filtersArray\n );\n\n }\n catch (errors) {\n console.log(errors);\n }\n }],\n [\"dataSelected\", function (event) {\n if (event.detail.visual.type === 'slicer') {\n setPdfFilter(allFilter => {\n const selectedFilter = event.detail.dataPoints;\n const visualName = event.detail.visual.name;\n const selectedValues = pbiFilterNoDuplicate(allFilter, selectedFilter, visualName)\n return selectedValues;\n });\n }\n }],\n ['error', function (event) { console.log(event.detail); }],\n ])\n }\n\n cssClassName={\"Embed-container\"}\n\n getEmbeddedComponent={(embeddedReport) => {\n window.report = embeddedReport;\n }}\n />\n }\n\n </div>\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n}\n\nexport default PBIEmbed;\n","import PBIEmbed from \"./pbiEmbed\";\n\nexport const CIAReport = (props) => {\n return (\n <PBIEmbed\n title=\"Change Impact Assessment Report\"\n reportId='4e534fc8-f1bb-4272-a41d-5473d28ea467'\n pageName=\"51298e986428130189b1\"\n resource='Report'\n url='change_impact_project'\n />\n )\n}\n\nexport default CIAReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const ChangeEnvironmentReport = (props) => {\n return (\n <PBIEmbed\n title=\"Change Environment Report\"\n reportId='4e534fc8-f1bb-4272-a41d-5473d28ea467'\n pageName=\"6627b7813ec938b48870\"\n resource='Report'\n url='change_environment_project'\n />\n )\n}\n\nexport default ChangeEnvironmentReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const ChangeSaturationReport = (props) => {\n\n return (\n <PBIEmbed\n title=\"Change Saturation Report\"\n reportId='4e534fc8-f1bb-4272-a41d-5473d28ea467'\n pageName=\"9c6af1e8d61cdaac9252\"\n resource='Report'\n url='change_saturation_project'\n />\n )\n}\n\nexport default ChangeSaturationReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const ChangeMaturityReport = (props) => {\n return (\n <PBIEmbed\n title='Change Maturity Report'\n reportId='4e534fc8-f1bb-4272-a41d-5473d28ea467'\n pageName=\"db8f03f08a030d350e22\"\n resource='Report'\n url='change_maturity_project'\n />\n )\n}\n\nexport default ChangeMaturityReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const ChangeHeatmapReport = (props) => {\n return (\n <PBIEmbed\n title=\"Change Heatmap Report\"\n reportId='4e534fc8-f1bb-4272-a41d-5473d28ea467'\n pageName='ReportSection68f8e96159e0658664b8'\n resource='Report'\n url='change_heatmap_project'\n />\n )\n}\n\nexport default ChangeHeatmapReport;","import { models } from 'powerbi-client';\nimport { PowerBIEmbed } from 'powerbi-client-react';\nimport { useEffect, useState } from 'react';\nimport { Loading, Title, useDataProvider, useNotify, usePermissions } from \"react-admin\";\nimport powerBiApi, { checkAccessTokenExpiration } from '../../framework/pbiDataProvider';\nimport { currentDate, downloadPDF, getClientId, impersonatedURL, onFailureMessage, pbiFilterNoDuplicate, transformToPowerBIFilter } from '../../utils/AppUtils';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport WithPermission from '../../utils/WithPermission';\nimport { Alert, Snackbar } from '@mui/material';\nimport { Box, Button, CircularProgress } from '@material-ui/core';\nimport DownloadIcon from '@mui/icons-material/Download';\nvar FileSaver = require(\"file-saver\");\n\nfunction PBIPortfolioEmbed(props) {\n const { reportId, url, resource, title, pageName } = props;\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [pdfFilter, setPdfFilter] = useState([])\n const [buttonLoader, setButtonLoader] = useState(false);\n const dataProvider = useDataProvider();\n\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const user = TokenStorage.getUserDetails();\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n const { isImpersonating, isCustomerAdmin } = user ? user : {};\n impersonatedURL(isImpersonating, `#/${url}?impersonated`);\n const { permissions } = usePermissions();\n\n const [pbiEmbedConfig, setPbiEmbedConfig] = useState({\n type: 'report',\n id: '',\n embedUrl: \"\",\n accessToken: \"\",\n tokenType: models.TokenType.Aad,\n settings: {\n panes: {\n filters: {\n expanded: false,\n visible: false\n },\n pageNavigation: {\n visible: false\n }\n },\n // navContentPaneEnabled: false,\n // background: models.BackgroundType.Transparent\n },\n eventHooks: {\n accessTokenProvider: checkAccessTokenExpiration\n }\n })\n // and BuType/Name in ('Change Management')\n // and Calendar/Year eq 2024 and BuType/Mapping.name\n useEffect(() => {\n powerBiApi(\"GET\", `reports/${reportId}`).then(res => {\n const { id, embedUrl, accessToken } = res;\n setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl: `${embedUrl}&filter=Projects/Client eq ${getClientId()}`, accessToken })\n }).catch(error => {\n console.log(error);\n handleSnackbarOpen(\"Error in getting report\", \"error\")\n })\n }, []);\n\n\n const handleExportPDF = () => {\n setButtonLoader(true);\n dataProvider\n .postRequest(\"ExportReportPdf\", {\n queryType: \"retrieve\",\n data: {\n accessToken: TokenStorage.getPbiAccessToken(),\n reportId: reportId,\n pageName: pageName,\n filter: {\n clientId: getClientId(),\n // id: defaultProjectId,\n filterArray: pdfFilter.length > 0 ? transformToPowerBIFilter(pdfFilter) : []\n }\n }\n }).then(response => {\n downloadPDF(response.data, title + \" \" + currentDate + \".pdf\")\n setButtonLoader(false);\n handleSnackbarOpen(\"File downloaded\", \"success\");\n })\n .catch(error => {\n setButtonLoader(false);\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n return (\n <WithPermission resource={resource} permissions={permissions} bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n <Title title={title} style={{ textTransform: \"uppercase\", fontSize: \"20px\" }} />\n <Box sx={{ textAlign: \"right\", height: 40, }}>\n <Button color=\"primary\" style={{ width: 80, height: 30, }} onClick={handleExportPDF}>\n {\n buttonLoader ? <CircularProgress size={16} /> : <><DownloadIcon fontSize=\"small\" /> Export</>\n }\n </Button>\n\n </Box>\n <div>\n {\n !pbiEmbedConfig.embedUrl ? <Loading /> : <PowerBIEmbed\n embedConfig={pbiEmbedConfig}\n eventHandlers={\n new Map([\n ['loaded', async function () {\n try {\n await window.report.setPage(pageName);\n // const filtersArray = [\n // {\n // $schema: \"http://powerbi.com/product/schema#basic\",\n // target: {\n // table: \"BuType\",\n // column: \"Name\"\n // },\n // operator: \"In\",\n // values: [\"Corn Production\", \"Field Crops\"]\n // }\n // ];\n\n // await window.report.updateFilters(\n // models.FiltersOperations.Replace,\n // []\n // );\n }\n catch (errors) {\n console.log(errors);\n }\n }],\n [\"dataSelected\", function (event) {\n if (event.detail.visual.type === 'slicer') {\n setPdfFilter(allFilter => {\n const selectedFilter = event.detail.dataPoints;\n const visualName = event.detail.visual.name;\n const selectedValues = pbiFilterNoDuplicate(allFilter, selectedFilter, visualName)\n return selectedValues;\n });\n }\n }],\n ['error', function (event) { console.log(event.detail); }],\n ])\n }\n\n cssClassName={\"Embed-container\"}\n\n getEmbeddedComponent={(embeddedReport) => {\n window.report = embeddedReport;\n }}\n />\n }\n\n </div>\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n}\n\nexport default PBIPortfolioEmbed;\n","import PBIPortfolioEmbed from \"./pbiPortfolioEmbed\";\n\nexport const SMEReport = (props) => {\n return (\n <PBIPortfolioEmbed\n title=\"SME Requirement\"\n reportId='421050e3-5165-4937-8598-a9e41a955361'\n pageName='ReportSection461f9e6bcf5894eb1995'\n resource='Report'\n url='sme_requirement_portfolio'\n />\n )\n}\n\nexport default SMEReport;","import PBIPortfolioEmbed from \"./pbiPortfolioEmbed\";\n\nexport const RiskManagementReport = (props) => {\n return (\n <PBIPortfolioEmbed\n title=\"Risk Management\"\n reportId='421050e3-5165-4937-8598-a9e41a955361'\n pageName='ReportSection1f83c28d1d0e52759470'\n resource='Report'\n url='risk_management_portfolio'\n />\n )\n}\n\nexport default RiskManagementReport;","import PBIPortfolioEmbed from \"./pbiPortfolioEmbed\";\n\nexport const ChangeImpactReport = (props) => {\n return (\n <PBIPortfolioEmbed\n title=\"Change Impact\"\n reportId='421050e3-5165-4937-8598-a9e41a955361'\n pageName='ReportSectionfd3854d236626ec924e4'\n resource='Report'\n url='change_impact_portfolio'\n />\n )\n}\n\nexport default ChangeImpactReport;","import PBIPortfolioEmbed from \"./pbiPortfolioEmbed\";\n\nexport const ChangeEnvironmentPortfolioReport = (props) => {\n return (\n <PBIPortfolioEmbed\n title=\"Change Environment\"\n reportId='421050e3-5165-4937-8598-a9e41a955361'\n pageName='ReportSection399d8bf171d16f3acf33'\n resource='Report'\n url='change_environment_portfolio'\n />\n )\n}\n\nexport default ChangeEnvironmentPortfolioReport;","import PBIPortfolioEmbed from \"./pbiPortfolioEmbed\";\n\nexport const ChangeHeatmapPortfolioReport = (props) => {\n return (\n <PBIPortfolioEmbed\n title=\"Change Heatmap Report\"\n reportId='421050e3-5165-4937-8598-a9e41a955361'\n pageName='ReportSection68f8e96159e0658664b8'\n resource='Report'\n url='change_heatmap_portfolio'\n />\n )\n}\n\nexport default ChangeHeatmapPortfolioReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const GoNoGoReport = (props) => {\n return (\n <PBIEmbed\n title=\"Project Go / No-Go Report\"\n reportId='31504e2a-80ad-44b4-9142-464fa6bf1031'\n pageName=\"413e4d27067c0d9009bc\"\n resource='Report'\n url='go_no_go_report'\n />\n )\n}\n\nexport default GoNoGoReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const CRAProjectReport = (props) => {\n return (\n <PBIEmbed\n title=\"Change Risk Report\"\n reportId='31504e2a-80ad-44b4-9142-464fa6bf1031'\n pageName=\"8547b9940e69110e3367\"\n resource='Report'\n url='change_risk_assessment_report'\n />\n )\n}\n\nexport default CRAProjectReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const BusinessReadinessProjectReport = (props) => {\n return (\n <PBIEmbed\n title=\"Business Readiness Report\"\n reportId='31504e2a-80ad-44b4-9142-464fa6bf1031'\n pageName=\"e13d51896bdd20b98cce\"\n resource='Report'\n url='business_readiness_report'\n />\n )\n}\n\nexport default BusinessReadinessProjectReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const ChangeGovernanceProjectReport = (props) => {\n return (\n <PBIEmbed\n title=\"Change Governance Report\"\n reportId='31504e2a-80ad-44b4-9142-464fa6bf1031'\n pageName=\"4428f4f002880d5722e9\"\n resource='Report'\n url='change_governance_report'\n />\n )\n}\n\nexport default ChangeGovernanceProjectReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const SMEReqProjectReport = (props) => {\n return (\n <PBIEmbed\n title=\"SME Requirement Report\"\n reportId='31504e2a-80ad-44b4-9142-464fa6bf1031'\n pageName=\"1e23314e286a7cc0b728\"\n resource='Report'\n url='sme_requirement_project_report'\n />\n )\n}\n\nexport default SMEReqProjectReport;","import PBIEmbed from \"./pbiEmbed\";\n\nexport const CloseOutReport = (props) => {\n return (\n <PBIEmbed\n title=\"Project Close-Out Report\"\n reportId='31504e2a-80ad-44b4-9142-464fa6bf1031'\n pageName=\"2ab9173e06e185a6a657\"\n resource='Report'\n url='close_out_report'\n />\n )\n}\n\nexport default CloseOutReport;","import React, { useState, useEffect, useContext } from 'react';\nimport axios from 'axios';\nimport DOMPurify from 'dompurify';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { Button, Loading, Title } from 'react-admin';\nimport { WORDPRESS_ENDPOINT } from '../../framework/constants';\nimport { Box, Typography } from '@mui/material';\nimport { makeStyles } from '@material-ui/core';\nimport { ThemeContext } from '../../framework/theme/themeContext';\nimport ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';\nimport { Link } from \"react-router-dom\";\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n textTransform: \"uppercase\",\n // fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nconst ViewLearningContent = () => {\n const { themeObject } = useContext(ThemeContext);\n const { slug } = useParams();\n const history = useHistory();\n const classes = useStyles();\n const [post, setPost] = useState(null);\n\n useEffect(() => {\n const fetchPost = async () => {\n try {\n const response = await axios.get(`${WORDPRESS_ENDPOINT}wp-json/wp/v2/posts?slug=${slug}`);\n if (response.data.length) {\n console.log(response);\n setPost(response?.data[0]);\n }\n } catch (error) {\n console.error('Error fetching post', error);\n }\n };\n\n fetchPost();\n }, [slug]);\n\n if (!post) {\n return <Loading />\n }\n\n return (\n <Box>\n <Title title=\"LEARNING CENTRE\" className={classes.title} />\n <Box sx={{\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n marginBottom: 4,\n }}>\n <Box\n sx={{\n height: 30,\n width: 100,\n display: 'flex',\n alignItems: \"center\",\n justifyContent: \"center\",\n margin: 1,\n borderRadius: 1.5,\n // color: \"#495057\",\n color: themeObject.palette.primary.main,\n \"&:hover\": {\n backgroundColor: \"rgba(0, 0, 0, 0.1)\",\n cursor: 'pointer',\n },\n }}\n >\n <Link to=\"/learning_centre\">\n <Typography sx={{ textDecoration: \"underline\", color: themeObject.palette.primary.main}}> <ArrowBackIosNewIcon sx={{ fontSize: \"12px\" }} /> Go Back </Typography>\n </Link>\n </Box>\n <Typography textAlign=\"center\" variant='h5' style={{ fontWeight: \"500\" }} width=\"100%\" >{post.title.rendered}</Typography>\n\n </Box>\n <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(post.content.rendered) }} />\n </Box>\n );\n};\n\nexport default ViewLearningContent;\n","\nimport axios from 'axios';\nimport { models } from 'powerbi-client';\nimport { PowerBIEmbed } from 'powerbi-client-react';\nimport { useEffect, useState } from 'react';\nimport { Loading } from \"react-admin\";\nimport powerBiApi, { checkAccessTokenExpiration } from '../../framework/pbiDataProvider';\nimport { TokenStorage } from '../../utils/TokenStorage';\nimport { getClientId } from '../../utils/AppUtils';\nfunction DashboardPowerBI() {\n const user = TokenStorage.getUserDetails()\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n const [pbiEmbedConfig, setPbiEmbedConfig] = useState({\n type: 'report',\n id: '',\n embedUrl: \"\",\n accessToken: \"\",\n tokenType: models.TokenType.Aad,\n settings: {\n panes: {\n filters: {\n expanded: false,\n visible: false\n }\n },\n navContentPaneEnabled: false,\n // background: models.BackgroundType.Transparent\n },\n eventHooks: {\n accessTokenProvider: checkAccessTokenExpiration\n }\n })\n\n useEffect(() => {\n powerBiApi(\"GET\", \"reports/421050e3-5165-4937-8598-a9e41a955361\").then(res => {\n // powerBiApi(\"GET\", \"reports/3a255288-d78d-4328-b3f7-b6c19037e82d\").then(res => {\n const { id, embedUrl, accessToken } = res;\n // embedUrl: `${embedUrl}&filter=Projects/Client ID eq '55'`\n setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl: `${embedUrl}&$filter=Projects/Client eq ${getClientId()}`, accessToken })\n // setPbiEmbedConfig({ ...pbiEmbedConfig, id, embedUrl: `${embedUrl}&$filter=Table/id eq '100'`, accessToken })\n });\n\n }, [])\n const handleExportReport = async () => {\n // const exportId = await handleExportId()\n const exportId = \"MS9CbG9iSWRWMi0xMWUzOWU5MC03MWQyLTRkNTktOTlhYS01NzgyYjgwZDAzMDdadmRLZmlBbnlDUDFEdXB3LW43SzE5SzItOGIxSjJ6QkpBelRlTktNN1VjPS4=\"\n console.log(exportId)\n const accessToken = await checkAccessTokenExpiration();\n const config = {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'Content-Type': 'application/pdf'\n }\n }\n try {\n const responsesss = await axios.get(`https://api.powerbi.com/v1.0/myorg/reports/5bdc13e1-1891-4216-b3cb-e6ea97f9e9cc/exports/${exportId}/file`, config)\n // console.log(typeof responsesss.data)\n const linkSource = `data:application/pdf;base64,${responsesss.data}`;\n const downloadLink = document.createElement(\"a\");\n const fileName = \"dashboard.pdf\";\n downloadLink.href = linkSource;\n downloadLink.download = fileName;\n downloadLink.click()\n\n } catch (err) {\n console.log(err)\n }\n }\n const handleExportId = async () => {\n const accessToken = await checkAccessTokenExpiration();\n const bodyParam =\n {\n \"format\": \"pdf\",\n \"powerBIReportConfiguration\": {\n \"settings\": {\n \"locale\": \"en-US\",\n \"timeZoneId\": \"Central Asia Standard Time\",\n \"excludeHiddenPages\": true\n }\n\n },\n \"sectionsToExport\": [\n \"ReportSection3c68044bd9e19bebdef0\"\n ]\n }\n const config = {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'Content-Type': 'application/json'\n }\n }\n try {\n const responsesss = await axios.post('https://wabi-australia-southeast-redirect.analysis.windows.net/export/reports/5bdc13e1-1891-4216-b3cb-e6ea97f9e9cc/asyncexports', bodyParam, config)\n // console.log(typeof responsesss.data)\n console.log(responsesss)\n return responsesss.data.id\n\n } catch (err) {\n console.log(err.message)\n }\n }\n return (\n <div>\n\n {/* {<Box display=\"flex\" justifyContent=\"flex-end\" my={2} >\n <Button variant=\"contained\" onClick={handleExportReport} endIcon={<FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />} sx={{\n width: \"210px\",\n marginRight: \"8px\",\n backgroundColor: \"#028FC2\",\n boxShadow: \"0\",\n height: '41px',\n // paddingX: '0',\n \"&:hover\": {\n backgroundColor: \"#027aa6\",\n color: \"white\",\n cursor: 'pointer',\n boxShadow: \"0\"\n // border: \"0.125rem solid lightgrey\"\n },\n '& .MuiButton-endIcon': {\n position: 'absolute',\n right: 0,\n // marginLeft: '8px', // Adjust margin as needed\n // paddingLeft: '8px', // Adjust padding as needed\n display: 'inline-flex', // Ensure icon and background have proper alignment\n alignItems: 'center', // Ensure icon and background have proper alignment\n justifyContent: 'center',\n padding: \"0\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: 'rgba(255,255,255,0.2)', // Adjust background color as needed\n fontSize: \"16px\",\n width: \"41px\",\n height: '41px',\n },\n '& .MuiButton-endIcon svg': {\n // Adjust SVG size if needed\n // width: '32px',\n // height: '41px',\n }\n }}>{\"Export\"}</Button>\n\n </Box>\n } */}\n {\n !pbiEmbedConfig.embedUrl ? <Loading /> : <PowerBIEmbed\n embedConfig={pbiEmbedConfig}\n eventHandlers={\n new Map([\n ['loaded', async function () {\n // await window.report.updateFilters(models.FiltersOperations.RemoveAll);\n // const filtersArray = [\n // {\n // $schema: \"http://powerbi.com/product/schema#basic\",\n // target: {\n // table: \"Projects\",\n // column: \"Client ID\"\n // },\n // operator: \"In\",\n // values: [getClientId()]\n // }\n // ];\n // await window.report.updateFilters(\n // models.FiltersOperations.Add,\n // filtersArray\n // );\n // console.log('Report has loaded', window.report);\n // navigator.clipboard.writeText(JSON.stringify(window.report))\n // console.log('Report has loaded', window.report);\n }],\n // ['rendered', async function () {\n // const filters = await window.report.getFilters();\n // console.log(filters)\n // }],\n ['error', function (event) { console.log(event.detail); }],\n ])\n }\n\n cssClassName={\"Embed-container\"}\n\n getEmbeddedComponent={(embeddedReport) => {\n console.log(embeddedReport)\n window.report = embeddedReport;\n }}\n />\n }\n\n </div>\n );\n}\n\nexport default DashboardPowerBI;","import { Title, useDataProvider } from \"react-admin\";\nimport { TokenStorage } from \"../utils/TokenStorage\";\nimport WithPermission from \"../utils/WithPermission\";\n// import ChangeImpact from \"./dashboardComponents/changeImpact\";\n// import NumberOfProjects from \"./dashboardComponents/numberOfProjects\";\n// import SmeRequired from \"./dashboardComponents/smeRequired\";\n// import UpcomingProject from \"./dashboardComponents/upcomingProject\";\nimport { impersonatedURL } from '../utils/AppUtils';\nimport DashboardPowerBI from '../views/powerbiReports/Dashboard';\nimport { makeStyles } from \"@mui/styles\";\nimport React from \"react\";\nimport { useHistory } from 'react-router-dom';\nimport PBIPortfolioEmbed from \"../views/portfolioReport/pbiPortfolioEmbed\";\nconst useStyles = makeStyles({\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n});\n\n\nexport const Dashboard = (props) => {\n const classes = useStyles();\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n const dataProvider = useDataProvider();\n const history = useHistory();\n impersonatedURL(isImpersonating, '#/?impersonated')\n\n React.useEffect(async () => {\n if (isSuperAdmin) {\n history.push('/user')\n }\n // setLoading(true);\n await dataProvider\n .getList(\"Faq\", {\n pagination: { page: 1, perPage: 1 },\n sort: { field: \"id\", order: \"ASC\" },\n filter: {},\n })\n .then((response) => {\n // setFaqs(response.data);\n // setLoading(false);\n })\n .catch((error) => {\n // setError(error.message);\n // setLoading(false);\n });\n }, []);\n\n\n return (\n <PBIPortfolioEmbed\n title=\"Portfolio Change Dashboard\"\n reportId='421050e3-5165-4937-8598-a9e41a955361'\n pageName=\"ReportSection34b4aead0ccafc11a6f7\"\n resource='Report'\n url=''\n />\n )\n}\n\nexport default Dashboard;\n\n// <WithPermission resource=\"Dashboard\" bypassUser={isCustomerAdmin} action={[\"view\"]} {...props} >\n{/* <Title title=\"Portfolio Change Dashboard\" className={classes.title} />\n <DashboardPowerBI /> */}\n// </WithPermission>","/* eslint-disable import/no-anonymous-default-export */\nimport { RouteWithoutLayout } from 'react-admin';\nimport { Route } from 'react-router-dom';\nimport ChangeAssessment from \"../views/changeAssessment\";\nimport AnalysisOverview from \"../views/changeAssessment/analysisOverview\";\nimport ChangeHeatMapBuWise from \"../views/changeHeatMap/allBusHeatMap\";\nimport ChangeHeatMap from \"../views/changeHeatMap/allProjectsHeatMap_modified\";\nimport Faqs from \"../views/faq\";\nimport { GovernanceAssessments } from '../views/impactAssesment/GovernanceAssessments';\nimport { RiskManagement } from '../views/impactAssesment/RiskManagement';\nimport { BusinessReadliness } from '../views/impactAssesment/businessReadliness';\nimport ForgotPassword from \"../views/login/forgotPassword\";\nimport MasterData from '../views/masterData';\nimport ChangeImpactAssessmentReport from '../views/powerbiReports/changeImpactAssessmentReports';\nimport KpiCriteria from '../views/project/kpiCriteria';\nimport { ProjectCreate } from '../views/project/projectCreate';\nimport SmeRequirementInputs from '../views/project/smeRequirementInputs';\nimport ChangeStatusReport from \"../views/reports/changeStatusReport\";\n// import SmeRequirementReport from \"../views/smeRequirement/smeRequirementReport\";\nimport ToolsAndTemplates from '../views/toolsAndTemplates';\nimport ChangePassword from \"../views/user/changePassword\";\nimport { KPI_CRITERIA_TYPE } from './constants';\nimport RiskAssessmentReport from '../views/powerbiReports/riskAssessmentReport';\nimport BusinessReadinessReport from '../views/powerbiReports/businessReadinessReport';\nimport ChangeGovernanceReport from '../views/powerbiReports/changeGovernanceReport';\nimport KpiCloseOutReport from '../views/powerbiReports/kpiCloseOutReport';\nimport KpiGoNoGoReport from '../views/powerbiReports/kpiGoNoGoReport';\nimport SmeRequirementReport from '../views/powerbiReports/smeRequirementReport';\nimport EnterpriseHealthSummary from '../views/powerbiReports/enterpriseHealthSummary';\nimport EnterpriseReport from '../views/powerbiReports/enterpriseReport';\nimport ThemeCustomization from '../views/themeCustomization';\nimport LearningCentre from '../views/learningCentre';\nimport CIAReport from '../views/projectReports/ciaReport';\nimport ChangeEnvironmentReport from '../views/projectReports/changeEnvironmentReport';\nimport ChangeSaturationReport from '../views/projectReports/changeSaturation';\nimport ChangeMaturityReport from '../views/projectReports/changeMaturity';\nimport ChangeHeatmapReport from '../views/projectReports/changeHeatmap';\nimport SMEReport from '../views/portfolioReport/smeReport';\nimport RiskManagementReport from '../views/portfolioReport/riskManagementReport';\nimport ChangeImpactReport from '../views/portfolioReport/changeImpactReport';\nimport ChangeEnvironmentPortfolioReport from '../views/portfolioReport/changeEnvironment';\nimport ChangeHeatmapPortfolioReport from '../views/portfolioReport/changeHeatmapReport';\nimport GoNoGoReport from '../views/projectReports/goNoGo';\nimport CRAProjectReport from '../views/projectReports/changeRiskAssessmentReport';\nimport BusinessReadinessProjectReport from '../views/projectReports/businessReadiness';\nimport ChangeGovernanceProjectReport from '../views/projectReports/changeGovernance';\nimport SMEReqProjectReport from '../views/projectReports/smeReqProject';\nimport CloseOutReport from '../views/projectReports/closeOut';\nimport ViewLearningContent from '../views/learningCentre/contentPage';\nimport Dashboard from './dashboard';\nexport default [\n <Route exact path=\"/MasterData\" component={MasterData} />,\n // <Route exact path=\"/ChangeAssessment/:projectId\" component={ChangeAssessment} />,\n <Route exact path=\"/ChangeImpactAssessment\" component={ChangeAssessment} />,\n\n <Route exact path=\"/risk_assessment\" component={RiskManagement} />,\n <Route exact path=\"/readiness\" component={BusinessReadliness} />,\n <Route exact path=\"/governance\" component={GovernanceAssessments} />,\n <Route exact path=\"/sme_requirements\" component={SmeRequirementInputs} />,\n <Route exact path=\"/go_no_go_criteria\">\n <KpiCriteria type={KPI_CRITERIA_TYPE.GONOGO} />\n </Route>,\n <Route exact path=\"/close_out_criteria\">\n <KpiCriteria type={KPI_CRITERIA_TYPE.CLOSEOUT} />\n </Route>,\n <Route exact path=\"/analysis_overview\" component={AnalysisOverview} />,\n <Route exact path=\"/dashboard\" component={Dashboard} />,\n // <Route exact path=\"/sme_requirements\" component={SmeRequirement} />,\n // <Route exact path=\"/sme_requirements_report\" component={SmeRequirementReport} />,\n // <Route exact path=\"/change_heat_map\" component={ChangeHeatMap} />,\n // <Route exact path=\"/change_heat_map_bu_wise\" component={ChangeHeatMapBuWise} />,\n <Route exact path=\"/change_password\" component={ChangePassword} />,\n <Route exact path=\"/faq\" component={Faqs} />,\n <Route exact path=\"/change_status_report\" component={ChangeStatusReport} />,\n <Route exact path=\"/cat_templates\" component={ToolsAndTemplates} />,\n <Route exact path=\"/powerbireports\" component={ChangeImpactAssessmentReport} />,\n <Route exact path=\"/projectCreate\" component={ProjectCreate} />,\n <Route exact path=\"/change_risk_report\" component={RiskAssessmentReport} />,\n <Route exact path=\"/change_business_readiness_report\" component={BusinessReadinessReport} />,\n // <Route exact path=\"/change_governance_report\" component={ChangeGovernanceReport} />,\n <Route exact path=\"/kpi_closeout_report\" component={KpiCloseOutReport} />,\n <Route exact path=\"/kpi_go_no_go_report\" component={KpiGoNoGoReport} />,\n <Route exact path=\"/enterprise_health_summary\" component={EnterpriseHealthSummary} />,\n <Route exact path=\"/enterprise_report\" component={EnterpriseReport} />,\n <Route exact path=\"/theme_customization\" component={ThemeCustomization} />,\n <Route exact path=\"/learning_centre\" component={LearningCentre} />,\n <Route exact path=\"/change_impact_project\" component={CIAReport} />,\n <Route exact path=\"/change_environment_project\" component={ChangeEnvironmentReport} />,\n <Route exact path=\"/change_saturation_project\" component={ChangeSaturationReport} />,\n <Route exact path=\"/change_maturity_project\" component={ChangeMaturityReport} />,\n <Route exact path=\"/change_heatmap_project\" component={ChangeHeatmapReport} />,\n <Route exact path=\"/sme_requirement_portfolio\" component={SMEReport} />,\n <Route exact path=\"/risk_management_portfolio\" component={RiskManagementReport} />,\n <Route exact path=\"/change_impact_portfolio\" component={ChangeImpactReport} />,\n <Route exact path=\"/change_environment_portfolio\" component={ChangeEnvironmentPortfolioReport} />,\n <Route exact path=\"/change_heatmap_portfolio\" component={ChangeHeatmapPortfolioReport} />,\n <Route exact path=\"/change_risk_assessment_report\" component={CRAProjectReport} />,\n <Route exact path=\"/business_readiness_report\" component={BusinessReadinessProjectReport} />,\n <Route exact path=\"/change_governance_report\" component={ChangeGovernanceProjectReport} />,\n <Route exact path=\"/sme_requirement_project_report\" component={SMEReqProjectReport} />,\n <Route exact path=\"/go_no_go_report\" component={GoNoGoReport} />,\n <Route exact path=\"/close_out_report\" component={CloseOutReport} />,\n <Route exact path=\"/learning_centre/:slug\" component={ViewLearningContent} />,\n <RouteWithoutLayout exact path=\"/forgot_password\" component={ForgotPassword} />,\n];","import { useRef } from 'react';\n\nexport default function useConstant(init) {\n const initiated = useRef(false);\n const ref = useRef(undefined);\n\n if (!initiated.current) {\n initiated.current = true;\n ref.current = init();\n }\n\n return ref.current;\n}","/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Box, List, ListItem, ListItemIcon, ListItemText } from \"@material-ui/core\";\nimport { MenuItemLink, usePermissions } from 'react-admin';\nimport { useLocation } from 'react-router-dom';\nimport Collapse from '@material-ui/core/Collapse';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport _ from \"lodash\";\nimport { hasPermissions } from \"../../utils/AppUtils\";\n\nconst useSidebarStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n popover: {\n pointerEvents: 'none',\n },\n popoverBody: {\n backgroundColor: \"#3e4d66\",\n width: \"100%\",\n },\n popoverContent: {\n pointerEvents: \"auto\"\n },\n menuItem: {\n color: \"white\",\n },\n listItemIcon: {\n color: theme.palette.primary.contrastText,\n minWidth: 56,\n paddingLeft: 7,\n },\n subMenuRoot: {\n color: theme.palette.primary.contrastText,\n paddingLeft: 40,\n },\n subSubMenuRoot: {\n color: theme.palette.primary.contrastText,\n paddingLeft: 60,\n },\n menuActive: {\n backgroundColor: theme.palette.primary.dark,\n },\n menuIcon: {\n width: 56,\n paddingLeft: 7,\n },\n}));\n\nexport const MainMenuItem = (props) => {\n const { pathname } = useLocation();\n const { key, to, primaryText, exact, leftIcon, isDrawerOpen, handleDrawerOpen } = props;\n const classes = useSidebarStyles();\n const [open, setOpen] = React.useState(false);\n const [show, setShow] = React.useState(false);\n const { loading: loadingPermissions, permissions } = usePermissions();\n const hasChildren = props.children ? true : false;\n\n const allowedPermissions = hasChildren ? _.map(props.children, \"props.allowedPermissions\").flat() : props.allowedPermissions;\n const bypassUsers = hasChildren ? _.map(props.children, \"props.bypassUser\").flat() : null;\n const { bypassUser } = props;\n\n const handleClick = () => {\n setOpen(!open);\n if (props.children && !isDrawerOpen) handleDrawerOpen();\n };\n\n React.useEffect(async () => {\n if (bypassUser || (!hasChildren && !allowedPermissions)) {\n setShow(true);\n } else if (hasChildren && bypassUsers && bypassUsers.filter(Boolean).length) {\n setShow(true)\n } else if (!loadingPermissions) {\n const checkedPermissions = await Promise.all(allowedPermissions.map(\n permission => hasPermissions(permissions.permissions, permission)\n ));\n const allowed = checkedPermissions.filter(Boolean).length > 0;\n setShow(allowed)\n }\n }, [loadingPermissions]);\n\n return (\n show && <React.Fragment>\n {props.children ?\n <React.Fragment>\n <ListItem button onClick={handleClick} classes={{ root: classes.menuItem, selected: classes.menuActive }} selected={pathname.startsWith(to)}>\n <ListItemIcon className={classes.listItemIcon}>\n {leftIcon}\n </ListItemIcon>\n <ListItemText primary={primaryText} />\n {open ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={isDrawerOpen && open} timeout=\"auto\" unmountOnExit>\n <List dense={true}>\n {props.children}\n </List>\n </Collapse>\n </React.Fragment> :\n <MenuItemLink\n classes={{ icon: classes.menuIcon, root: classes.menuItem, active: classes.menuActive }}\n key={key}\n to={to}\n primaryText={primaryText}\n onClick={props.onMobileMenuClick}\n exact={exact}\n leftIcon={React.cloneElement(leftIcon, { className: classes.menuItem })}>\n </MenuItemLink>\n }\n </React.Fragment>\n );\n}\n\nexport const SubMenuItem = ({ key, to, primaryText, allowedPermissions, bypassUser, leftIcon, onMobileMenuClick, children, isSubSubMenuOpen = false, handleDrawerOpen }) => {\n const classes = useSidebarStyles();\n const [show, setShow] = React.useState(false);\n const [open, setOpen] = React.useState(isSubSubMenuOpen);\n const { loading: loadingPermissions, permissions } = usePermissions();\n const hasChildren = children ? true : false;\n\n React.useEffect(async () => {\n if (bypassUser || !allowedPermissions) {\n setShow(true);\n } else if (!loadingPermissions) {\n const checkedPermissions = await Promise.all(allowedPermissions.map(\n permission => hasPermissions(permissions.permissions, permission)\n ));\n const allowed = checkedPermissions.filter(Boolean).length > 0;\n setShow(allowed)\n }\n }, [loadingPermissions]);\n\n const handleClick = () => {\n handleDrawerOpen();\n setOpen(!open);\n };\n\n return (\n show && <React.Fragment>\n {children ?\n <React.Fragment>\n <ListItem button onClick={handleClick} classes={{ root: classes.subMenuRoot }}>\n <ListItemIcon className={classes.menuItem}>\n {leftIcon}\n </ListItemIcon>\n {/* <ListItemText primary={primaryText + 1} style={{ color: \"red !important\" }} /> */}\n <span style={{ color: \"white\", width: \"100%\" }}>{primaryText}</span>\n {open ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List dense={true}>\n {children}\n </List>\n </Collapse>\n </React.Fragment> :\n <MenuItemLink\n classes={{\n root: classes.subMenuRoot,\n active: classes.menuActive,\n }}\n key={key}\n to={to}\n leftIcon={leftIcon}\n primaryText={primaryText}\n onClick={onMobileMenuClick}\n />\n }\n </React.Fragment>\n );\n}\n\nexport const SubSubMenuItem = ({ key, to, primaryText, leftIcon, allowedPermissions, bypassUser, children, onMobileMenuClick }) => {\n const classes = useSidebarStyles();\n const [show, setShow] = React.useState(false);\n const [open, setOpen] = React.useState(false);\n const { loading: loadingPermissions, permissions } = usePermissions();\n const hasChildren = children ? true : false;\n\n React.useEffect(async () => {\n if (bypassUser || !allowedPermissions) {\n setShow(true);\n } else if (!loadingPermissions) {\n const checkedPermissions = await Promise.all(allowedPermissions.map(\n permission => hasPermissions(permissions.permissions, permission)\n ));\n const allowed = checkedPermissions.filter(Boolean).length > 0;\n setShow(allowed)\n }\n }, [loadingPermissions]);\n\n const handleClick = () => {\n setOpen(!open);\n };\n\n return (\n show && <React.Fragment>\n {children ?\n <React.Fragment>\n <ListItem button onClick={handleClick} classes={{ root: classes.subSubMenuRoot }}>\n <ListItemIcon className={classes.menuItem}>\n {leftIcon}\n </ListItemIcon>\n <ListItemText primary={primaryText} />\n {open ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List dense={true}>\n {children}\n </List>\n </Collapse>\n </React.Fragment> :\n <MenuItemLink\n classes={{\n root: classes.subSubMenuRoot,\n active: classes.menuActive,\n }}\n key={key}\n to={to}\n leftIcon={leftIcon}\n primaryText={primaryText}\n onClick={onMobileMenuClick}\n />\n }\n </React.Fragment>\n );\n}\n\nexport default MainMenuItem;\n","import { Box, ListItem, Typography, useMediaQuery } from \"@material-ui/core\";\nimport Drawer from '@material-ui/core/Drawer';\nimport IconButton from \"@material-ui/core/IconButton\";\nimport List from '@material-ui/core/List';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { makeStyles } from '@material-ui/core/styles';\nimport AccountCircle from \"@material-ui/icons/AccountCircle\";\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport DonutLargeIcon from '@material-ui/icons/DonutLarge';\nimport LiveHelpIcon from '@material-ui/icons/LiveHelp';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport SignalCellularAltIcon from '@material-ui/icons/SignalCellularAlt';\nimport WorkIcon from '@material-ui/icons/Work';\nimport AdjustIcon from '@mui/icons-material/Adjust';\nimport AnalyticsIcon from '@mui/icons-material/Analytics';\nimport AttributionIcon from '@mui/icons-material/Attribution';\n\nimport BeenhereIcon from '@mui/icons-material/Beenhere';\nimport BusinessIcon from '@mui/icons-material/Business';\nimport BusinessCenterIcon from '@mui/icons-material/BusinessCenter';\nimport ChangeHistoryIcon from '@mui/icons-material/ChangeHistory';\nimport ExpandLess from '@mui/icons-material/ExpandLess';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\nimport GavelIcon from '@mui/icons-material/Gavel';\nimport Groups3Icon from '@mui/icons-material/Groups3';\nimport InterestsRoundedIcon from '@mui/icons-material/InterestsRounded';\nimport LibraryAddCheckIcon from '@mui/icons-material/LibraryAddCheck';\nimport LockIcon from '@mui/icons-material/Lock';\nimport LockOpenIcon from '@mui/icons-material/LockOpen';\nimport LogoutIcon from '@mui/icons-material/Logout';\nimport PersonIcon from '@mui/icons-material/Person';\nimport RecommendIcon from '@mui/icons-material/Recommend';\nimport SummarizeOutlinedIcon from '@mui/icons-material/SummarizeOutlined';\nimport Collapse from '@mui/material/Collapse';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport Menu from '@mui/material/Menu';\nimport Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip';\nimport { alpha, styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport _ from \"lodash\";\nimport * as React from \"react\";\nimport { NullableBooleanInput, useAuthProvider, useLogout, usePermissions, useRefresh } from \"react-admin\";\nimport { Link, useHistory } from 'react-router-dom';\nimport cat_logo_white from \"../assets/images/cat_logo_white.png\";\nimport { TokenStorage } from \"../utils/TokenStorage\";\nimport { MainMenuItem, SubMenuItem, SubSubMenuItem } from \"../views/customComponents/menuItem\";\nimport { Opacity } from \"@mui/icons-material\";\nimport PaletteIcon from '@mui/icons-material/Palette';\nimport AutoStoriesIcon from '@mui/icons-material/AutoStories';\nimport LocalLibraryIcon from '@mui/icons-material/LocalLibrary';\nimport PlaylistAddCheckCircleIcon from '@mui/icons-material/PlaylistAddCheckCircle';\nimport ReportProblemIcon from '@mui/icons-material/ReportProblem';\nimport AssignmentTurnedInIcon from '@mui/icons-material/AssignmentTurnedIn';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport RunningWithErrorsIcon from '@mui/icons-material/RunningWithErrors';\nimport NetworkCheckIcon from '@mui/icons-material/NetworkCheck';\nimport BubbleChartIcon from '@mui/icons-material/BubbleChart';\nimport { ThemeContext } from \"./theme/themeContext\";\n\nconst drawerWidth = 300;\n\n\n// const StyledMenu = styled((props) => (\n// <Menu\n// elevation={0}\n// anchorOrigin={{\n// vertical: 'top',\n// horizontal: 'right',\n// }}\n// transformOrigin={{\n// vertical: 'top',\n// horizontal: 'left',\n// }}\n// {...props}\n// />\n// ))(({ theme }) => ({\n// '& .MuiPaper-root': {\n// borderRadius: 6,\n// // marginTop: theme.spacing(5),\n// // marginLeft: theme.spacing(5),\n// padding: '4px 4px',\n// marginTop: '0',\n// minWidth: 180,\n// backgroundColor: '#00A0D9',\n// color:\n// theme.palette.mode === 'light' ? '#fff' : theme.palette.grey[300],\n// boxShadow:\n// 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\n// '& .MuiMenu-list': {\n// padding: '4px 0',\n// },\n// '& .MuiMenuItem-root': {\n// '& .MuiSvgIcon-root': {\n// fontSize: 18,\n// color: '#fff',\n// marginRight: theme.spacing(1.5),\n// },\n// '&:active': {\n// backgroundColor: alpha(\n// theme.palette.primary.main,\n// theme.palette.action.selectedOpacity,\n// ),\n// },\n// },\n// },\n// }));\n\nconst useSidebarStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n textTransform: 'capitalize'\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n marginRight: 36,\n },\n hide: {\n display: 'none',\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n },\n drawerOpen: {\n width: drawerWidth,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n backgroundColor: theme.palette.primary.main,\n },\n drawerClose: {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: theme.spacing(7) + 1,\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(9) + 1,\n },\n backgroundColor: theme.palette.primary.main,\n },\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: '0 12px',\n paddingLeft: 0,\n\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n toggleToolbar: {\n // display: 'flex',\n // alignItems: 'center',\n // justifyContent: 'flex-end',\n padding: '10px 2px',\n marginTop: '16px',\n // paddingLeft: 0,\n [theme.breakpoints.down('md')]: {\n display: 'none',\n\n },\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n toggleMenu: {\n position: 'relative',\n width: 30,\n height: 30,\n background: '#522d5b',\n borderTopRightRadius: '50%',\n borderBottomRightRadius: '50%',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: -15,\n left: 0,\n height: 15,\n width: 15,\n borderBottomLeftRadius: '50%',\n boxShadow: '0 7px 0 0 #522d5b',\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: -15,\n left: 0,\n height: 15,\n width: 15,\n borderTopLeftRadius: '50%',\n boxShadow: '0 -7px 0 0 #522d5b',\n }\n },\n menu: {\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n },\n },\n hamburgerMenu: {\n [theme.breakpoints.up('sm')]: {\n display: 'none'\n },\n },\n navIcon: {\n [theme.breakpoints.up('md')]: {\n display: 'none',\n\n },\n },\n // navIconLg: {\n // [theme.breakpoints.up('sm')]: {\n // display: 'none',\n\n // },\n // },\n paper: {\n // background: '#00A0D9 !important',\n background: `${theme.palette.primary.main} !important` \n }\n ,\n iconHover: {\n backgroundColor: \"transparent !important\",\n padding: 0,\n marginRight: 10,\n marginBottom: 10,\n cursor: \"auto\",\n },\n chevDown: {\n color: \"white\",\n display: \"flex\",\n alignItems: \"center\",\n marginLeft: 15,\n height: \"100%\",\n fontSize: 30,\n cursor: \"pointer\",\n },\n menuTypography: {\n textDecoration: \"none\",\n padding: theme.spacing(2),\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: '#E3E3E3'\n }\n },\n profileName: {\n fontFamily: \"Mulish\",\n fontWeight: 600,\n fontSize: 14,\n letterSpacing: 0.2,\n color: \"white\",\n textTransform: \"capitalize\",\n margin: 0,\n fontStyle: \"normal\",\n marginBottom: 7,\n\n },\n profileDesc: {\n fontFamily: \"Mulish\",\n fontSize: 10,\n letterSpacing: 0.2,\n color: \"white\",\n textTransform: \"capitalize\",\n fontStyle: \"normal\",\n margin: 0,\n },\n profileNmenu: {\n display: \"flex\",\n marginLeft: '25px',\n\n [theme.breakpoints.down('sm')]: {\n // display: 'none'\n },\n },\n hamburgerProfile: {\n width: '100%',\n color: 'white',\n textAlign: 'left !important'\n },\n paper: {\n overflowY: 'auto',\n },\n hoverContent: {\n position: 'absolute',\n // top: 0,\n // top: 0,\n left: 70,\n width: clsx(100 % - `${drawerWidth}px`),\n // height: '100vh',\n backgroundColor: theme.palette.primary.main,\n // padding: theme.spacing(2),\n display: 'none',\n zIndex: 100,\n borderRadius: '5px'\n\n },\n hoverContentVisible: {\n display: 'block',\n\n },\n navMenu: {\n width: '70vw',\n // backgroundColor: \"#00A0D9\",\n backgroundColor: theme.palette.primary.main,\n [theme.breakpoints.up('md')]: {\n display: 'none',\n opacity: 0,\n '& .MuiBackdrop-root': {\n display: 'none !important'\n }\n },\n }\n\n}));\n\nconst formatProfileDetail = (user) => {\n const user_role = user.isSuperAdmin\n ? \"Super Admin\"\n : user.isCustomerAdmin\n ? \"Customer Admin\"\n : _.map(user.roles, \"name\");\n return {\n name: user.fullName,\n role: user_role,\n isImpersonating: user.isImpersonating,\n };\n};\n\nconst Sidebar = ({ open, handleDrawer, handleDrawerOpen, handleDrwerClose }) => {\n const classes = useSidebarStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [state, setState] = React.useState(false);\n const [profileArrowOpen, setProfileArrowOpen] = React.useState(false);\n const [subAchorEl, setSubAnchorEl] = React.useState(null);\n const [hoverContentVisible, setHoverContentVisible] = React.useState(false);\n const {theme, setTheme} = React.useContext(ThemeContext)\n const subMenuOpen = Boolean(subAchorEl);\n const handleSidebarCollaps = () => {\n handleCloseSubMenu()\n handleDrawer()\n }\n\n const toggleHoverContent = (param) => {\n setHoverContentVisible(param);\n };\n const handleClick = () => {\n handleDrawerOpen();\n setProfileArrowOpen(!profileArrowOpen);\n handleCloseSubMenu()\n };\n\n const [canViewResource, setCanViewResource] = React.useState();\n const [isSuperAdmin, setIsSuperAdmin] = React.useState();\n const [isCustomerAdmin, setIsCustomerAdmin] = React.useState();\n const ref = React.useRef(null);\n\n const { loading: loadingPermissions, permissions } = usePermissions();\n\n const handleClickOutside = (event) => {\n if (ref.current && !ref.current.contains(event.target)) {\n handleDrwerClose();\n handleCloseSubMenu()\n handleProfileClose();\n }\n };\n // profile bar\n const history = useHistory();\n const [block, setBlock] = React.useState(false)\n // const theme = useTheme();\n const [profielBarOpen, setOpen] = React.useState(false);\n const [profile, setProfile] = React.useState({\n name: \"\",\n role: \"\",\n isImpersonating: false,\n });\n const [menuName, setMenuName] = React.useState(null);\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n\n\n\n const handleOpenSubMenu = (event, name) => {\n setMenuName(name)\n setSubAnchorEl(event.currentTarget);\n };\n const handleCloseSubMenu = () => {\n setMenuName(\"\")\n setSubAnchorEl(null);\n };\n const logout = useLogout();\n const authProvider = useAuthProvider();\n const refresh = useRefresh();\n\n const profileOpen = Boolean(anchorEl);\n\n const handleProfileMenu = (event) => {\n setAnchorEl(event.currentTarget);\n };\n const handleProfileClose = () => {\n setProfileArrowOpen(false);\n setState(false);\n setAnchorEl(null);\n };\n\n const handleProfileLogoutClick = () => {\n logout();\n handleProfileClose();\n setState(false);\n };\n\n const handleStopImpersonationClick = () => {\n // redirect to home page\n history.push(\"/\");\n TokenStorage.clearImpersonateUserDetails();\n\n // refresh page to clear all the states\n window.location.hash = \"#/user\"\n window.location.reload();\n authProvider.getUserDetails().then(user => {\n const formattedProfile = formatProfileDetail(user)\n setProfile(formattedProfile);\n refresh(true)\n }).catch(error => {\n\n })\n setState(false);\n };\n const handleProfileClick = () => {\n handleProfileClose();\n history.push(\"/change_password\");\n setState(false);\n }\n\n React.useEffect(() => {\n // set profile details of impersonating user\n // if there is no impersonate user,\n // set profile details of original user\n authProvider\n .getUserDetails()\n .then((user) => {\n const formattedProfile = formatProfileDetail(user);\n setProfile(formattedProfile);\n })\n .catch((error) => { });\n }, []);\n\n //end of profile bar\n const list = (\n <Box\n sx={{ width: \"70vw\", display: \"flex\", flexDirection: 'column', justifyContent: 'space-between', height: \"100vh\" }}\n role=\"presentation\"\n\n >\n <List style={{ display: \"flex\", flexDirection: 'column', justifyContent: 'space-between', height: '100%', overflowY: 'auto', overflowX: 'hidden' }}>\n <div>\n <List>\n {!isSuperAdmin && <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Dashboard\"\n to=\"/\"\n exact\n leftIcon={<DashboardIcon />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Dashboard\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n\n >\n </MainMenuItem>}\n {\n !isSuperAdmin &&\n\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Projects\"\n to=\"/project\"\n exact\n leftIcon={<WorkIcon />}>\n </MainMenuItem>\n }\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Change Assessments (Input)\"\n to=\"/project\"\n exact\n leftIcon={<AssignmentIcon />}\n bypassUser={isCustomerAdmin}\n // allowedPermissions={[\n // { resource: \"Project\", action: [\"view\"] },\n // { resource: \"Milestone\", action: [\"view\"] },\n // { resource: \"SME Requirement\", action: [\"view\"] },\n // ]}\n >\n <SubMenuItem\n leftIcon={<ChangeHistoryIcon sx={{ color: 'white' }} />}\n to={`/risk_assessment`}\n primaryText=\"Change Risk Assessment\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<BusinessCenterIcon sx={{ color: 'white' }} />}\n to={`/readiness`}\n primaryText=\"Business Readiness\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<GavelIcon sx={{ color: 'white' }} />}\n to={`/governance`}\n primaryText=\"Change Governance\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<Groups3Icon sx={{ color: 'white' }} />}\n to={`/sme_requirements`}\n primaryText=\"SME Requirements\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<RecommendIcon sx={{ color: 'white' }} />}\n to={`/go_no_go_criteria`}\n primaryText=\"Go/No-Go Criteria\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<BeenhereIcon sx={{ color: 'white' }} />}\n to={`/close_out_criteria`}\n primaryText=\"Project Close-Out\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n </MainMenuItem>\n\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Reports\"\n to=\"/project\"\n exact\n leftIcon={<DonutLargeIcon />}>\n <SubMenuItem\n key=\"sub-menu-1\"\n to=\"/reports\"\n primaryText=\"Portfolio Reports\"\n leftIcon={<AssessmentIcon />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n handleDrawerOpen={handleDrawerOpen}\n onMobileMenuClick={() => setState(true)}\n >\n <SubSubMenuItem\n key=\"sub-sub-menu-1\"\n to=\"/change_impact_portfolio\"\n primaryText=\"Change Impact\"\n leftIcon={<AnalyticsIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-2\"\n to=\"/change_environment_portfolio\"\n primaryText=\"Change Environment\"\n leftIcon={<PlaylistAddCheckCircleIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-3\"\n to=\"/risk_management_portfolio\"\n primaryText=\"Risk Management\"\n leftIcon={<ReportProblemIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-4\"\n to=\"/sme_requirement_portfolio\"\n primaryText=\"SME Requirement\"\n leftIcon={<Groups3Icon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-5\"\n to=\"/change_heatmap_portfolio\"\n primaryText=\"Change Heatmap\"\n leftIcon={<BubbleChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n </SubMenuItem>\n <SubMenuItem\n key=\"sub-menu-2\"\n to=\"/project_report\"\n primaryText=\"Project Reports\"\n leftIcon={<AssignmentTurnedInIcon />}\n bypassUser={isCustomerAdmin}\n handleDrawerOpen={handleDrawerOpen}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n >\n <SubSubMenuItem\n key=\"sub-sub-menu-1\"\n to=\"/change_impact_project\"\n primaryText=\"Change Impact Assessment\"\n leftIcon={<BarChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-2\"\n to=\"/change_environment_project\"\n primaryText=\"Change Environment\"\n leftIcon={<PlaylistAddCheckCircleIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-3\"\n to=\"/change_saturation_project\"\n primaryText=\"Change Saturation\"\n leftIcon={<RunningWithErrorsIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-4\"\n to=\"/change_maturity_project\"\n primaryText=\"Change Maturity\"\n leftIcon={<NetworkCheckIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-5\"\n to=\"/change_heatmap_project\"\n primaryText=\"Change Heatmap\"\n leftIcon={<BubbleChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-6\"\n to=\"/change_risk_assessment_report\"\n primaryText=\"Change Risk Assessment\"\n leftIcon={<ChangeHistoryIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-7\"\n to=\"/business_readiness_report\"\n primaryText=\"Business Readiness\"\n leftIcon={<BusinessCenterIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-8\"\n to=\"/change_governance_report\"\n primaryText=\"Change Governance\"\n leftIcon={<GavelIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-9\"\n to=\"/sme_requirement_project_report\"\n primaryText=\"SME Requirements\"\n leftIcon={<Groups3Icon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-10\"\n to=\"/go_no_go_report\"\n primaryText=\"Go/No-Go Criteria\"\n leftIcon={<RecommendIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-11\"\n to=\"/close_out_report\"\n primaryText=\"Project Close-Out\"\n leftIcon={<BeenhereIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n </SubMenuItem>\n </MainMenuItem>\n {!isSuperAdmin && <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Tools and Templates\"\n to=\"/cat_templates\"\n exact\n leftIcon={<InterestsRoundedIcon fontSize=\"13\" />}\n bypassUser={isCustomerAdmin}\n onMobileMenuClick={() => setState(false)}\n >\n\n </MainMenuItem>}\n {!isSuperAdmin && <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Learning Centre\"\n to=\"/learning_centre\"\n exact\n leftIcon={<AutoStoriesIcon fontSize=\"12\" />}\n bypassUser={isCustomerAdmin}\n onMobileMenuClick={() => setState(false)}\n >\n\n </MainMenuItem>}\n {!isSuperAdmin && <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"FAQs\"\n to=\"/faq\"\n exact\n leftIcon={<LiveHelpIcon />}\n bypassUser={isCustomerAdmin}\n onMobileMenuClick={() => setState(false)}\n // allowedPermissions={[\n // { resource: \"FAQs\", action: [\"view\"] },\n // ]}\n >\n </MainMenuItem>}\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Set Up\"\n to=\"/user\"\n exact\n leftIcon={<SettingsIcon />}>\n <SubMenuItem\n to={`/BusinessUnit`}\n primaryText=\"Organisational Chart\"\n bypassUser={isCustomerAdmin}\n leftIcon={<BusinessIcon sx={{ color: \"white\" }} />}\n allowedPermissions={[\n { resource: \"BusinessUnit\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n to={`/user`}\n primaryText={isCustomerAdmin ? \"Roles and Users\" : \"Users\"}\n leftIcon={<PersonIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin || isSuperAdmin}\n allowedPermissions={[\n { resource: \"User\", action: [\"view\"] },\n { resource: \"Role\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n to={`/permission`}\n primaryText=\"Permission\"\n bypassUser={isSuperAdmin}\n leftIcon={<LockIcon sx={{ color: \"white\" }} />}\n allowedPermissions={[\n { resource: \"Permission\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n to={`/MasterData`}\n primaryText=\"Master Data\"\n bypassUser={isSuperAdmin}\n leftIcon={<AnalyticsIcon sx={{ color: \"white\" }} />}\n allowedPermissions={[\n { resource: \"MasterData\", action: [\"view\", \"edit\", \"create\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n to={`/theme_customization`}\n primaryText=\"Theme Customization\"\n leftIcon={<PaletteIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Theme\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n </MainMenuItem>\n\n\n </List>\n </div>\n {/* profile bar */}\n </List>\n <div>\n <div>\n <List >\n <ListItemButton onClick={handleClick}>\n <ListItemIcon style={{ paddingLeft: '8px' }}>\n <AccountCircle style={{ color: 'white', fontSize: '24px' }} />\n </ListItemIcon>\n <ListItemText primary={<div >\n <h3 className={classes.profileName}>{profile.name}</h3>\n <h3 className={classes.profileDesc}>{profile.role}</h3>\n </div>} />\n {profileArrowOpen ? <ExpandLess style={{ color: 'white' }} /> : <ExpandMore style={{ color: 'white' }} />}\n </ListItemButton>\n <Collapse in={profileArrowOpen} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n\n {\n !profile.isImpersonating &&\n <ListItemButton sx={{ pl: 5, color: 'white' }} onClick={handleProfileClick}>\n <ListItemText primary=\"Change Password\" />\n </ListItemButton>\n }\n <ListItemButton sx={{ pl: 5, color: 'white' }}\n onClick={handleProfileLogoutClick}>\n <ListItemText primary=\"Logout\" />\n </ListItemButton>\n {\n profile.isImpersonating &&\n <Tooltip\n\n placement=\"top\"\n >\n <ListItemButton sx={{ pl: 5, color: 'white' }} onClick={handleStopImpersonationClick}>\n <ListItemText primary=\"Stop Impersonation\" />\n </ListItemButton>\n </Tooltip>\n\n }\n </List>\n </Collapse>\n <Tooltip placement=\"top\" title=\"Logout\">\n <ListItemButton sx={{ pl: 3, color: 'white' }}\n onClick={handleProfileLogoutClick}>\n <ListItemIcon>\n <LogoutIcon style={{ color: 'white' }} />\n </ListItemIcon>\n <ListItemText primary=\"Logout\" />\n </ListItemButton>\n </Tooltip>\n {\n profile.isImpersonating &&\n <Tooltip placement=\"top\" title=\"Stop Impersonation\">\n <ListItemButton sx={{ pl: 3, color: 'white' }} onClick={handleStopImpersonationClick}>\n <ListItemIcon>\n <LockOpenIcon style={{ color: 'white' }} />\n </ListItemIcon>\n <ListItemText primary=\"Stop Impersonation\" />\n </ListItemButton>\n </Tooltip>\n }\n </List>\n\n </div>\n </div>\n <Typography variant=\"body2\" style={{ color: 'white', marginLeft: '30px', marginTop: '20px' }} display=\"block\" gutterBottom>\n v 0.0.1\n </Typography>\n </Box>\n );\n\n const HoverDashboard = (\n <Box id=\"sub-dashboard\" style={{ color:'#fff' }}>\n <List>\n <ListItem button component={Link} to=\"/\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <DashboardIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Dashboard\" />\n </ListItem>\n </List>\n </Box>\n )\n const hoverTools = (\n <div>\n {!open &&\n <Box style={{ color: '#fff' }}>\n <List>\n <ListItem button component={Link} to=\"/cat_templates\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <InterestsRoundedIcon fontSize=\"13\" style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Tools and Templates\" />\n </ListItem>\n </List>\n </Box>\n }\n </div>\n\n )\n\n const hoverLearningCentre = (\n <div>\n {!open &&\n <Box style={{ color: '#fff' }}>\n <List>\n <ListItem button component={Link} to=\"/learning_centre\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <AutoStoriesIcon fontSize=\"12\" style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Learning Centre\" />\n </ListItem>\n </List>\n </Box>\n }\n </div>\n\n )\n\n const hoverFAQ = (\n <div>\n {!open &&\n <Box style={{ color: '#fff' }}>\n <List>\n <ListItem button component={Link} to=\"/faq\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <LiveHelpIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"FAQs\" />\n </ListItem>\n </List>\n </Box>\n }\n </div>\n\n )\n const HoverProject = (\n <div>\n {!open && <Box style={{ color: '#fff' }}>\n <List>\n <ListItem button component={Link} to=\"/project\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <WorkIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Projects\" />\n {/* {subMenuOpen ? <ExpandLess /> : <ExpandMore />} */}\n </ListItem>\n </List>\n </Box>}\n </div>\n )\n const HoverAssessment = (\n <div>\n {\n !open &&\n\n <Box style={{ color: '#fff' }}>\n <List id=\"sub-menu-item\">\n <ListItem button>\n <ListItemIcon>\n <AssignmentIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Change Assessments (Input)\" />\n {subMenuOpen ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={subMenuOpen} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding >\n <SubMenuItem\n leftIcon={<ChangeHistoryIcon sx={{ color: 'white' }} />}\n to={`/risk_assessment`}\n primaryText=\"Change Risk Assessment\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<BusinessCenterIcon sx={{ color: 'white' }} />}\n to={`/readiness`}\n primaryText=\"Change Business Readiness\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<GavelIcon sx={{ color: 'white' }} />}\n to={`/governance`}\n primaryText=\"Change Governance\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<Groups3Icon sx={{ color: 'white' }} />}\n to={`/sme_requirements`}\n primaryText=\"SME Requirements\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<RecommendIcon sx={{ color: 'white' }} />}\n to={`/go_no_go_criteria`}\n primaryText=\"Go/No-Go Criteria\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<BeenhereIcon sx={{ color: 'white' }} />}\n to={`/close_out_criteria`}\n primaryText=\"Close-Out Criteria\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n </List>\n </Collapse>\n </List>\n </Box>\n }\n </div>\n )\n\n const HoverReports = (\n <div>\n {\n !open &&\n\n <Box style={{ color: '#fff' }}>\n <List>\n <ListItem button>\n <ListItemIcon>\n <DonutLargeIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Reports\" />\n {subMenuOpen ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={subMenuOpen} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n <SubMenuItem\n key=\"sub-menu-1\"\n to=\"/reports\"\n primaryText=\"Portfolio Reports\"\n leftIcon={<AssessmentIcon />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n handleDrawerOpen={() => { }}\n isSubSubMenuOpen={true}\n onMobileMenuClick={() => setState(true)}\n >\n <SubSubMenuItem\n key=\"sub-sub-menu-1\"\n to=\"/change_impact_portfolio\"\n primaryText=\"Change Impact\"\n leftIcon={<AnalyticsIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-2\"\n to=\"/change_environment_portfolio\"\n primaryText=\"Change Environment\"\n leftIcon={<PlaylistAddCheckCircleIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-3\"\n to=\"/risk_management_portfolio\"\n primaryText=\"Risk Management\"\n leftIcon={<ReportProblemIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-4\"\n to=\"/sme_requirement_portfolio\"\n primaryText=\"SME Requirement\"\n leftIcon={<Groups3Icon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-5\"\n to=\"/change_heatmap_portfolio\"\n primaryText=\"Change Heatmap\"\n leftIcon={<BubbleChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n </SubMenuItem>\n <SubMenuItem\n key=\"sub-menu-2\"\n to=\"/project_report\"\n primaryText=\"Project Reports\"\n leftIcon={<AssignmentTurnedInIcon />}\n bypassUser={isCustomerAdmin}\n handleDrawerOpen={() => { }}\n isSubSubMenuOpen={true}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n >\n <SubSubMenuItem\n key=\"sub-sub-menu-1\"\n to=\"/change_impact_project\"\n primaryText=\"Change Impact Assessment\"\n leftIcon={<BarChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-2\"\n to=\"/change_environment_project\"\n primaryText=\"Change Environment\"\n leftIcon={<PlaylistAddCheckCircleIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-3\"\n to=\"/change_saturation_project\"\n primaryText=\"Change Saturation\"\n leftIcon={<RunningWithErrorsIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-4\"\n to=\"/change_maturity_project\"\n primaryText=\"Change Maturity\"\n leftIcon={<NetworkCheckIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-5\"\n to=\"/change_heatmap_project\"\n primaryText=\"Change Heatmap\"\n leftIcon={<BubbleChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-6\"\n to=\"/change_risk_assessment_report\"\n primaryText=\"Change Risk Assessment\"\n leftIcon={<ChangeHistoryIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-7\"\n to=\"/business_readiness_report\"\n primaryText=\"Business Readiness\"\n leftIcon={<BusinessCenterIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-8\"\n to=\"/change_governance_report\"\n primaryText=\"Change Governance\"\n leftIcon={<GavelIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-9\"\n to=\"/sme_requirement_project_report\"\n primaryText=\"SME Requirements\"\n leftIcon={<Groups3Icon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-10\"\n to=\"/go_no_go_report\"\n primaryText=\"Go/No-Go Criteria\"\n leftIcon={<RecommendIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-11\"\n to=\"/close_out_report\"\n primaryText=\"Project Close-Out\"\n leftIcon={<BeenhereIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n </SubMenuItem>\n </List>\n </Collapse>\n </List>\n </Box>\n }\n </div>\n )\n const HoverSetup = (\n <div>\n {\n !open &&\n\n <Box style={{ color: '#fff' }}>\n <List>\n\n <ListItem button>\n <ListItemIcon>\n <SettingsIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Set Up\" />\n {subMenuOpen ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={subMenuOpen} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {\n isCustomerAdmin && <ListItem button className={classes.nested} component={Link} to=\"/BusinessUnit\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <BusinessIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Organisational Chart\" />\n </ListItem>\n }\n {\n (isCustomerAdmin || isSuperAdmin) && <ListItem button className={classes.nested} component={Link} to=\"/user\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <PersonIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary={isCustomerAdmin ? \"Roles and Users\" : \"Users\"} />\n </ListItem>\n }\n {\n isSuperAdmin && <ListItem button className={classes.nested} component={Link} to=\"/permission\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <LockIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Permission\" />\n </ListItem>\n }\n {\n isSuperAdmin && <ListItem button className={classes.nested} component={Link} to=\"/MasterData\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <AnalyticsIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Master Data\" />\n </ListItem>\n }\n {\n (isCustomerAdmin) && <ListItem button className={classes.nested} component={Link} to=\"/theme_customization\" onClick={handleCloseSubMenu}>\n <ListItemIcon>\n <PaletteIcon style={{ color: \"#fff\" }} />\n </ListItemIcon>\n <ListItemText primary=\"Theme Customization\" />\n </ListItem>\n }\n </List>\n </Collapse>\n </List>\n </Box>\n }\n </div>\n )\n const hoverAccounts = (\n <div>\n {!open &&\n <List style={{ display: \"flex\", flexDirection: 'column', justifyContent: 'flex-start', color: '#fff' }}>\n <ListItemButton onClick={handleClick}>\n <ListItemIcon style={{ paddingLeft: '8px' }}>\n <AccountCircle style={{ color: 'white', fontSize: '24px' }} />\n </ListItemIcon>\n <ListItemText primary={<div >\n <h3 className={classes.profileName}>{profile.name}</h3>\n <h3 className={classes.profileDesc}>{profile.role}</h3>\n </div>} />\n {!profile.isImpersonating && (subMenuOpen ? <ExpandLess style={{ color: 'white' }} /> : <ExpandMore style={{ color: 'white' }} />)}\n </ListItemButton>\n <Collapse in={subMenuOpen} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n\n {\n !profile.isImpersonating &&\n <ListItemButton sx={{ pl: 5, color: 'white' }} onClick={handleProfileClick}>\n <ListItemText primary=\"Change Password\" />\n </ListItemButton>\n }\n </List>\n </Collapse>\n </List>\n }\n </div>\n )\n React.useEffect(() => {\n\n const user = TokenStorage.getUserDetails();\n if (user) {\n setIsSuperAdmin(user.isSuperAdmin)\n setIsCustomerAdmin(user.isCustomerAdmin)\n }\n\n document.addEventListener('click', handleClickOutside, true);\n return () => {\n document.removeEventListener('click', handleClickOutside, true);\n };\n\n\n\n\n }, []);\n\n React.useEffect(() => {\n\n handleHoverDomMenu('main-dashboard', 'sub-dashboard', '15px')\n\n handleHoverDomMenu('main-project', \"sub-project\", '30px')\n\n handleHoverDomMenu('main-assessment', \"sub-assessment\", '45px')\n\n handleHoverDomMenu('main-reports', \"sub-reports\", '60px')\n\n handleHoverDomMenu('main-learning', \"sub-learning\", '75px');\n handleHoverDomMenu('main-tools', \"sub-tools\", '75px');\n\n handleHoverDomMenu('main-setup', \"sub-setup\", '90px')\n\n handleHoverDomMenu('main-faq', \"sub-faq\", '105px')\n\n handleHoverDomMenu('main-account', \"sub-account\", '105px')\n\n }, [menuName])\n function handleHoverDomMenu(mainId, subId, mt) {\n const menuItem = document.getElementById(`${mainId}`);\n const submenu = document.getElementById(`${subId}`);\n if (menuItem && submenu) {\n menuItem.addEventListener('mouseenter', function () {\n\n const rect = this.getBoundingClientRect();\n const offsetTop = rect.top + window.pageYOffset;\n\n const height = rect.height;\n const offsetBottom = offsetTop - height;\n\n submenu.style.marginTop = mainId === \"main-account\" ? `${offsetBottom + 30}px` : `${offsetTop}px`;\n submenu.style.display = 'block';\n });\n submenu.addEventListener('mouseenter', function () {\n submenu.style.display = 'block';\n });\n menuItem.addEventListener('mouseleave', function () {\n submenu.style.display = 'none';\n });\n submenu.addEventListener('mouseleave', function () {\n submenu.style.display = 'none';\n });\n submenu.addEventListener('click', function () {\n submenu.style.display = 'none';\n });\n }\n\n }\n return (\n <>\n <div style={{ display: 'flex', alignItems: 'flex-start' }}>\n <Drawer\n ref={ref}\n variant=\"permanent\"\n className={clsx(classes.drawer, classes.menu, {\n [classes.drawerOpen]: open,\n [classes.drawerClose]: !open,\n })}\n classes={{\n paper: clsx(classes.paper, {\n [classes.drawerOpen]: open,\n [classes.drawerClose]: !open,\n\n }),\n\n }}\n sx={{ overflow: 'visible !important' }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between', height: '100vh', overflowY: 'auto', overflowX: 'hidden' }}>\n <div>\n <div style={{ margin: 8, marginTop: 12, }}>\n <img src={theme.img} width=\"100%\" alt=\"Sidebar Change Assessment Tool Logo\" />\n </div>\n\n <List style={{ position: \"relative\", textTransform: \"capitalize\" }}>\n\n {!isSuperAdmin && <div id=\"main-dashboard\"\n onMouseEnter={(e) => handleOpenSubMenu(e, 'dashboard')}\n > <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n onClick={handleCloseSubMenu}\n primaryText=\"Dashboard\"\n to=\"/\"\n exact\n leftIcon={<DashboardIcon />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Dashboard\", action: [\"view\"] },\n ]}>\n </MainMenuItem>\n </div>}\n {!isSuperAdmin &&\n <div id=\"main-project\" onMouseEnter={(e) => handleOpenSubMenu(e, 'project')}>\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Projects\"\n to=\"/project\"\n exact\n leftIcon={<WorkIcon />}>\n </MainMenuItem>\n </div>\n }\n\n <div id=\"main-assessment\" onMouseEnter={(e) => handleOpenSubMenu(e, 'assessment')}>\n\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Change Assessment (Input)\"\n to=\"/project\"\n exact\n leftIcon={<AssignmentIcon />}\n bypassUser={isCustomerAdmin}\n // allowedPermissions={[\n // { resource: \"Project\", action: [\"view\"] },\n // { resource: \"Milestone\", action: [\"view\"] },\n // { resource: \"SME Requirement\", action: [\"view\"] },\n // ]}\n >\n <SubMenuItem\n leftIcon={<ChangeHistoryIcon sx={{ color: 'white' }} />}\n to={`/risk_assessment`}\n primaryText=\"Change Risk Assessment\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<BusinessCenterIcon sx={{ color: 'white' }} />}\n to={`/readiness`}\n primaryText=\"Business Readiness\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<GavelIcon sx={{ color: 'white' }} />}\n to={`/governance`}\n primaryText=\"Change Governance\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<Groups3Icon sx={{ color: 'white' }} />}\n to={`/sme_requirements`}\n primaryText=\"SME Requirements\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<RecommendIcon sx={{ color: 'white' }} />}\n to={`/go_no_go_criteria`}\n primaryText=\"Go/No-Go Criteria\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n <SubMenuItem\n leftIcon={<BeenhereIcon sx={{ color: 'white' }} />}\n to={`/close_out_criteria`}\n primaryText=\"Project Close-Out\"\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Change Assessment\", action: [\"edit\"] },\n { resource: \"Change Assessment\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n </MainMenuItem>\n\n </div>\n <div id=\"main-reports\" onMouseEnter={(e) => handleOpenSubMenu(e, 'reports')}>\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Reports\"\n to=\"/project\"\n exact\n leftIcon={<DonutLargeIcon />}\n\n >\n <SubMenuItem\n key=\"sub-menu-1\"\n to=\"/reports\"\n primaryText=\"Portfolio Reports\"\n leftIcon={<AssessmentIcon />}\n bypassUser={isCustomerAdmin}\n handleDrawerOpen={() => { }}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n >\n <SubSubMenuItem\n key=\"sub-sub-menu-1\"\n to=\"/change_impact_portfolio\"\n primaryText=\"Change Impact\"\n leftIcon={<AnalyticsIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-2\"\n to=\"/change_environment_portfolio\"\n primaryText=\"Change Environment\"\n leftIcon={<PlaylistAddCheckCircleIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-3\"\n to=\"/risk_management_portfolio\"\n primaryText=\"Risk Management\"\n leftIcon={<ReportProblemIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-4\"\n to=\"/sme_requirement_portfolio\"\n primaryText=\"SME Requirement\"\n leftIcon={<Groups3Icon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-5\"\n to=\"/change_heatmap_portfolio\"\n primaryText=\"Change Heatmap\"\n leftIcon={<BubbleChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n </SubMenuItem>\n <SubMenuItem\n key=\"sub-menu-2\"\n to=\"/project_report\"\n primaryText=\"Project Reports\"\n leftIcon={<AssignmentTurnedInIcon />}\n bypassUser={isCustomerAdmin}\n handleDrawerOpen={() => { }}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n >\n <SubSubMenuItem\n key=\"sub-sub-menu-1\"\n to=\"/change_impact_project\"\n primaryText=\"Change Impact Assessment\"\n leftIcon={<BarChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-2\"\n to=\"/change_environment_project\"\n primaryText=\"Change Environment\"\n leftIcon={<PlaylistAddCheckCircleIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-3\"\n to=\"/change_saturation_project\"\n primaryText=\"Change Saturation\"\n leftIcon={<RunningWithErrorsIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-4\"\n to=\"/change_maturity_project\"\n primaryText=\"Change Maturity\"\n leftIcon={<NetworkCheckIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-5\"\n to=\"/change_heatmap_project\"\n primaryText=\"Change Heatmap\"\n leftIcon={<BubbleChartIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-6\"\n to=\"/change_risk_assessment_report\"\n primaryText=\"Change Risk Assessment\"\n leftIcon={<ChangeHistoryIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-7\"\n to=\"/business_readiness_report\"\n primaryText=\"Business Readiness\"\n leftIcon={<BusinessCenterIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-8\"\n to=\"/change_governance_report\"\n primaryText=\"Change Governance\"\n leftIcon={<GavelIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-9\"\n to=\"/sme_requirement_project_report\"\n primaryText=\"SME Requirements\"\n leftIcon={<Groups3Icon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-10\"\n to=\"/go_no_go_report\"\n primaryText=\"Go/No-Go Criteria\"\n leftIcon={<RecommendIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n <SubSubMenuItem\n key=\"sub-sub-menu-11\"\n to=\"/close_out_report\"\n primaryText=\"Project Close-Out\"\n leftIcon={<BeenhereIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Report\", action: [\"view\"] },\n ]}\n />\n </SubMenuItem>\n </MainMenuItem>\n </div>\n\n {!isSuperAdmin && <div id=\"main-tools\" onMouseEnter={(e) => handleOpenSubMenu(e, 'tools')}>\n\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Tools and Templates\"\n to=\"/cat_templates\"\n exact\n leftIcon={<InterestsRoundedIcon fontSize=\"13\" />}\n bypassUser={isCustomerAdmin}\n onMobileMenuClick={() => setState(false)}\n >\n </MainMenuItem> </div>}\n {!isSuperAdmin && <div id=\"main-learning\" onMouseEnter={(e) => handleOpenSubMenu(e, 'learning')}>\n\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Learning Centre\"\n to=\"/learning_centre\"\n exact\n leftIcon={<AutoStoriesIcon fontSize=\"12\" />}\n bypassUser={isCustomerAdmin}\n onMobileMenuClick={() => setState(false)}\n >\n </MainMenuItem> </div>}\n {!isSuperAdmin && <div id=\"main-faq\" onMouseEnter={(e) => handleOpenSubMenu(e, 'faq')} ><MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n onClick={handleCloseSubMenu}\n primaryText=\"FAQs\"\n to=\"/faq\"\n exact\n leftIcon={<LiveHelpIcon />}\n bypassUser={isCustomerAdmin}\n // allowedPermissions={[\n // { resource: \"FAQs\", action: [\"view\"] },\n // ]}\n >\n </MainMenuItem>\n </div>}\n <div id=\"main-setup\" onMouseEnter={(e) => handleOpenSubMenu(e, 'setup')}>\n <MainMenuItem\n isDrawerOpen={open}\n handleDrawerOpen={handleDrawerOpen}\n primaryText=\"Set Up\"\n to=\"/user\"\n exact\n leftIcon={<SettingsIcon />}>\n <SubMenuItem\n to={`/BusinessUnit`}\n primaryText=\"Organisational Chart\"\n bypassUser={isCustomerAdmin}\n leftIcon={<BusinessIcon sx={{ color: \"white\" }} />}\n allowedPermissions={[\n { resource: \"BusinessUnit\", action: [\"view\"] },\n ]}\n />\n <SubMenuItem\n to={`/user`}\n primaryText={isCustomerAdmin ? \"Roles and Users\" : \"Users\"}\n leftIcon={<PersonIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin || isSuperAdmin}\n allowedPermissions={[\n { resource: \"User\", action: [\"view\"] },\n { resource: \"Role\", action: [\"view\"] },\n ]}\n />\n <SubMenuItem\n to={`/permission`}\n primaryText=\"Permission\"\n bypassUser={isSuperAdmin}\n leftIcon={<LockIcon sx={{ color: \"white\" }} />}\n allowedPermissions={[\n { resource: \"Permission\", action: [\"view\"] },\n ]}\n />\n <SubMenuItem\n to={`/MasterData`}\n primaryText=\"Master Data\"\n bypassUser={isSuperAdmin}\n leftIcon={<AnalyticsIcon sx={{ color: \"white\" }} />}\n allowedPermissions={[\n { resource: \"MasterData\", action: [\"view\", \"edit\", \"create\"] },\n ]}\n />\n <SubMenuItem\n to={`/theme_customization`}\n primaryText=\"Theme Customization\"\n leftIcon={<PaletteIcon sx={{ color: \"white\" }} />}\n bypassUser={isCustomerAdmin}\n allowedPermissions={[\n { resource: \"Theme\", action: [\"view\"] },\n ]}\n onMobileMenuClick={() => setState(false)}\n />\n </MainMenuItem>\n </div>\n\n\n </List>\n </div>\n <div>\n <List style={{ display: \"flex\", flexDirection: 'column', justifyContent: 'flex-end' }} >\n\n <div>\n <ListItemButton onClick={handleClick} id=\"main-account\" onMouseEnter={(e) => handleOpenSubMenu(e, 'account')}>\n <ListItemIcon style={{ paddingLeft: '8px' }}>\n <AccountCircle style={{ color: 'white', fontSize: '24px' }} />\n </ListItemIcon>\n <ListItemText primary={<div >\n <h3 className={classes.profileName}>{profile.name}</h3>\n <h3 className={classes.profileDesc}>{profile.role}</h3>\n </div>} />\n {\n !profile.isImpersonating ? profileArrowOpen ? <ExpandLess style={{ color: 'white' }} /> : <ExpandMore style={{ color: 'white' }} /> : null\n }\n {/* {console.log(!profile.isImpersonating)} */}\n </ListItemButton>\n <Collapse in={profileArrowOpen} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n\n {\n !profile.isImpersonating &&\n <ListItemButton sx={{ pl: 5, color: 'white' }} onClick={handleProfileClick}>\n <ListItemText primary=\"Change Password\" />\n </ListItemButton>\n }\n </List>\n </Collapse>\n </div>\n <Tooltip placement=\"top\" title=\"Logout\">\n <ListItemButton sx={{ pl: 3, color: 'white' }}\n onClick={handleProfileLogoutClick}>\n <ListItemIcon>\n <LogoutIcon style={{ color: 'white' }} />\n </ListItemIcon>\n <ListItemText primary=\"Logout\" />\n </ListItemButton>\n </Tooltip>\n {\n profile.isImpersonating &&\n <Tooltip placement=\"top\" title=\"Stop Impersonation\">\n <ListItemButton sx={{ pl: 3, color: 'white' }} onClick={handleStopImpersonationClick}>\n <ListItemIcon>\n <LockOpenIcon style={{ color: 'white' }} />\n </ListItemIcon>\n <ListItemText primary=\"Stop Impersonation\" />\n </ListItemButton>\n </Tooltip>\n }\n </List>\n {!open ? '' : <Typography variant=\"body2\" style={{ color: 'white', marginLeft: '30px' }} display=\"block\" gutterBottom>\n v 0.0.1\n </Typography>}\n </div>\n\n </div>\n </Drawer >\n\n\n <Box id=\"sub-dashboard\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {HoverDashboard}\n </Box>\n <Box id=\"sub-project\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {HoverProject}\n </Box>\n <Box id=\"sub-assessment\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {HoverAssessment}\n </Box>\n <Box id=\"sub-reports\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {HoverReports}\n </Box>\n <Box id=\"sub-learning\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {hoverLearningCentre}\n </Box>\n <Box id=\"sub-tools\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {hoverTools}\n </Box>\n <Box id=\"sub-setup\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {HoverSetup}\n </Box>\n <Box id=\"sub-faq\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {hoverFAQ}\n </Box>\n <Box id=\"sub-account\" className={classes.hoverContent} anchorEl={subAchorEl}>\n {hoverAccounts}\n </Box>\n </div>\n\n <div>\n <Box sx={{ flexGrow: 1 }}>\n <IconButton\n size=\"medium\"\n edge=\"start\"\n color=\"inherit\"\n aria-label=\"menu\"\n sx={{ mr: 2 }}\n style={{ marginTop: '0px' }}\n className={classes.navIcon}\n onClick={() => setState(true)}\n >\n {/* <SignalCellularAltIcon style={{ transform: 'scaleX(-1) rotate(-90deg)', olor: '#878a99',fontSize: '30px',}} /> */}\n </IconButton>\n </Box>\n <div>\n\n <React.Fragment>\n <Drawer\n PaperProps={{ classes: { root: classes.navMenu } }}\n classes={{ paper: classes.paper }}\n open={isSmall ? open : false}\n onClose={() => setState(false)}\n >\n <div style={{ margin: 8, marginTop: 12, }}>\n <img src={theme.img} width=\"200px\" alt=\"Sidebar Change Assessment Tool Logo\" />\n </div>\n {list}\n </Drawer>\n </React.Fragment>\n\n </div>\n </div>\n\n </>\n );\n};\n\nexport default Sidebar;","import CssBaseline from \"@material-ui/core/CssBaseline\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles, MuiThemeProvider, useTheme } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport AccountCircle from \"@material-ui/icons/AccountCircle\";\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\nimport SignalCellularAltIcon from '@material-ui/icons/SignalCellularAlt';\nimport { Box } from \"@mui/material\";\nimport _ from \"lodash\";\nimport * as React from \"react\";\nimport { Notification, useAuthProvider, useLogout, useRefresh } from \"react-admin\";\nimport { useHistory } from \"react-router-dom\";\nimport { TokenStorage } from \"../utils/TokenStorage\";\nimport Sidebar from \"./sidebar\";\n// import theme from \"./theme\";\nimport palette from \"./theme/palette\";\nimport { ThemeContext } from \"./theme/themeContext\";\n\nimport dataProvider from \"./dataProvider\";\nimport { getClientId } from \"../utils/AppUtils\";\n\nconst drawerWidth = 240;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n backgroundColor: '#F3F3F9',\n [theme.breakpoints.down('sm')]: {\n display: 'block'\n },\n },\n title: {\n flexGrow: 1,\n fontWeight: 700,\n fontFamily: \"Roboto\",\n fontStyle: 'normal',\n fontSize: '18px !important',\n letterSpacing: 0.3,\n color: palette.primary.darker,\n [theme.breakpoints.down('sm')]: {\n // flexGrow: 0,\n // color: 'red',\n // paddingLeft: '10px',\n // textAlign: 'left !important'\n },\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n marginRight: 36,\n },\n hide: {\n display: \"none\",\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: \"nowrap\",\n },\n drawerOpen: {\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n drawerClose: {\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: \"hidden\",\n width: theme.spacing(7) + 1,\n [theme.breakpoints.up(\"sm\")]: {\n width: theme.spacing(9) + 1,\n },\n },\n toolbar: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n [theme.breakpoints.down('sm')]: {\n // flexDirection: 'column-reverse',\n\n },\n\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n toggleToolbar: {\n // display: \"flex\",\n // alignItems: \"center\",\n // justifyContent: \"flex-end\",\n margin: theme.spacing(3, 0),\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column-reverse',\n\n },\n\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n content: {\n flexGrow: 1,\n backgroundColor: \"#F3F3F9\",\n minHeight: \"100vh\",\n padding: theme.spacing(2),\n [theme.breakpoints.down('sm')]: {\n marginTop: \"-80px\"\n },\n },\n titleBar: {\n display: \"flex\",\n alignItems: \"center\",\n marginLeft: \"-15px\",\n [theme.breakpoints.down('sm')]: {\n marginTop: \"20px\"\n },\n },\n rightContent: {\n display: \"flex\",\n alignItems: \"center\",\n },\n profileContent: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n profileName: {\n fontFamily: \"Mulish\",\n fontWeight: 600,\n fontSize: 14,\n letterSpacing: 0.2,\n color: \"#252733\",\n textTransform: \"capitalize\",\n margin: 0,\n fontStyle: \"normal\",\n marginBottom: 7,\n\n },\n profileDesc: {\n fontFamily: \"Mulish\",\n fontSize: 10,\n letterSpacing: 0.2,\n color: \"#252733\",\n textTransform: \"capitalize\",\n fontStyle: \"normal\",\n margin: 0,\n },\n profileNmenu: {\n display: \"flex\",\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n\n },\n },\n iconHover: {\n backgroundColor: \"transparent !important\",\n padding: 0,\n marginRight: 10,\n marginBottom: 10,\n cursor: \"auto\",\n },\n chevDown: {\n color: \"#A1A1A1\",\n display: \"flex\",\n alignItems: \"center\",\n marginLeft: 15,\n height: \"100%\",\n fontSize: 30,\n cursor: \"pointer\",\n },\n menuTypography: {\n textDecoration: \"none\",\n padding: theme.spacing(2),\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: '#E3E3E3'\n }\n },\n\n\n}));\n\nconst formatProfileDetail = (user) => {\n const user_role = user.isSuperAdmin\n ? \"Super Admin\"\n : user.isCustomerAdmin\n ? \"Customer Admin\"\n : _.map(user.roles, \"name\");\n return {\n name: user.fullName,\n role: user_role,\n isImpersonating: user.isImpersonating,\n };\n};\n\nexport default function MiniDrawer(props) {\n const classes = useStyles();\n const history = useHistory();\n const [block, setBlock] = React.useState(false);\n const themes = useTheme();\n const { themeObject, setTheme, theme, contextUser } = React.useContext(ThemeContext)\n // const theme = useTheme();\n const [open, setOpen] = React.useState(false);\n const [defaultTheme, setDefaultTheme] = React.useState({});\n const [defaultLogo, setDefaultLogo] = React.useState(\"\");\n\n const [profile, setProfile] = React.useState({\n name: \"\",\n role: \"\",\n isImpersonating: false,\n });\n const [anchorEl, setAnchorEl] = React.useState(null);\n const logout = useLogout();\n const authProvider = useAuthProvider();\n const refresh = useRefresh();\n\n const profileOpen = Boolean(anchorEl);\n\n const handleProfileMenu = (event) => {\n setAnchorEl(event.currentTarget);\n };\n const handleProfileClose = () => {\n setAnchorEl(null);\n };\n\n const handleProfileLogoutClick = () => {\n logout();\n handleProfileClose();\n };\n\n React.useEffect(() => {\n const user = TokenStorage.getUserDetails();\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n const clientId = impersonateUser ? impersonateUser.id : (user && user.isCustomerAdmin) ? user.id : (user && user.customerAdminId) || null;\n const variables = {\n data: {\n clientId: clientId,\n },\n };\n dataProvider\n .getOne(\"ThemeCustomize\", variables)\n .then((response) => {\n\n // setTheme({ id: response.data.theme, img: `data:image/png;base64,${response.data.url}` })\n const oldState = { ...theme };\n oldState['id'] = response.data.theme;\n if (response.data.url) {\n oldState['img'] = `data:image/png;base64,${response.data.url}`;\n }\n // console.log(res)\n setTheme(oldState)\n })\n .catch((error) => {\n console.log(error.message)\n });\n }, [contextUser.isCustomerAdmin])\n const handleStopImpersonationClick = () => {\n // redirect to home page\n history.push(\"/\");\n TokenStorage.clearImpersonateUserDetails();\n\n // refresh page to clear all the states\n window.location.hash = \"#/user\"\n window.location.reload();\n authProvider.getUserDetails().then(user => {\n const formattedProfile = formatProfileDetail(user)\n setProfile(formattedProfile);\n refresh(true)\n }).catch(error => {\n\n })\n };\n\n const handleSidebarOpen = () => {\n setOpen(true);\n };\n\n const handleSidebarClose = () => {\n setOpen(false);\n };\n\n const handleSidebar = () => {\n setOpen(!open);\n };\n\n const handleProfileClick = () => {\n handleProfileClose();\n history.push(\"/change_password\");\n }\n\n // const profileBar = (\n // <div className={classes.profileNmenu}>\n // <IconButton\n // aria-label=\"account of current user\"\n // aria-controls=\"menu-appbar\"\n // aria-haspopup=\"true\"\n // // color=\"primary\"\n // size=\"medium\"\n // disableFocusRipple\n // disableRipple\n // disableTouchRipple\n // className={classes.iconHover}\n // style={{\n // color: profile.isImpersonating ? 'orange' : '#00a0d9'\n // }}\n // >\n // <AccountCircle fontSize=\"medium\" />\n // </IconButton>\n // <Popover\n // id=\"menu-appbar\"\n // open={profileOpen}\n // anchorEl={anchorEl}\n // onClose={handleProfileClose}\n // anchorOrigin={{\n // vertical: \"bottom\",\n // horizontal: \"center\",\n // }}\n // transformOrigin={{\n // vertical: \"top\",\n // horizontal: \"right\",\n // }}\n // >\n // {\n // !profile.isImpersonating && <Typography className={classes.menuTypography} onClick={handleProfileClick}>Change Password</Typography>\n // }\n // <Typography className={classes.menuTypography} onClick={handleProfileLogoutClick}>Logout</Typography>\n // {\n // profile.isImpersonating && <Typography className={classes.menuTypography} onClick={handleStopImpersonationClick}>Stop Impersonation</Typography>\n // }\n // </Popover>\n\n // <div >\n // <h3 className={classes.profileName}>{profile.name}</h3>\n // <h3 className={classes.profileDesc}>{profile.role}</h3>\n // </div>\n // <div>\n // <KeyboardArrowDownIcon\n // onClick={handleProfileMenu}\n // className={classes.chevDown}\n // />\n // </div>\n // </div>\n // );\n\n // React.useEffect(() => {\n // // set profile details of impersonating user\n // // if there is no impersonate user,\n // // set profile details of original user\n // authProvider\n // .getUserDetails()\n // .then((user) => {\n // const formattedProfile = formatProfileDetail(user);\n // setProfile(formattedProfile);\n // })\n // .catch((error) => { });\n // }, []);\n\n return (\n\n\n <MuiThemeProvider theme={themeObject}>\n\n <div className={classes.root}>\n\n <CssBaseline />\n\n <Sidebar open={open} handleDrawer={handleSidebar} handleDrawerOpen={handleSidebarOpen} handleDrwerClose={handleSidebarClose} />\n {/* <div className={classes.toggleToolbar}>\n <IconButton onClick={handleSidebar} disableFocusRipple={true} disableRipple={true}>\n {!open ? theme.direction === 'rtl' ? <ChevronLeftIcon style={{ color: '#00A0D9' }} /> : <SignalCellularAltIcon style={{ transform: 'scaleX(-1) rotate(-90deg)', color: '#00A0D9' }} /> : <ChevronLeftIcon style={{ color: '#00A0D9' }} />}\n </IconButton>\n </div> */}\n <main className={classes.content}>\n <Box className={classes.titleBar}>\n <Box className={classes.toggleToolbar}\n onClick={() => setOpen(!open)} >\n <IconButton\n disableFocusRipple={true}\n disableRipple={true}\n >\n {!open ? themeObject.direction === 'rtl' ? <ChevronLeftIcon style={{ color: '#878a99' }} /> : <SignalCellularAltIcon\n style={{\n transform: 'scaleX(-1) rotate(-90deg)',\n color: '#878a99',\n fontSize: '30px',\n \"&:hover\": {\n borderRadius: 4,\n },\n }} /> : <ChevronLeftIcon style={{ color: '#878a99', fontSize: \"30px\" }} />}\n </IconButton>\n </Box>\n <div\n className={classes.toolbar}\n style={{ marginTop: \"-10px\" }}\n >\n <Typography\n variant=\"h6\"\n id=\"react-admin-title\"\n className={classes.title}\n noWrap\n ></Typography>\n {/* {profileBar} */}\n </div>\n </Box>\n {props.children}\n </main>\n <Notification anchorOrigin={{ vertical: 'top', horizontal: 'center' }} />\n </div>\n </MuiThemeProvider>\n );\n}\n","export default __webpack_public_path__ + \"static/media/not_found_logo.c236f47e.png\";","import React from \"react\";\nimport CardContent from \"@mui/material/CardContent\";\nimport { Title } from \"react-admin\";\nimport { useHistory } from \"react-router-dom\";\nimport { Box, Button, CardMedia, Typography } from \"@material-ui/core\";\nimport not_found_logo from \"../assets/images/not_found_logo.png\";\nimport HistoryIcon from \"@mui/icons-material/History\";\n\nconst NotFound = () => {\n let history = useHistory();\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Box>\n <Title title=\"404: Page not found\" />\n <CardMedia\n component=\"img\"\n height=\"100%\"\n width=\"100%\"\n image={not_found_logo}\n alt=\"Not Found Page Image\"\n />\n\n <CardContent\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexDirection: \"column\",\n }}\n >\n <Typography\n variant=\"h3\"\n style={{ textAlign: \"center\", fontWeight: \"bold\", color: \"gray\" }}\n >\n Not Found\n </Typography>\n <Typography\n style={{\n textAlign: \"center\",\n color: \"gray\",\n marginTop: \"15px\",\n marginBottom: \"15px\",\n }}\n >\n Either you typed a wrong URL, or you followed a bad link.\n </Typography>\n <Button\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n variant=\"secondary\"\n color=\"secondary\"\n startIcon={<HistoryIcon />}\n onClick={() => history.goBack(-1)}\n >\n Go Back\n </Button>\n </CardContent>\n </Box>\n </div>\n );\n};\n\nexport default NotFound;\n","import Button from '@mui/material/Button';\r\nimport React from 'react';\r\nimport { hasPermissions } from './AppUtils';\r\nimport { Box } from '@mui/material';\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { useContext } from 'react';\r\nimport { ThemeContext } from '../framework/theme/themeContext';\r\n\r\nconst ButtonWithPermission = (props) => {\r\n const { bypassUser, resource, permissions, action, endIcon } = props\r\n const [hasPermission, setHasPermission] = React.useState(false);\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('xs'));\r\n const {themeObject, setTheme} = useContext(ThemeContext)\r\n React.useEffect(async () => {\r\n setHasPermission(permissions ? await hasPermissions(permissions.permissions, { resource, action }) : null)\r\n }, [permissions])\r\n console.log(bypassUser, permissions, hasPermission);\r\n return (\r\n <Button\r\n variant=\"contained\"\r\n disabled={bypassUser ? false : !hasPermission}\r\n sx={{\r\n width: isSmall ? \"0px\" : \"210px\",\r\n backgroundColor: themeObject.palette.primary.main,\r\n boxShadow: \"0\",\r\n height: '41px',\r\n padding: '0',\r\n \"&:hover\": {\r\n backgroundColor: themeObject.palette.primary.buttonContrast,\r\n color: \"white\",\r\n cursor: 'pointer',\r\n boxShadow: \"0\"\r\n },\r\n '& .MuiButton-endIcon': {\r\n position: 'absolute',\r\n right: 0,\r\n display: 'none',\r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n padding: \"0\",\r\n borderBottomRightRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n backgroundColor: 'rgba(255,255,255,0.2)',\r\n fontSize: \"16px\",\r\n width: \"41px\",\r\n height: '41px',\r\n },\r\n '& .MuiButton-endIcon svg': {\r\n // Adjust SVG size if needed\r\n // width: '32px',\r\n // height: '41px',\r\n }\r\n }}\r\n {...props}\r\n >\r\n {\r\n isSmall ? <Box sx={{\r\n display: 'flex',\r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n padding: \"0\",\r\n paddingLeft: \"2px\",\r\n borderBottomRightRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n backgroundColor: 'rgba(255,255,255,0.2)',\r\n fontSize: \"16px\",\r\n width: \"100%\",\r\n height: '41px',\r\n }}>\r\n {endIcon} </Box> : <Box style={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n // border: \"1px solid red\",\r\n width: \"100%\"\r\n }}>\r\n <Box sx={{\r\n textAlign: \"center\",\r\n // border: \"1px solid green\",\r\n width: '100%'\r\n }}>\r\n {props.children} \r\n </Box>\r\n <Box sx={{\r\n display: 'flex',\r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n padding: \"0\",\r\n paddingLeft: \"2px\",\r\n borderBottomRightRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n backgroundColor: 'rgba(255,255,255,0.2)',\r\n fontSize: \"16px\",\r\n width: \"41px\",\r\n height: '41px',\r\n }}>\r\n {endIcon}\r\n </Box>\r\n </Box>\r\n }\r\n \r\n </Button>\r\n )\r\n}\r\nexport default ButtonWithPermission\r\n","import { useMediaQuery } from \"@material-ui/core\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport {\n Box,\n Button,\n InputLabel,\n MenuItem,\n Pagination,\n Select,\n Toolbar,\n} from \"@mui/material\";\nimport * as React from \"react\";\nimport { useListContext } from \"react-admin\";\nimport { ThemeContext } from \"../framework/theme/themeContext\";\nconst PostPagination = () => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const { page, perPage, total, setPage, setPerPage } = useListContext();\n const { themeObject } = React.useContext(ThemeContext)\n const nbPages = Math.ceil(total / perPage) || 1;\n const [rowsPerPage, setRowsPerPage] = React.useState(perPage);\n // const [rowNumber, setRowNumber] = React.useState(1);\n const handlePrevClick = () => {\n setPage(page - 1);\n };\n\n const handleNextClick = () => {\n setPage(page + 1);\n };\n\n const handlePageChange = (event, value) => {\n setPage(value);\n };\n const handleChangeRowsPerPage = (event) => {\n setRowsPerPage(event.target.value);\n setPerPage(event.target.value); // Reset page to 1 when changing rows per page\n };\n\n return (\n <Toolbar\n style={{\n display: \"flex\",\n justifyContent: isSmall ? \"center\" : \"flex-end\",\n }}\n >\n <Box style={{ display: \"flex\", alignItems: \"center\" }}>\n {isSmall ? (\n \"\"\n ) : (\n <InputLabel htmlFor=\"rows-per-page\" style={{ marginRight: \"16px\" }}>\n Rows per page\n </InputLabel>\n )}\n {isSmall ? (\n <></>\n ) : (\n <Select\n label=\"Rows per page\"\n id=\"demo-simple-select-standard\"\n variant=\"outlined\"\n size=\"small\"\n value={perPage}\n onChange={handleChangeRowsPerPage}\n style={{ margin: \"0 5px\" }}\n sx={{\n \"& .MuiInput-root\": {\n border: \"none\", // Remove border,\n },\n }}\n >\n {[5, 10, 25, 50].map((rowsPerPageOption) => (\n <MenuItem key={rowsPerPageOption} value={rowsPerPageOption}>\n {rowsPerPageOption}\n </MenuItem>\n ))}\n </Select>\n )}\n </Box>\n {nbPages > 1 && (\n <>\n {isSmall ? (\n <></>\n ) : (\n <Button\n style={{ backgroundColor: themeObject.palette.primary.darkLight, color: themeObject.palette.primary.contrastText }}\n disabled={page <= 1}\n onClick={handlePrevClick}\n >\n <ChevronLeftIcon />\n Prev\n </Button>\n )}\n\n <Pagination\n count={nbPages}\n page={page}\n onChange={handlePageChange}\n color='primary'\n sx={{\n \"& .MuiPaginationItem-root\": {\n borderRadius: \"4px\", // Change button shape\n\n border: \"1px solid #dadde9\",\n // padding: \"18px 5px\"\n padding: \"18px\",\n \"&:hover\": {\n color: \"#041e47\", // Change button color\n backgroundColor: themeObject.palette.primary.darkLight,\n },\n \"&.Mui-selected\": {\n borderRadius: \"4px\", // Change button shape\n backgroundColor: themeObject.palette.primary.paginationContrast,\n color: \"#fff\", // Change selected button text color\n padding: \"18px\",\n \"&:hover\": {\n color: \"#041e47\", // Change button color\n backgroundColor: themeObject.palette.primary.darkLight,\n },\n },\n },\n\n }}\n hidePrevButton\n hideNextButton\n size=\"small\"\n />\n {isSmall ? (\n <></>\n ) : (\n <Button\n // color=\"primary\"\n style={{ backgroundColor: themeObject.palette.primary.lighter, color: '#fff' }}\n disabled={page >= nbPages}\n onClick={handleNextClick}\n >\n Next\n <ChevronRightIcon />\n </Button>\n )}\n </>\n )}\n </Toolbar>\n );\n};\nexport default PostPagination;\n","import { makeStyles } from '@material-ui/core';\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MoreHorizIcon from '@material-ui/icons/MoreHoriz';\nimport Tooltip from '@mui/material/Tooltip';\nimport React, { useContext } from 'react';\nimport palette from '../../framework/theme/palette';\nimport { hasPermissions } from '../../utils/AppUtils';\nimport { ThemeContext } from '../../framework/theme/themeContext';\n\nconst options = [\n 'None',\n 'Atria',\n 'Callisto',\n 'Dione',\n 'Ganymede',\n 'Hangouts Call',\n 'Luna',\n 'Oberon',\n 'Phobos',\n 'Pyxis',\n 'Sedna',\n 'Titania',\n 'Triton',\n 'Umbriel',\n];\nconst useStyles = makeStyles((theme) => ({\n warningIcon: {\n color: theme.palette.customsColor.amber,\n },\n IconButtonOverride: {\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n borderRadius: \"4px\",\n backgroundColor: palette.customsColor.lighter,\n margin: \"8px 6px\"\n }\n}));\n\nconst ITEM_HEIGHT = 48;\n\nexport default function MoreActions({ record, choices = [], handleClose, handleClick, permissions, bypassUser }) {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const [items, setItems] = React.useState()\n const classes = useStyles();\n const { themeObject } = useContext(ThemeContext)\n const handleActionClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMoreActionClick = (e) => {\n handleMoreActionsClose();\n handleClick({ action: e.target.getAttribute(\"value\"), record });\n }\n\n const handleMoreActionsClose = () => {\n setAnchorEl(null);\n handleClose();\n };\n\n React.useEffect(async () => {\n if (bypassUser) {\n setItems(choices.map((choice) => {\n return { ...choice, disabled: false }\n }))\n }\n else if (permissions) {\n const checkedPermissions = await Promise.all(choices.map((choice) => {\n return hasPermissions(permissions.permissions, { resource: choice.resource, action: choice.action })\n }))\n setItems(choices.map((choice, index) => {\n return { ...choice, disabled: !checkedPermissions[index] }\n }))\n }\n }, [permissions])\n\n if (!items) return null\n\n return (\n <div>\n <Tooltip title=\"Edit / Delete\">\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n className={classes.IconButtonOverride}\n \n onClick={handleActionClick}\n size=\"small\"\n >\n <MoreHorizIcon />\n </IconButton>\n </Tooltip>\n <Menu\n id=\"long-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={open}\n onClose={handleMoreActionsClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n PaperProps={{\n style: {\n maxHeight: ITEM_HEIGHT * 4.5,\n width: '20ch',\n },\n }}\n >\n {items.map((item) => (\n <MenuItem key={item.id} disabled={item.disabled} value={item.id} onClick={handleMoreActionClick}>\n {item.name}\n </MenuItem>\n ))}\n </Menu>\n </div>\n );\n}","import * as React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Drawer from '@material-ui/core/Drawer';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport CloseIcon from '@material-ui/icons/Close';\nimport IconButton from '@material-ui/core/IconButton';\n\nconst content_padding = 16;\n\nconst useStyles = makeStyles((theme) => ({\n content: {\n width: '100%',\n [theme.breakpoints.up('md')]: {\n width: '40vw',\n },\n [theme.breakpoints.down('xs')]: {\n width: '100vw',\n },\n padding: 2 * content_padding\n },\n formContent: {\n marginRight: 16,\n marginLeft: theme.spacing(5),\n [theme.breakpoints.up('md')]: {\n marginRight: 16,\n },\n [theme.breakpoints.down('xs')]: {\n marginLeft: '0px',\n marginRight: 0\n },\n },\n fullList: {\n width: 'auto',\n },\n drawerTitleBar: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: 16,\n paddingBottom: theme.spacing(5),\n marginLeft: theme.spacing(5),\n [theme.breakpoints.down('xs')]: {\n margin: '0'\n },\n\n },\n drawerTitle: {\n flexGrow: 1,\n fontStyle: \"normal\",\n fontWeight: 600,\n fontSize: 24,\n color: theme.palette.primary.darker,\n\n },\n\n}));\n\nexport const CustomDrawer = ({ children, title, drawerAnchor, drawerOpen, onClose, }) => {\n const classes = useStyles();\n\n const toggleDrawer = (open) => (event) => {\n if (event.type === 'click') {\n const confirmMessage = window.confirm('The change will be lost. Are you sure you want to close it?');\n if (confirmMessage) {\n console.log(\"closing the drawer\");\n onClose(open)\n }\n }\n if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) {\n return;\n }\n\n // onClose(open);\n };\n return (\n <Drawer anchor={drawerAnchor} open={drawerOpen} onClose={toggleDrawer(false)}>\n\n <div className={classes.content}>\n <Box className={classes.drawerTitleBar}>\n <Typography variant=\"h6\" className={classes.drawerTitle} >{title}</Typography>\n <IconButton aria-label=\"close\" size=\"medium\" component=\"span\" onClick={() => onClose(false)}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </Box>\n <div className={classes.formContent}>{children}</div>\n </div>\n </Drawer>\n );\n}\n\nexport default CustomDrawer;\n","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { useEffect, useState } from \"react\";\nimport {\n AutocompleteInput,\n NumberInput,\n ReferenceInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n useNotify,\n useRefresh,\n} from \"react-admin\";\nimport { Form, } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\nimport { Alert, Snackbar } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n bottom: 0,\n marginBottom: 40,\n // width: 360,\n [theme.breakpoints.down('xs')]: {\n // justifyContent: 'flex-end',\n },\n // padding: 16\n },\n inputMargin: {\n marginTop: 5,\n },\n gridItemPadding: {\n padding: \"0 0 14px 8px !important\",\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n formWidth: {\n maxWidth: 360,\n [theme.breakpoints.down('xs')]: {\n marginLeft: '0px',\n },\n },\n mobileBtn: {\n [theme.breakpoints.down('xs')]: {\n width: \"40vw\",\n },\n },\n}));\n\nexport const BusinessUnitCreateDrawer = ({\n initialValues,\n drawerOpen,\n onClose,\n handleSnackbarOpen\n}) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const classes = useStyles();\n\n //start of enable save/submit button \n const [showSaveButton, setShowSaveButton] = useState(true);\n const [buNameChange, setBuNameChange] = useState(true);\n const [locationChange, setLocationChange] = useState(true);\n const [parentBu, setParentBu] = useState(true);\n const [totalFte, setTotalFte] = useState(true);\n\n \n const handleBUName = (e) => {\n const nameField = e.target.value;\n console.log(nameField, 'this is name')\n if (nameField !== '') {\n setBuNameChange(false)\n }\n else {\n setBuNameChange(true)\n }\n };\n const handleLocation = (e) => {\n const locationField = e?.target?.value;\n if (locationField !== '') {\n setLocationChange(false)\n } else {\n setLocationChange(true)\n }\n };\n const handleParentBu = (e) => {\n const parentBuField = e?.target?.value;\n console.log(parentBuField, \"this is parent bu\");\n if (parentBuField !== '') {\n setParentBu(false)\n } else {\n setParentBu(true)\n }\n };\n const handleTotalFte = (e) => {\n const totalFteField = e?.target?.value;\n if (totalFteField !== '') {\n setTotalFte(false)\n } else {\n setTotalFte(true)\n }\n };\n\n\n useEffect(() => {\n if (buNameChange === false && locationChange === false\n && parentBu === false && totalFte === false) {\n setShowSaveButton(false)\n }\n else {\n setShowSaveButton(true)\n }\n\n }, [buNameChange, locationChange, parentBu, totalFte])\n //end of enable save/submit button \n\n const resource = \"BusinessUnit\";\n const onSubmit = (values, form) => {\n dataProvider\n .create(resource, {\n data: values,\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Business Unit added successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = () => { };\n\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Create Business Unit\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextInput\n // onChange={handleChange(\"name\")}\n onChange={(e) => handleBUName(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Business Unit Name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n // onChange={handleChange(\"location\")}\n onChange={(e) => handleLocation(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Location\"\n source=\"geography\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <ReferenceInput\n onChange={(e) => handleParentBu(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Parent Business Unit\"\n source=\"parentBusinessUnitId\"\n reference=\"BusinessUnit\"\n validate={[required()]}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n <Grid item xs={12}>\n <NumberInput\n onChange={(e) => handleTotalFte(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Total FTE\"\n source=\"fte\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n {!showSaveButton ?\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n className={classes.mobileBtn}\n disabled={false}\n >\n Save\n </Button> :\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n className={classes.mobileBtn}\n disabled={true}\n >\n Save\n </Button>\n }\n\n\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n className={classes.mobileBtn}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n );\n};\n\nexport default BusinessUnitCreateDrawer;\n","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport * as React from \"react\";\nimport {\n AutocompleteInput,\n NumberInput,\n ReferenceInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n useRefresh,\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n bottom: 0,\n marginBottom: 40,\n // width: 360,\n [theme.breakpoints.down('xs')]: {\n // justifyContent: 'flex-end',\n },\n // padding: 16\n },\n mobileBtn: {\n [theme.breakpoints.down('xs')]: {\n width: \"40vw\",\n },\n },\n inputMargin: {\n marginTop: 5,\n },\n gridItemPadding: {\n padding: \"0 0 14px 8px !important\",\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n formWidth: {\n maxWidth: 360,\n [theme.breakpoints.down('xs')]: {\n marginLeft: '0px',\n },\n }\n}));\n\nexport const BusinessUnitEditDrawer = ({ record, drawerOpen, onClose,handleSnackbarOpen}) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const [initialValues, setInitialValues] = React.useState();\n const classes = useStyles();\n\n const resource = \"BusinessUnit\";\n // console.log(\"initialvalueget\", initialValues);\n const onSubmit = (values, form) => {\n dataProvider\n .update(resource, {\n id: record.id,\n data: values,\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Business Unit updated successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = () => { };\n\n React.useEffect(() => {\n if (record && record.id)\n dataProvider.getOne(resource, { id: record.id }).then((response) => {\n setInitialValues(response.data);\n });\n }, [record]);\n\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Edit Business Unit\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Business Unit Name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Location\"\n source=\"geography\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n {Boolean(initialValues && initialValues.parentBusinessUnitId) && <Grid item xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Parent Business Unit\"\n source=\"parentBusinessUnitId\"\n reference=\"BusinessUnit\"\n filter={{\n excludeIds: record && record.id ? [record.id] : null,\n }}\n validate={[required()]}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>}\n <Grid item xs={12}>\n <NumberInput\n fullWidth\n variant=\"outlined\"\n label=\"Total FTE\"\n source=\"fte\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n className={classes.mobileBtn}\n >\n Update\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n className={classes.mobileBtn}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n );\n};\n\nexport default BusinessUnitEditDrawer;\n","import { useMediaQuery } from \"@material-ui/core\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Badge from \"@material-ui/core/Badge\";\nimport Box from \"@material-ui/core/Box\";\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport {\n createTheme,\n makeStyles,\n ThemeProvider\n} from \"@material-ui/core/styles\";\nimport BusinessIcon from \"@material-ui/icons/Business\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport Tooltip from '@mui/material/Tooltip';\nimport clsx from \"clsx\";\nimport _ from \"lodash\";\nimport React from \"react\";\nimport { Loading, Title, useDataProvider, usePermissions } from \"react-admin\";\nimport { Tree, TreeNode } from \"react-organizational-chart\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n background: \"rgba(255,255,255,0.1)\",\n display: \"inline-block\",\n borderRadius: 16\n },\n expand: {\n transform: \"rotate(0deg)\",\n marginTop: -10,\n marginLeft: \"auto\",\n transition: theme.transitions.create(\"transform\", {\n duration: theme.transitions.duration.short\n })\n },\n expandOpen: {\n transform: \"rotate(180deg)\"\n },\n avatar: {\n backgroundColor: \"#ECECF4\"\n },\n horizontalScroll: {\n overflowX: \"scroll\"\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nfunction Organization({ org, onCollapse, collapsed }) {\n const classes = useStyles();\n\n const isActive = true;\n let backgroundColor = \"rgba(255,255,255,0.1)\";\n if (isActive) {\n backgroundColor = \"rgba(255,255,255,0.1)\";\n }\n return (\n <Card\n variant=\"outlined\"\n className={classes.root}\n style={{ backgroundColor: \"#e1e2e3\" }}\n >\n <CardHeader\n avatar={\n <Badge\n style={{ cursor: \"pointer\" }}\n color=\"secondary\"\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"right\"\n }}\n showZero\n invisible={!collapsed}\n overlap=\"circle\"\n badgeContent={_?.size(org?.childBU)}\n onClick={onCollapse}\n >\n <Avatar className={classes.avatar}>\n <BusinessIcon color=\"primary\" />\n </Avatar>\n </Badge>\n }\n title={org?.buName}\n />\n <Tooltip title=\"Expand\">\n <IconButton\n size=\"small\"\n onClick={onCollapse}\n className={clsx(classes.expand, {\n [classes.expandOpen]: !collapsed\n })}\n >\n <ExpandMoreIcon />\n </IconButton>\n </Tooltip>\n </Card>\n );\n}\n\nfunction Node({ o, parent }) {\n const [collapsed, setCollapsed] = React.useState(o?.collapsed);\n\n const handleCollapse = () => {\n setCollapsed(!collapsed);\n };\n React.useEffect(() => {\n o.collapsed = collapsed;\n });\n const T = parent\n ? TreeNode\n : (props) => (\n <Tree\n {...props}\n lineWidth={\"2px\"}\n lineColor={\"#bbc\"}\n lineBorderRadius={\"12px\"}\n >\n {props?.children}\n </Tree>\n );\n return collapsed ? (\n <T\n label={\n <Organization\n org={o}\n onCollapse={handleCollapse}\n collapsed={collapsed}\n />\n }\n />\n ) : (\n <T\n label={\n <Organization\n org={o}\n onCollapse={handleCollapse}\n collapsed={collapsed}\n />\n }\n >\n {_.map(o?.childBU, (c) => (\n <Node o={c} parent={o} />\n ))}\n </T>\n );\n}\nconst theme = createTheme({\n palette: {\n background: \"#ECECF4\"\n },\n fontFamily: \"Roboto, sans-serif\"\n});\n\n\nexport default function BusinessUnitTreeView(props) {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [data, setData] = React.useState();\n const [error, setError] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const dataProvider = useDataProvider();\n const { loading: loadingPermissions, permissions } = usePermissions();\n const classes = useStyles();\n\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n\n React.useEffect(() => {\n setLoading(true)\n dataProvider\n .postRequest(\"AllBusinessUnitsTree\", {\n queryType: \"retrieve\",\n data: {},\n })\n .then(({ data }) => {\n if (data && data?.length) {\n setData(data);\n setError(null);\n } else {\n setData(null);\n setError(\"no data found\");\n }\n setLoading(false);\n })\n .catch(error => {\n setLoading(false);\n setError(\"error in getting data\")\n });\n }, [dataProvider])\n\n\n let buHolder = {};\n\n if (data !== undefined) {\n\n data.map((element) => {\n\n //element[0] is parent BU and element[1] is child BU\n let parentBU = {};\n if (buHolder[element[0]]) {\n parentBU = buHolder[element[0]];\n } else {\n parentBU = { \"buName\": element[0] };\n buHolder[element[0]] = parentBU;\n }\n\n if (element[0] !== element[1]) {\n let childBU = [];\n if (parentBU[\"childBU\"]) {\n childBU = parentBU[\"childBU\"];\n } else {\n parentBU[\"childBU\"] = childBU;\n }\n\n let childObject = { \"buName\": element[1] }\n childBU.push(childObject);\n buHolder[element[1]] = childObject;\n }\n });\n }\n\n if (loading) return <Loading />\n\n if (error) return (\n <Card>\n <Box color={theme.palette.error.main} p={2}>{error}</Box>\n </Card>\n )\n\n let horizontalScroll;\n if (isSmall) {\n horizontalScroll = classes.horizontalScroll;\n }\n\n return (\n <ThemeProvider theme={theme}>\n <Title title=\"Business Units\" className={classes.title} />\n\n <Box bgcolor=\"#fff\" padding={4} >\n <Card className={horizontalScroll} >\n <Node o={buHolder[`${data[0][0]}`]} />\n </Card>\n </Box>\n </ThemeProvider>\n );\n}\n","import { Box, Typography, useMediaQuery } from \"@material-ui/core\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport FileDownloadOutlinedIcon from \"@mui/icons-material/FileDownloadOutlined\";\nimport Button from \"@mui/material/Button\";\nimport PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport { cloneElement } from \"react\";\nimport {\n Datagrid,\n Filter,\n List,\n SearchInput,\n TextField,\n TopToolbar,\n sanitizeListRestProps,\n useDataProvider,\n useListContext,\n useNotify,\n usePermissions,\n useRecordContext,\n useRefresh,\n} from \"react-admin\";\nimport {\n currentDate,\n impersonatedURL,\n onFailureMessage,\n saveFileFromBinary,\n} from \"../../utils/AppUtils\";\nimport ButtonWithPermission from \"../../utils/ButtonWithPermission\";\nimport PostPagination from \"../../utils/PostPagination\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport MoreActions from \"../customComponents/moreActions\";\nimport BusinessUnitCreateDrawer from \"./businessUnitCreateDrawer\";\nimport BusinessUnitEditDrawer from \"./businessUnitEditDrawer\";\nimport BusinessUnitTreeView from \"./businessUnitTreeView\";\nimport { Alert, IconButton, Snackbar } from \"@mui/material\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport DeleteForeverIcon from \"@mui/icons-material/DeleteForever\";\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n // backgroundColor: theme.palette.background.paper,\n },\n headerCell: {\n [theme.breakpoints.down(\"xs\")]: {\n backgroundColor: \"blue\",\n display: \"none\",\n },\n },\n}));\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const { themeObject, setTheme } = React.useContext(ThemeContext)\n const {\n className,\n exporter,\n filters,\n maxResults,\n handleCreateDrawerOpen,\n ...rest\n } = props;\n const {\n currentSort,\n resource,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext();\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n\n const handleExportBtnClick = () => {\n dataProvider\n .postRequest(\"ExportBUs\", {\n queryType: \"retrieve\",\n })\n .then((response) => {\n saveFileFromBinary(response.data, \"Business Units\" + currentDate);\n })\n .catch((error) => {\n handleSnackbarOpen(\"No data found to export\", \"warning\")\n });\n };\n\n return (\n <TopToolbar {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n {/* <Button style={{ marginRight: 8 }} label=\"Export\" variant=\"contained\" color=\"primary\" onClick={handleExportBtnClick}>{<DownloadIcon fontSize='small' />}{isSmall ? '' : `Export`}</Button> */}\n\n <Button\n variant=\"contained\"\n onClick={handleExportBtnClick}\n sx={{\n width: isSmall ? \"0px\" : \"150px\",\n marginRight: \"8px\",\n backgroundColor: themeObject.palette.primary.main,\n boxShadow: \"0\",\n height: \"41px\",\n paddingX: \"0\",\n \"&:hover\": {\n backgroundColor: themeObject.palette.primary.buttonContrast,\n color: \"white\",\n cursor: \"pointer\",\n boxShadow: \"0\",\n },\n }}\n >\n {isSmall ? (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"100%\",\n height: \"41px\",\n }}\n >\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n ) : (\n <Box\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\",\n }}\n >\n <Box\n sx={{\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {\"Export\"}\n </Box>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"41px\",\n height: \"41px\",\n }}\n >\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n </Box>\n )}\n </Button>\n <CreateBusinessUnitBtn {...props} />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </TopToolbar>\n );\n};\n\nconst BusinessUnitFilter = (props) => (\n <Filter {...props}>\n <SearchInput variant=\"outlined\" source=\"q\" alwaysOn />\n </Filter>\n);\n\nconst CreateBusinessUnitBtn = (props) => {\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const { isCustomerAdmin, permissions, isSuperAdmin, handleCreateDrawerOpen } =\n props;\n return (\n <ButtonWithPermission\n permissions={permissions}\n resource=\"BusinessUnit\"\n bypassUser={isCustomerAdmin}\n action={[\"create\"]}\n variant=\"contained\"\n onClick={() => handleCreateDrawerOpen(true)}\n endIcon={<AddIcon style={{ marginLeft: \"-4px\" }} />}\n >\n {\"Add Business Unit\"}\n </ButtonWithPermission>\n );\n};\n\nconst Empty = (props) => {\n const { basePath, resource } = useListContext();\n return (\n <Box textAlign=\"center\" m={1} p={1}>\n <Typography variant=\"h4\" paragraph>\n No Business Unit yet.\n </Typography>\n <Typography variant=\"body1\">Do you want to add one?</Typography>\n <Box mt={1}>\n <CreateBusinessUnitBtn {...props} />\n </Box>\n </Box>\n );\n};\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n aria-labelledby={`simple-tab-${index}`}\n {...other}\n >\n {value === index && <Box>{children}</Box>}\n </div>\n );\n}\n\nTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n};\n\nfunction a11yProps(index) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`,\n };\n}\nconst StyledTabs = withStyles({\n root: {\n maxWidth: \"85vw\",\n // marginBottom: \"15px\",\n // padding: \"10px 0 0 10px\",\n // backgroundColor: \"#fff\"\n // borderBottom: '2px solid #ccc', // Border for all tabs\n },\n indicator: {\n display: \"none\",\n justifyContent: \"center\",\n // backgroundColor: \"transparent\",\n // height: 5,\n // \"& > span\": {\n // maxWidth: 80,\n // width: \"100%\",\n // backgroundColor: \"#EFF2F7\"\n // },\n },\n \"& .Mui-selected\": {\n borderBottom: \"10px solid #f0f\", // Remove border for the active tab\n },\n})((props) => <Tabs {...props} TabIndicatorProps={{ children: <span /> }} />);\n\nconst StyledTab = withStyles((theme) => ({\n root: {\n textTransform: \"none\",\n color: \"#000\",\n fontWeight: theme.typography.fontWeightRegular,\n // fontSize: theme.typography.pxToRem(15),\n fontSize: \"14px\",\n padding: \"0 20px\",\n \"&:focus\": {\n opacity: 1,\n },\n minWidth: 97,\n // paddingLeft: 0,\n // paddingRight: 0,\n borderBottom: \"2px solid #cdd0d1\",\n \"&:not($selected)\": {\n // borderBottomColor: '#ccc', // Add border for unselected tabs\n },\n \"&$selected\": {\n // borderTop: \"2px solid #0Ab39C\",\n // marginBottom: '2px',\n borderTopRightRadius: \"5px\",\n borderTopLeftRadius: \"5px\",\n // paddingBottom: \"-10px\",\n fontWeight: \"600\",\n borderBottom: \"none\",\n // borderTop: \"2px solid #cdd0d1\",\n // borderRight: \"2px solid #cdd0d1\",\n // borderLeft: \"2px solid #cdd0d1\",\n // backgroundColor: \"#EFF2F7\", // Change this to the color you desire\n backgroundColor: \"#FFFFFF\", // Change this to the color you desire\n color: \"#000\", // Change this to the color you desire for the text\n },\n },\n selected: {},\n}))((props) => <Tab disableRipple {...props} />);\nexport const BusinessUnitTabs = (props) => {\n const classes = useStyles();\n const [value, setValue] = React.useState(0);\n\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n return (\n <div className={classes.root}>\n <StyledTabs\n value={value}\n onChange={handleChange}\n aria-label=\"BU Different View Types\"\n >\n <StyledTab label=\"List View\" {...a11yProps(0)} />\n <StyledTab label=\"Tree View\" {...a11yProps(1)} />\n </StyledTabs>\n <TabPanel value={value} index={0}>\n <BusinessUnitList {...props} />\n </TabPanel>\n <TabPanel value={value} index={1}>\n <Box height={200}>\n {\" \"}\n <BusinessUnitTreeView {...props} />\n </Box>\n </TabPanel>\n </div>\n );\n};\n\nexport const BusinessUnitList = (props) => {\n const [createDrawerOpen, setCreateDrawerOpen] = React.useState();\n const [editDrawerOpen, setEditDrawerOpen] = React.useState();\n const [record, setRecord] = React.useState();\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const { loading: loadingPermissions, permissions } = usePermissions();\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n impersonatedURL(isImpersonating, \"#/BusinessUnit?impersonated\");\n\n\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const classes = useStyles();\n const handleCreateDrawerOpen = (open) => {\n setCreateDrawerOpen(open);\n };\n\n const handleCreateDrawerClose = () => {\n setCreateDrawerOpen(false);\n };\n\n const handleEditDrawerOpen = (open) => {\n setEditDrawerOpen(open);\n };\n\n const handleEditDrawerClose = (open) => {\n setRecord(null);\n setEditDrawerOpen(open);\n };\n\n const rowActionsChoices = [\n { id: \"edit\", name: \"Edit\", resource: \"BusinessUnit\", action: [\"edit\"] },\n {\n id: \"delete\",\n name: \"Delete\",\n resource: \"BusinessUnit\",\n action: [\"delete\"],\n },\n ];\n const handleEditBU = (record) => {\n setRecord(record);\n handleEditDrawerOpen(true);\n };\n const handleDeleteBU = (record) => {\n const proceed = window.confirm(\"You are deleting the entry. Are you sure?\");\n if (proceed) {\n if (!record.parentBusinessUnitId) {\n handleSnackbarOpen(\"This business unit can't be deleted\", \"error\")\n return;\n }\n dataProvider\n .delete(\"BusinessUnit\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"Business Unit deleted successfully\", \"success\")\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n };\n const handleMoreActionsClick = ({ action, record }) => {\n switch (action) {\n case \"edit\":\n setRecord(record);\n handleEditDrawerOpen(true);\n break;\n case \"delete\":\n const proceed = window.confirm(\n \"You are deleting the entry. Are you sure?\"\n );\n if (proceed) {\n if (!record.parentBusinessUnitId) {\n handleSnackbarOpen(\"This business unit can't be deleted\", \"error\")\n break;\n }\n dataProvider\n .delete(\"BusinessUnit\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"Business Unit deleted successfully\", \"success\")\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n break;\n }\n };\n const ActionButtonSM = () => {\n const records = useRecordContext();\n return (\n <Box\n sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}\n >\n <IconButton\n aria-label=\"edit\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <EditIcon\n size=\"small\"\n style={{\n color: \"#00A0D9\",\n cursor: \"pointer\",\n margin: \"0 5px\",\n }}\n onClick={() => handleEditBU(records)}\n />\n </IconButton>\n <IconButton\n aria-label=\"delete\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <DeleteForeverIcon\n size=\"small\"\n style={{ color: \"#de0937\", cursor: \"pointer\" }}\n onClick={() => handleDeleteBU(records)}\n />\n </IconButton>\n </Box>\n );\n };\n return (\n <WithPermission\n resource=\"BusinessUnit\"\n permissions={permissions}\n bypassUser={isCustomerAdmin}\n action={[\"view\"]}\n {...props}\n >\n <List\n {...props}\n title={\n <span style={{ fontSize: \"20px\", textTransform: \"uppercase\" }}>\n Business Units\n </span>\n }\n hasCreate={false}\n empty={\n <Empty\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n actions={\n <ListActions\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n filters={<BusinessUnitFilter />}\n bulkActionButtons={false}\n pagination={<PostPagination />}\n >\n {isSmall ? (\n <Datagrid classes={{ headerCell: classes.headerCell }}>\n {/*<TextField source=\"id\" sortable={false}/>*/}\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <TextField source=\"name\" sortable={true} />\n <TextField\n color=\"secondary\"\n source=\"geography\"\n sortable={false}\n />\n <ActionButtonSM />\n </div>\n </Datagrid>\n ) : (\n <Datagrid>\n {/*<TextField source=\"id\" sortable={false}/>*/}\n <TextField source=\"name\" sortable={true} />\n <TextField label=\"Location\" source=\"geography\" sortable={false} />\n <TextField\n label=\"Parent BU\"\n source=\"parentBusinessUnit.name\"\n sortable={false}\n />\n {/* <TextField label=\"FTE\" source=\"fte\" sortable={false} /> */}\n <MoreActions\n choices={rowActionsChoices}\n bypassUser={isCustomerAdmin}\n permissions={props.permissions}\n handleClose={() => console.log(\"closing\")}\n handleClick={handleMoreActionsClick}\n sortable={false}\n />\n </Datagrid>\n )}\n </List>\n\n <BusinessUnitCreateDrawer\n record={record}\n drawerOpen={createDrawerOpen}\n onClose={handleCreateDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <BusinessUnitEditDrawer\n record={record}\n drawerOpen={editDrawerOpen}\n onClose={handleEditDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n};\n\nexport default BusinessUnitTabs;\n","import AccountBalanceIcon from '@material-ui/icons/AccountBalance';\nimport BusinessUnitTabs from './businessUnitList';\n\nexport default {\n list: BusinessUnitTabs,\n icon: AccountBalanceIcon,\n};","export default __webpack_public_path__ + \"static/media/Page1 Image.d071dc8c.svg\";","export default __webpack_public_path__ + \"static/media/Page2 Image.6ecc9c72.svg\";","export default __webpack_public_path__ + \"static/media/Page3 Image.2c19d202.svg\";","export default __webpack_public_path__ + \"static/media/Page4 Image.4b2f6f6a.svg\";","export default __webpack_public_path__ + \"static/media/Page5 Image.f6e4cd66.svg\";","export default __webpack_public_path__ + \"static/media/FrontPageBackgroundTexture.14610cfb.svg\";","import {\n Box, Button, CircularProgress,\n Paper,\n TextField\n} from \"@material-ui/core\";\nimport { makeStyles, MuiThemeProvider, Theme, useTheme } from \"@material-ui/core/styles\";\nimport {Grid, useMediaQuery } from \"@mui/material\";\nimport PropTypes from \"prop-types\";\nimport { useSafeSetState, useTranslate } from \"ra-core\";\nimport { FunctionComponent, useCallback, useContext, useEffect, useState } from \"react\";\nimport { Notification, PasswordInput, TextInput, useAuthProvider } from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { Link, useHistory, useLocation } from 'react-router-dom';\n// import cat_logo from \"../../assets/images/cat_logo.png\";\nimport loginImage from '../../assets/images/loginImage.png';\n// import theme from '../../framework/theme';\nimport Carousel from 'react-material-ui-carousel';\nimport Snackbar from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\n\nimport page1 from '../../assets/images/Page1 Image.svg';\nimport page2 from '../../assets/images/Page2 Image.svg';\nimport page3 from '../../assets/images/Page3 Image.svg';\nimport page4 from '../../assets/images/Page4 Image.svg';\nimport page5 from '../../assets/images/Page5 Image.svg';\nimport cat_logo from \"../../assets/images/cat_logo.png\";\nimport backgroundImages from '../../assets/images/FrontPageBackgroundTexture.svg';\nimport { Height } from \"@mui/icons-material\";\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nimport cat_logo_white from \"../../assets/images/cat_logo_white.png\";\n\ninterface Props {\n redirectTo?: string;\n}\n\ninterface FormData {\n username: string;\n password: string;\n}\n\nconst images = [\n {\n label: 'What is the CMO Tool?',\n description: \"The <b>Change Management Organisational</b> Tool (CMO) supports Organisations, Projects and Change and Project Management practitioners in planning, managing and reporting on change management projects.\",\n imgPath: `${page1}`\n },\n {\n label: 'Change Maturity and Saturation',\n description: \"A core component of the CMO is the ability to measure any Business Unit’s Maturity and Saturation across the organisation. Learn how ready you are for change.\",\n imgPath: `${page2}`\n },\n {\n label: 'Capture your Entire Portfolio',\n description: \"Capture, forecast and track each project your organisation is undertaking. Undertake Change Impact Assessments, build Change Heatmaps and manage your resources to plan your next steps.\",\n imgPath: `${page3}`\n },\n {\n label: 'Share Data Quickly',\n description: \"From an executive one-pager, down to detailed Change Impact reports, output your data in a format that works for your audience.\",\n imgPath: `${page4}`\n },\n\n {\n label: 'Want to Learn More?',\n description: \"The CMO has been developed by experienced change management profesionals, senior leaders and executives.\",\n imgPath: `${page5}`\n },\n];\n\nconst useStyles = makeStyles(\n (theme: Theme) => ({\n form: {\n padding: \"0 1em 1em 1em\",\n },\n input: {\n marginTop: \"0em\",\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n mainLogo: {\n fontSize: 72,\n color: \"#828282\",\n fontFamily: \"Aldrich\",\n fontWeight: \"normal\",\n margin: 0,\n marginBottom: 50,\n },\n fieldOptions: {\n width: 400,\n marginBottom: 16,\n borderColor: \"#E1E1E1 !important\",\n borderRadius: 8,\n \"&::placeholder\": {\n color: \"#FFF\",\n },\n },\n buttonOptions: {\n width: 400,\n borderRadius: 5,\n },\n fieldTags: {\n // color: \"#B5B5B5\",\n textAlign: \"left !important\",\n color: \"#000\",\n fontSize: 16,\n fontFamily: \"Roboto\",\n fontWeight: \"500\",\n margin: 0,\n marginBottom: 5,\n },\n buttonDiv: {\n display: 'flex',\n justifyContent: 'center'\n },\n loginRoot: {\n backgroundImage: `url(${backgroundImages})`,\n size: \"cover\",\n repeat: \"no-repeat\",\n position: \"center\",\n // width: \"100vw\",\n margin: \"0 auto\",\n height: '100vh',\n opacity: \"1\",\n overflow: 'hidden',\n [theme.breakpoints.down('sm')]: {\n overflow: 'auto'\n }\n },\n loginBox: {\n // display: \"flex\",\n // justifyContent: \"space-evenly\",\n // alignItems: \"center\",\n // maxWidth: \"70vw\",\n // height: '70%',\n // maxWidth: \"100%\",\n width: '75%',\n paddingLeft: \"10px\",\n paddingRight: \"10px\",\n margin: \"0 auto\",\n boxShadow: ' 0px 0px 10px 0px rgba(0,0,0,0.2)',\n // maxHeight: \"80%\",\n [theme.breakpoints.down('sm')]: {\n marginBottom: \"50px\"\n }\n // height: \"80vh\"\n }\n }),\n { name: \"RaLoginForm\" }\n);\n\nconst Input = ({\n meta: { touched, error }, // eslint-disable-line react/prop-types\n input: inputProps, // eslint-disable-line react/prop-types\n ...props\n}) => (\n <TextField\n error={!!(touched && error)}\n helperText={touched && error}\n {...inputProps}\n {...props}\n fullWidth\n />\n);\n\n/**\n * Log a user in by calling the authProvider.login() method\n *\n * @param {Object} params Login parameters to pass to the authProvider. May contain username/email, password, etc\n * @param {string} pathName The path to redirect to after login. By default, redirects to the home page, or to the last page visited after disconnection.\n *\n * @return {Promise} The authProvider response\n */\ntype LoginType = (params: any, pathName?: string) => Promise<any>;\n\nconst useLogin = (): LoginType => {\n const authProvider = useAuthProvider();\n const location = useLocation();\n const locationState = location.state as any;\n const history = useHistory();\n\n const login = useCallback(\n (params: any = {}) =>\n authProvider.login(params).then(user => {\n console.log(user);\n // First time logger redirect to change password\n if (user.isFirstTimeLogin) {\n history.push(\"/change_password\");\n }\n // Super admin should land to client list after sign in\n else if (user.isSuperAdmin) {\n history.push(\"/user\");\n }\n // other user should land to dashboard after sign in\n else {\n history.push(\"/\");\n }\n return user;\n }),\n [authProvider, history]\n );\n\n return login;\n};\n\ntype ErrorType = { username?: string, password?: string };\n\nconst Login: FunctionComponent<Props> = (props) => {\n const { redirectTo } = props;\n const [loading, setLoading] = useSafeSetState(false);\n const [anchorOrigin, setAnchorOrigin] = useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const {vertical, horizontal} = anchorOrigin;\n const [popupMessage, setPopupMessage] = useState({\n message: \"\",\n type: \"\"\n });\n const login = useLogin();\n const translate = useTranslate();\n const {themeObject, setTheme} = useContext(ThemeContext)\n const classes = useStyles(props);\n // const theme = useTheme();\n\n const [open, setOpen] = useState(false);\n\n const handleClick = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setOpen(true);\n };\n \n const handleClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n \n setOpen(false);\n };\n \n useEffect(() => {\n setTheme({ id: \"Blue\",\n img: cat_logo_white})\n },[])\n const screenBelowMd = useMediaQuery(themeObject.breakpoints.down('md'));\n\n const validate = (values: FormData) => {\n const errors: ErrorType = { username: undefined, password: undefined };\n\n if (!values.username) {\n errors.username = translate(\"ra.validation.required\");\n }\n if (!values.password) {\n errors.password = translate(\"ra.validation.required\");\n }\n return errors;\n };\n\n const submit = (values) => {\n setLoading(true);\n login(values, redirectTo)\n .then(() => {\n setLoading(false);\n // notify(\"login successful!\", { type: 'success' })\n handleClick(\"Login successful!\", \"success\")\n })\n .catch((error) => {\n setLoading(false);\n const message = typeof error === \"string\" ? error\n : typeof error === \"undefined\" || !error.message\n ? \"ra.auth.sign_in_error\"\n : error.message\n handleClick(message,\"warning\");\n });\n };\n\n\n return (\n <MuiThemeProvider theme={themeObject}>\n <Box className={classes.loginRoot}>\n <Box style={{ display: 'flex', alignItems: 'center', flexDirection: 'row', justifyContent: 'center', height: '100%'}}>\n <Paper className={classes.loginBox} sx={{ flexDirection: { xs: \"column\", md: \"row\" } }}>\n <Grid container sx={{ alignItems: \"center\"}} alignItems=\"center\" justifyContent=\"center\" py={5}>\n <Grid item md={6} py={{ xs: 10, md: 0, lg:0 }} sx={{ borderRight: { xs: \"none\", md: \"1px solid #E1E1E1\" },width: \"100%\", height: '100%', px: \"10px\" }}>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", justifyContent: \"center\", alignItems: \"center\" }} >\n <Box width={200} mb={5}>\n <img src={cat_logo} width=\"100%\" alt=\"Change Assessment Tool Logo\" />\n </Box>\n <Form\n onSubmit={submit}\n validate={validate}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit} noValidate style={{ padding: screenBelowMd ? \"20px\" : \"25px\" }} >\n <Box>\n <h5 className={classes.fieldTags} >Username</h5>\n <Box >\n <TextInput\n style={{ width: screenBelowMd ? \"100%\" : \"100%\" }}\n fullWidth\n id=\"username\"\n name=\"username\"\n source=\"email\"\n label=\"\"\n placeholder={translate(\"ra.auth.username\")}\n disabled={loading}\n variant=\"outlined\"\n InputLabelProps={{\n style: {\n color: \"#E1E1E1\",\n fontFamily: \"Roboto\",\n fontWeight: \"normal\",\n },\n }}\n />\n </Box>\n <h5 className={classes.fieldTags}>Password</h5>\n <div >\n <PasswordInput\n style={{ width: screenBelowMd ? \"100%\" : \"100%\" }}\n fullWidth\n id=\"password\"\n name=\"password\"\n source=\"password\"\n label=\"\"\n component={Input}\n placeholder={translate(\"ra.auth.password\")}\n type=\"password\"\n disabled={loading}\n autoComplete=\"current-password\"\n variant=\"outlined\"\n InputLabelProps={{\n style: {\n color: \"#E1E1E1\",\n fontFamily: \"Roboto\",\n fontWeight: \"normal\",\n },\n }}\n />\n </div>\n </Box>\n <div>\n <Button\n style={{ width: screenBelowMd ? \"100%\" : \"25rem\" }}\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={loading}\n disableElevation\n >\n {loading && (\n <CircularProgress\n className={classes.icon}\n size={18}\n thickness={2}\n />\n )}\n {translate(\"Login\")}\n </Button>\n </div>\n <Box p={2} textAlign=\"right\">\n <Link style={{ color: '#00a0d9', textDecorationColor: '#00a0d9' }}\n to={{\n pathname: '/forgot_password',\n }}\n >\n <small>Forgot your password?</small>\n </Link>\n </Box>\n </form>\n )}\n />\n </Box>\n </Grid>\n\n <Grid item md={6} px={{ xs: 2, md: 10, lg: 10 }} py={{ xs: 10, md: 0, lg:0 }} sx={{height: '100%', width: \"100%\" }}>\n <Carousel\n fullHeightHover={false} // We want the nav buttons wrapper to only be as big as the button element is\n navButtonsAlwaysInvisible\n navButtonsProps={{ // Change the colors and radius of the actual buttons. THIS STYLES BOTH BUTTONS\n style: {\n backgroundColor: '#00a0d9',\n borderRadius: 0,\n display: \"hidden\"\n }\n }}\n navButtonsWrapperProps={{ // Move the buttons to the bottom. Unsetting top here to override default style.\n style: {\n bottom: '0',\n top: 'unset'\n }\n }}\n // NextIcon='next' // Change the \"inside\" of the next button to \"next\"\n // PrevIcon='prev'\n >\n {\n images.map((item, i) => <Item key={i} item={item} />)\n }\n </Carousel>\n </Grid>\n <Notification />\n </Grid>\n </Paper>\n </Box>\n </Box>\n\n\n <Snackbar open={open} autoHideDuration={6000} anchorOrigin={{vertical, horizontal }} onClose={handleClose}>\n <Alert\n onClose={handleClose}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </MuiThemeProvider>\n );\n};\n\nLogin.propTypes = {\n redirectTo: PropTypes.string,\n};\n\nfunction Item(props) {\n return (\n <Box style={{ display: \"flex\", justifyContent: 'center', flexDirection: 'column', alignItems: 'center' }}>\n {/* <h2>{props.item.name}</h2> */}\n <img src={`${props.item.imgPath}`} alt={props.item.label} style={{ height: \"280px\", width: \"100%\" }} />\n <h4>{props.item.label}</h4>\n <p style={{ height: \"80px\", textAlign: \"center\" }} dangerouslySetInnerHTML={{ __html: props.item.description }} />\n </Box>\n )\n}\n\nexport default Login;\n\n","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n SelectArrayInput,\n TextInput,\n maxLength,\n required,\n useDataProvider, useNotify, useRefresh\n} from \"react-admin\";\nimport { Form } from 'react-final-form';\nimport { ACTIONS_CHOICES } from \"../../framework/constants\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n // padding: 16\n },\n});\n\nexport const PermissionCreateDrawer = ({ initialValues, drawerOpen, onClose ,handleSnackbarOpen}) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const classes = useStyles();\n\n const resource = \"Permission\"\n const onSubmit = (values, form) => {\n dataProvider\n .create(resource, {\n data: values\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Permission added successfully\",\"success\");\n refresh()\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n\n const validate = () => {\n\n }\n\n return (\n <CustomDrawer drawerAnchor=\"right\" title=\"Create Permission\" drawerOpen={drawerOpen} onClose={onClose}>\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Description\"\n source=\"description\"\n multiline\n validate={[maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Resource\"\n source=\"resource\"\n multiline\n validate={[maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <SelectArrayInput\n fullWidth\n variant=\"outlined\"\n label=\"Actions\"\n source=\"action\"\n choices={ACTIONS_CHOICES}\n />\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" size=\"large\" >Submit</Button>\n <Button type=\"button\" variant=\"outlined\" color=\"primary\" size=\"large\" onClick={() => onClose(false)} >Cancel</Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n )\n}\n\nexport default PermissionCreateDrawer;","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from \"react\";\nimport {\n SelectArrayInput,\n TextInput,\n maxLength,\n required,\n useDataProvider\n} from \"react-admin\";\nimport { Form } from 'react-final-form';\nimport { ACTIONS_CHOICES } from \"../../framework/constants\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n // padding: 16\n },\n});\n\nexport const PermissionEditDrawer = ({ record, drawerOpen, onClose,handleSnackbarOpen}) => {\n const dataProvider = useDataProvider();\n const [initialValues, setInitialValues] = React.useState();\n const classes = useStyles();\n\n const resource = \"Permission\"\n const onSubmit = (values, form) => {\n dataProvider\n .update(resource, {\n id: record.id,\n data: values\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Permission updated successfully\",\"success\");\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n\n const validate = () => {\n\n }\n\n React.useEffect(() => {\n if (record && record.id)\n dataProvider.getOne(resource, { id: record.id }).then(response => {\n setInitialValues(response.data)\n })\n }, [record])\n\n return (\n <CustomDrawer drawerAnchor=\"right\" title=\"Edit Permission\" drawerOpen={drawerOpen} onClose={onClose}>\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Description\"\n source=\"description\"\n multiline\n validate={[maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Resource\"\n source=\"resource\"\n multiline\n validate={[maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <SelectArrayInput\n fullWidth\n variant=\"outlined\"\n label=\"Actions\"\n source=\"action\"\n choices={ACTIONS_CHOICES}\n />\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" size=\"large\" >Submit</Button>\n <Button type=\"button\" variant=\"outlined\" color=\"primary\" size=\"large\" onClick={() => onClose(false)} >Cancel</Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n )\n}\n\nexport default PermissionEditDrawer;","import { Box, Typography, useMediaQuery } from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport Button from \"@mui/material/Button\";\nimport * as React from \"react\";\nimport { cloneElement } from \"react\";\nimport {\n ChipField,\n Datagrid,\n Filter,\n List,\n SearchInput,\n SelectField,\n SimpleList,\n TextField,\n TopToolbar,\n sanitizeListRestProps,\n useDataProvider,\n useListContext,\n useRecordContext,\n useRefresh,\n} from \"react-admin\";\nimport { YES_NO_CHOICES } from \"../../framework/constants\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport PostPagination from \"../../utils/PostPagination\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport MoreActions from \"../customComponents/moreActions\";\nimport PermissionCreateDrawer from \"./permissionCreateDrawer\";\nimport PermissionEditDrawer from \"./permissionEditDrawer\";\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nimport { Alert, Snackbar } from \"@mui/material\";\n\nconst ListActions = (props) => {\n const {\n className,\n exporter,\n filters,\n isCustomerAdmin,\n isSuperAdmin,\n maxResults,\n handleCreateDrawerOpen,\n ...rest\n } = props;\n const {\n currentSort,\n resource,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext();\n\n return (\n <TopToolbar {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n <CreatePermissionBtn {...props} />\n </TopToolbar>\n );\n};\n\nconst CreatePermissionBtn = (props) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const { themeObject } = React.useContext(ThemeContext)\n const { isCustomerAdmin, permissions, isSuperAdmin, handleCreateDrawerOpen } =\n props;\n return (\n <Button\n variant=\"contained\"\n onClick={() => handleCreateDrawerOpen(true)}\n sx={{\n width: isSmall ? \"0px\" : \"210px\",\n marginRight: \"8px\",\n padding: '0px',\n boxShadow: \"0\",\n backgroundColor: themeObject.palette.primary.main,\n \"&:hover\": {\n backgroundColor: themeObject.palette.primary.buttonContrast,\n color: \"white\",\n cursor: \"pointer\",\n boxShadow: \"0\",\n },\n }}\n >\n {isSmall ? (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"100%\",\n height: \"41px\",\n }}\n >\n <AddIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n ) : (\n <Box\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\",\n }}\n >\n <Box\n sx={{\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {\"Create Permission\"}\n </Box>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"41px\",\n height: \"41px\",\n }}\n >\n <AddIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n </Box>\n )}\n </Button>\n );\n\n // <Button label=\"\" variant=\"contained\" endIcon={<AddIcon />} onClick={() => handleCreateDrawerOpen(true)} />\n};\n\nconst Empty = (props) => {\n const { basePath, resource } = useListContext();\n return (\n <Box textAlign=\"center\" m={1} p={1}>\n <Typography variant=\"h4\" paragraph>\n No Projects yet.\n </Typography>\n <Typography variant=\"body1\">Do you want to add one?</Typography>\n <Box mt={1}>\n <CreatePermissionBtn {...props} />\n </Box>\n </Box>\n );\n};\n\nconst PermissionFilter = (props) => (\n <Filter {...props}>\n <SearchInput variant=\"outlined\" source=\"q\" alwaysOn />\n </Filter>\n);\n\nexport const PermissionList = (props) => {\n const [createDrawerOpen, setCreateDrawerOpen] = React.useState();\n const [editDrawerOpen, setEditDrawerOpen] = React.useState();\n const [record, setRecord] = React.useState();\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const handleCreateDrawerOpen = (open) => {\n setCreateDrawerOpen(open);\n };\n\n const handleCreateDrawerClose = () => {\n setCreateDrawerOpen(false);\n };\n\n const handleEditDrawerOpen = (open) => {\n setEditDrawerOpen(open);\n };\n\n const handleEditDrawerClose = (open) => {\n setRecord(null);\n setEditDrawerOpen(open);\n };\n\n const rowActionsChoices = [\n { id: \"edit\", name: \"Edit\", resource: \"Permission\", action: [\"edit\"] },\n {\n id: \"delete\",\n name: \"Delete\",\n resource: \"Permission\",\n action: [\"delete\"],\n },\n ];\n\n const handleMoreActionsClick = ({ action, record }) => {\n switch (action) {\n case \"edit\":\n setRecord(record);\n handleEditDrawerOpen(true);\n break;\n case \"delete\":\n const proceed = window.confirm(\n \"You are deleting the entry. Are you sure?\"\n );\n if (proceed) {\n dataProvider\n .delete(\"Permission\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"Permission deleted successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n break;\n }\n };\n\n const ActionField = ({ record }) => {\n if (record && record.action) {\n return record.action.map((item, index) => (\n <ChipField\n record={record.action}\n size=\"small\"\n source={index}\n style={{\n backgroundColor: \"#0ab39c\",\n color: \"#fff\",\n fontWeight: \"500\",\n }}\n />\n ));\n }\n\n return null;\n };\n const ActionFieldSmallSc = () => {\n const records = useRecordContext();\n if (records && records.action) {\n return records.action.map((item, index) => (\n <ChipField\n record={records.action}\n size=\"small\"\n source={index}\n style={{\n backgroundColor: \"#0ab39c\",\n color: \"#fff\",\n fontWeight: \"500\",\n }}\n />\n ));\n }\n\n return null;\n };\n return (\n <WithPermission\n resource=\"Permission\"\n bypassUser={isSuperAdmin}\n action={[\"view\"]}\n {...props}\n >\n <List\n title=\"Permission\"\n actions={\n <ListActions\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n empty={\n <Empty\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n filters={<PermissionFilter />}\n bulkActionButtons={false}\n {...props}\n pagination={<PostPagination />}\n >\n {isSmall ? (\n // <SimpleList\n // primaryText={record => record.name}\n // // secondaryText={record => `${record.views} views`}\n // tertiaryText={record => record.resource}\n // // tertiaryText={record => new Date(record.published_at).toLocaleDateString('en-GB')}\n // linkType={record => record.canEdit ? \"edit\" : \"show\"}\n // />\n <Datagrid>\n <Box\n display=\"flex\"\n style={{ flexDirection: \"column\", width: \"100%\" }}\n >\n <TextField label=\"Name\" source=\"name\" sortable={true} />\n <Box>\n <ActionFieldSmallSc\n label=\"Action\"\n source=\"action\"\n sortable={true}\n />\n </Box>\n </Box>\n </Datagrid>\n ) : (\n <Datagrid>\n {/*<TextField source=\"id\" sortable={false}/>*/}\n <TextField label=\"Name\" source=\"name\" sortable={true} />\n <TextField label=\"Resource\" source=\"resource\" sortable={true} />\n <ActionField label=\"Action\" source=\"action\" sortable={true} />\n <SelectField\n label=\"Allow\"\n source=\"allow\"\n optionText={\n <ChipField\n source=\"name\"\n style={{ backgroundColor: \"#299CDB\", color: \"#fff\" }}\n size=\"small\"\n />\n }\n choices={YES_NO_CHOICES}\n sortable={true}\n />\n <TextField\n label=\"Description\"\n source=\"description\"\n sortable={true}\n />\n <MoreActions\n choices={rowActionsChoices}\n bypassUser={isSuperAdmin}\n permissions={props.permissions}\n handleClose={() => console.log(\"closing\")}\n handleClick={handleMoreActionsClick}\n />\n </Datagrid>\n )}\n </List>\n <PermissionCreateDrawer\n record={record}\n drawerOpen={createDrawerOpen}\n onClose={handleCreateDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <PermissionEditDrawer\n record={record}\n drawerOpen={editDrawerOpen}\n onClose={handleEditDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n};\n\nexport default PermissionList;\n","import AccountBalanceIcon from '@material-ui/icons/AccountBalance';\nimport PermissionList from './permissionList';\n\n\nexport default {\n list: PermissionList,\n icon: AccountBalanceIcon,\n};","import { Button } from '@material-ui/core';\r\nimport DownloadIcon from '@mui/icons-material/Download';\r\nimport { useContext } from 'react';\r\nimport { ThemeContext } from '../framework/theme/themeContext';\r\n// import theme from '../framework/theme';\r\n\r\nconst ExportButton = ({ handleExport, filename, node2Export, btnName, varient, width, exportFile }) => {\r\n const {themeObject} = useContext(ThemeContext)\r\n return (\r\n <Button\r\n variant={varient}\r\n style={{ padding: themeObject.spacing(0, 0, 0, 0), width: width }}\r\n onClick={exportFile}\r\n color=\"primary\"\r\n ><DownloadIcon fontSize=\"small\" /> {btnName}\r\n </Button>\r\n )\r\n}\r\n\r\nexport default ExportButton;","import Chip from \"@material-ui/core/Chip\";\nimport makeStyles from \"@material-ui/styles/makeStyles\";\nimport clsx from \"clsx\";\n\nconst useStyles = makeStyles((theme) => ({\n chipfield_yes: {\n height: 20,\n borderRadius: 11,\n backgroundColor: theme.palette.customsColor.success,\n color: \"#FFF\",\n textTransform: \"uppercase\",\n display: \"flex\",\n justifyContent: \"center\",\n width: \"fit-content\",\n // margin: \"0 auto\",\n fontSize: 10,\n },\n chipfield_status_yes: {\n height: 20,\n borderRadius: 11,\n backgroundColor: theme.palette.customsColor.secondary,\n color: \"#FFF\",\n textTransform: \"uppercase\",\n display: \"flex\",\n justifyContent: \"center\",\n width: \"fit-content\",\n // margin: \"0 auto\",\n fontSize: 10,\n },\n chipfield_no: {\n height: 20,\n borderRadius: 11,\n backgroundColor: theme.palette.error.contrastText,\n color: theme.palette.error.main,\n textTransform: \"uppercase\",\n display: \"flex\",\n justifyContent: \"center\",\n width: \"fit-content\",\n // margin: \"0 auto\",\n border: \"1px solid\",\n borderColor: theme.palette.error.main,\n fontSize: 10,\n \"&.disabled\": {\n color: \"#828282\",\n borderColor: \"#828282\",\n },\n },\n centerChip: {\n display: 'flex',\n justifyContent: 'center',\n }\n}));\n\nexport const ManageChip = ({ record, inactiveChip }) => {\n const classes = useStyles();\n const choice = record;\n return (\n <div className={classes.centerChip}>\n <Chip\n label={choice.name}\n // size=\"small\"\n className={(choice.id === true || choice.id === \"yes\") ? classes.chipfield_yes : clsx(classes.chipfield_no, { \"disabled\": inactiveChip })}\n />\n </div>\n );\n};\nexport const ManageChipForStatus = ({ record, inactiveChip }) => {\n const classes = useStyles();\n const choice = record;\n return (\n <div className={classes.centerChip}>\n <Chip\n label={choice.name}\n // size=\"small\"\n className={(choice.id === true || choice.id === \"yes\") ? classes.chipfield_status_yes : clsx(classes.chipfield_no, { \"disabled\": inactiveChip })}\n />\n </div>\n );\n};\n","import Chart from \"chart.js/auto\";\nimport 'chartjs-adapter-moment';\nimport moment from \"moment\";\nimport React from \"react\";\n\nclass LineChart extends React.Component {\n constructor(props) {\n super(props);\n this.canvasRef = React.createRef();\n }\n\n componentDidUpdate() {\n this.myChart.data.labels = this.props.chartData.labels;\n this.myChart.data.datasets = [...this.props.chartData.datasets.milestonesData, ...this.props.chartData.datasets.phasesData];\n this.myChart.update();\n }\n\n componentDidMount() {\n this.myChart = new Chart(this.canvasRef.current, {\n type: 'bar',\n data: {\n labels: this.props.chartData.labels,\n datasets: [...this.props.chartData.datasets.milestonesData, ...this.props.chartData.datasets.phasesData],\n },\n options: {\n indexAxis: \"y\",\n aspectRatio: Math.abs(moment(this.props.chartData.startDate).diff(moment(this.props.chartData.endDate), 'months')) >= 2 ? 1.4 : 1.8,\n // height: 200,\n legend: {\n display: true,\n },\n interaction: {\n mode: 'dataset'\n },\n layout: {\n padding: {\n left: 10, // Add padding if needed\n right: 10,\n top: 10,\n bottom: 10\n }\n },\n plugins: {\n title: {\n display: true,\n text: 'Milestone'\n },\n legend: {\n display: false\n },\n tooltip: {\n callbacks: {\n label: function (context) {\n if (Array.isArray(context.raw)) {\n console.log(context)\n const startDate = moment(context.raw[0]).format(\"DD/MM/YYYY\");\n const endDate = moment(context.raw[1]).format(\"DD/MM/YYYY\");\n return `${startDate} - ${endDate}`;\n\n } else {\n const date = moment(context.raw).format(\"DD/MM/YYYY\");\n const milestonePointHover = context.dataset.name + \", \" + date;\n return milestonePointHover;\n }\n }\n }\n }\n },\n responsive: true,\n maintainAspectRatio: false,\n\n // barPercentage: 0.8, // Adjust the bar width as needed (0.8 means 80% of the available space)\n // categoryPercentage: 0.8,\n scales: {\n x: {\n borderWidth: 10,\n stacked: false,\n min: moment(this.props.chartData.startDate).startOf('month').add(-1, \"day\"),\n max: moment(this.props.chartData.endDate).endOf('month').add(1, \"day\"),\n type: \"time\",\n time: {\n unit: \"month\",\n },\n // ticks: {\n // major: {\n // enabled: true\n // },\n // maxRotation: 0,\n // minRotation: 0,\n // callback: (context, index) => {\n // // Customize the tick label\n // // console.log(this.props.chartData.datasets.phasesData)\n // // const startDate = moment(this.props.chartData.startDate);\n // // const endDate = moment(this.props.chartData.endDate)\n // // return `${startDate.format(\"DD/MM/YYYY\")} - ${endDate.format(\"DD/MM/YYYY\")}`;\n\n // // const dateRanges = [\n // // { start: '2023-01-01', end: '2023-01-07' },\n // // { start: '2023-01-08', end: '2023-01-14' },\n // // { start: '2023-01-15', end: '2023-01-21' },\n // // { start: '2023-01-22', end: '2023-01-24' },\n // // { start: '2023-01-25', end: '2023-01-29' },\n // // // Add more date ranges as needed\n // // ];\n // // console.log(this.props.chartData.datasets)\n // // const dateRangess = this.props.chartData.datasets.phasesData.map(phase => {\n // // return { start: phase.data[0][0], end: phase.data[0][1] };\n // // });\n // // // console.log(dateRangess)\n // // const rangeIndex = Math.floor(index / 2); // Each date range occupies two ticks\n // // const startDate = moment(dateRangess[rangeIndex].start);\n // // const endDate = moment(dateRangess[rangeIndex].end);\n\n // // return `${startDate.format(\"DD/MM/YYYY\")} - ${endDate.format(\"DD/MM/YYYY\")}`;\n // // let displayedDates = [];\n\n // // const dateRanges = this.props.chartData.datasets.phasesData.map(phase => {\n // // return { start: phase.data[0][0], end: phase.data[0][1] };\n // // });\n // // const dateIndex = Math.floor(index / 2); // Each date range occupies two ticks\n\n // // if (dateIndex < dateRanges.length) {\n // // const startDate = moment(dateRanges[dateIndex].start);\n // // const endDate = moment(dateRanges[dateIndex].end);\n // // const formattedDate = `${startDate.format(\"DD/MM/YYYY\")} - ${endDate.format(\"DD/MM/YYYY\")}`;\n\n // // // Check if the date is already displayed\n // // if (!displayedDates.includes(formattedDate)) {\n // // displayedDates.push(formattedDate);\n // // return formattedDate;\n // // }\n // // }\n\n // // return '';\n // const dateRanges = this.props.chartData.datasets.phasesData.map(phase => {\n // return { start: phase.data[0][0], end: phase.data[0][1] };\n // });\n // const dateIndex = Math.floor(index / 2); // Each date range occupies two ticks\n\n // if (dateIndex < dateRanges.length) {\n // const startDate = moment(dateRanges[dateIndex].start);\n // const endDate = moment(dateRanges[dateIndex].end);\n // const formattedDate = `${startDate.format(\"DD/MM/YYYY\")} - ${endDate.format(\"DD/MM/YYYY\")}`;\n\n // // if (Array.isArray(context.raw)) {\n // // This is a tooltip, return the formatted date range\n // // return formattedDate;\n // return (index % 2 === 0) ? formattedDate : '';\n // // } else {\n // // This is an X-axis tick, return the same information\n // // const milestonePointHover = formattedDate;\n // // return milestonePointHover;\n // // }\n // }\n\n // return '';\n // }\n // }\n },\n y: {\n stacked: true,\n beginAtZero: true,\n showBorder: true,\n suggestedMin: 0, // set your desired minimum value\n suggestedMax: 50, //,\n ticks: {\n beginAtZero: true,\n stepSize: 10000,\n min: 0,\n max: 50\n }\n // // display: false,\n // grid: {\n // display: false,\n // drawBorder: false,\n // }\n }\n }\n },\n plugins: {\n // afterDraw: (chart) => {\n // const ctx = chart.ctx;\n // const xAxis = chart.scales.x;\n\n // // Draw the start and end dates\n // const startDateLabel = moment(this.props.chartData.startDate).format('DD/MM/YYYY');\n // const endDateLabel = moment(this.props.chartData.endDate).format('DD/MM/YYYY');\n\n // const startX = xAxis.getPixelForValue(moment(this.props.chartData.startDate).valueOf());\n // const endX = xAxis.getPixelForValue(moment(this.props.chartData.endDate).valueOf());\n // const labelY = chart.height - 10;\n\n // // Draw the start and end date labels\n // ctx.textAlign = 'center';\n // ctx.fillStyle = 'black';\n // ctx.fillText(startDateLabel, startX, labelY);\n // ctx.fillText(endDateLabel, endX, labelY);\n\n // return ctx\n // }\n legend: {\n display: false\n }\n }\n });\n }\n\n render() {\n return <canvas ref={this.canvasRef} />;\n }\n}\n\nexport default LineChart;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Form } from \"react-final-form\";\nimport { Button } from \"@material-ui/core\";\nimport { withStyles } from \"@material-ui/styles\";\nimport { handleProjectInfo } from \"../../utils/AppUtils\";\n\nconst styles = (theme) => ({\n buttonDiv: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n marginBottom: 40,\n },\n nextButton: {\n marginRight: 42,\n },\n previousButton: {\n marginRight: 42,\n },\n});\n\nclass Wizard extends React.Component {\n static propTypes = {\n onSubmit: PropTypes.func.isRequired,\n };\n static Page = ({ children }) => children;\n\n constructor(props) {\n super(props);\n this.state = {\n page: 0,\n values: props.initialValues || {},\n };\n }\n next = (values) => {\n this.setState((state) => ({\n page: Math.min(state.page + 1, this.props.children.length - 1),\n values,\n }));\n };\n\n previous = () =>\n this.setState((state) => ({\n page: Math.max(state.page - 1, 0),\n }));\n\n toggleDrawer = (open) => (event) => {\n if (\n event.type === \"keydown\" &&\n (event.key === \"Tab\" || event.key === \"Shift\")\n ) {\n return;\n }\n window.location.reload(false);\n this.props.onClose(open);\n };\n\n /**\n * NOTE: Both validate and handleSubmit switching are implemented\n * here because 🏁 Redux Final Form does not accept changes to those\n * functions once the form has been defined.\n */\n\n validate = (values) => {\n const activePage = React.Children.toArray(this.props.children)[\n this.state.page\n ];\n return activePage.props.validate ? activePage.props.validate(values) : {};\n };\n\n handleSubmit = (values, form) => {\n const { children, onSubmit } = this.props;\n const { page } = this.state;\n const isLastPage = page === React.Children.count(children) - 1;\n if (isLastPage) {\n return onSubmit(values, form);\n } else {\n this.next(values);\n }\n };\n\n render() {\n const { classes, setProjectInfo } = this.props;\n const { children, previousBtnEnabled = true } = this.props;\n const { page, values } = this.state;\n const activePage = React.Children.toArray(children)[page];\n const isLastPage = page === React.Children.count(children) - 1;\n\n handleProjectInfo(values, page, setProjectInfo);\n\n return (\n <Form\n initialValues={values}\n validate={this.validate}\n onSubmit={this.handleSubmit}\n mutators={this.props.mutators}\n >\n {({ handleSubmit, submitting, values }) => (\n <form onSubmit={handleSubmit}>\n {activePage}\n <div className={classes.buttonDiv}>\n {previousBtnEnabled && page > 0 && (\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={this.previous}\n className={classes.previousButton}\n >\n Previous\n </Button>\n )}\n {!isLastPage && (\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n className={classes.nextButton}\n >\n Next\n </Button>\n )}\n {isLastPage && (\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled={submitting}\n className={classes.nextButton}\n >\n Submit\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n className={classes.cancelButton}\n onClick={this.toggleDrawer(false)}\n >\n Cancel\n </Button>\n </div>\n {/*<pre>{JSON.stringify(values, 0, 2)}</pre>*/}\n </form>\n )}\n </Form>\n );\n }\n}\n\nexport default withStyles(styles)(Wizard);\n","import * as React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport { Form, useForm } from \"react-final-form\";\n\nconst useStyles = makeStyles((theme) => ({\n projectCard: {\n width: \"95%\",\n height: \"80%\",\n marginTop: 30,\n marginLeft: 20,\n marginRight: 10,\n borderRadius: 12,\n [theme.breakpoints.down(\"xs\")]: {\n width: \"100%\",\n height: '100%',\n margin: '0px',\n borderRadius: 0,\n },\n },\n content: {\n width: \"100%\",\n [theme.breakpoints.up(\"md\")]: {},\n padding: \"35px 40px 0 47px\",\n [theme.breakpoints.down(\"xs\")]: {\n padding: \"15px 10px 0 10px\",\n\n // width: \"60%\"\n overflowX: 'hidden'\n },\n },\n formContent: {\n marginRight: 10,\n marginLeft: 10,\n [theme.breakpoints.up(\"md\")]: {},\n [theme.breakpoints.down(\"xs\")]: {\n // border: '1px solid red',\n // paddingRight: '30px',\n // margin: 0\n },\n },\n fullList: {\n width: \"auto\",\n },\n drawerTitleBar: {\n display: \"flex\",\n alignItems: \"center\",\n marginBottom: 24,\n },\n drawerTitle: {\n flexGrow: 1,\n fontFamily: \"Inter\",\n fontWeight: 600,\n fontStyle: \"normal\",\n fontSize: 24,\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: '3%',\n },\n },\n drawerOverflow: {\n overflowY: \"hidden\",\n },\n backDrop: {\n // background: \"rgba(255,255,255,0.2)\",\n background: \"blue\"\n },\n}));\n\nexport const ProjectCustomDrawer = ({\n children,\n title,\n drawerAnchor,\n drawerOpen,\n onClose,\n projectInfo\n}) => {\n const classes = useStyles();\n const toggleDrawer = (open) => (event) => {\n if (\n event.type === \"keydown\" &&\n (event.key === \"Tab\" || event.key === \"Shift\")\n ) {\n return;\n }\n\n onClose(open);\n };\n\n\n\n // if (projectTitleInfoString) {\n // console.log(projectTitleInfoString);\n // } else {\n // console.log(\"No valid values to display.\");\n // }\n\n\n return (\n <Drawer\n classes={{ paper: classes.projectCard }}\n onClose={(event, reason) => {\n if (reason === 'backdropClick') {\n // onClose(event, reason);\n toggleDrawer(true)\n }\n }}\n anchor={drawerAnchor}\n open={drawerOpen}\n // onClose={toggleDrawer(false)}\n >\n <div className={classes.content}>\n <Box className={classes.drawerTitleBar}>\n <Typography variant=\"h6\" className={classes.drawerTitle}>\n {title}\n <span style={{ fontSize: 12, marginLeft: 10, color: 'lightslategrey' }}>{projectInfo}</span>\n </Typography>\n <IconButton aria-label=\"close\" size=\"medium\" component=\"span\"\n onClick={() => {\n onClose(false);\n window.location.reload(false);\n }}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </Box>\n <div className={classes.formContent}>{children}</div>\n </div>\n </Drawer>\n );\n};\n\nexport default ProjectCustomDrawer;\n\n// const FormData= ()=>{\n\n// return <Form>\n\n// </Form>\n// }","import { Box, Grid, Typography } from \"@material-ui/core\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport {\n AutocompleteArrayInput, AutocompleteInput, DateInput, Error, FormDataConsumer, Loading,\n ReferenceArrayInput, ReferenceInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n useNotify,\n useRefresh\n} from \"react-admin\";\nimport { Field, useForm } from \"react-final-form\";\nimport { PROJECT_DRIVERS_MASTER_DATA_ID, PROJECT_PHASE_MASTER_DATA_ID } from \"../../framework/constants\";\nimport { onFailureMessage, startEndDatesOfWeeks } from \"../../utils/AppUtils\";\nimport Wizard from \"../customComponents/wizard\";\nimport ProjectCustomDrawer from \"./projectCustomDrawer\";\nimport ProjectForecastsInputsContainer from \"./projectForecastsInputsContainer\";\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n subTitle: {\n marginBottom: 16,\n },\n forecastTitle: {\n backgroundColor: \"#F2F2F2\",\n display: \"flex\",\n },\n forecastCard: {\n marginBottom: 30,\n margin: \"0 auto\",\n width: \"90%\",\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\"\n }\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n inputWidthChange: {\n width: 322,\n [theme.breakpoints.down(\"xs\")]: {\n width: '83vw',\n }\n },\n inputWidthMargin: {\n // marginRight: 100,\n },\n referenceInputWidth: {\n width: 350,\n [theme.breakpoints.down(\"xs\")]: {\n width: '100%'\n }\n },\n gridBoxMargin: {\n marginBottom: 12,\n width: 350,\n },\n phaseDateWidth: {\n width: 132,\n [theme.breakpoints.down(\"xs\")]: {\n width: '35vw'\n },\n },\n gridContainer: {\n display: \"grid\",\n gridColumnGap: 100,\n [theme.breakpoints.up(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr 1fr\",\n },\n [theme.breakpoints.between(\"sm\", \"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n forecastTopDiv: {\n width: \"95%\",\n },\n projectNoteText: {\n fontSize: 12,\n fontStyle: \"normal\",\n fontWeight: 400,\n marginBottom: 30,\n },\n tabsComponentDiv: {\n marginTop: 20,\n },\n}));\n\nconst StyledTabs = withStyles({\n indicator: {\n display: \"flex\",\n justifyContent: \"center\",\n backgroundColor: \"transparent\",\n height: 5,\n \"& > span\": {\n maxWidth: 80,\n width: \"100%\",\n backgroundColor: \"#4F4F4F\",\n },\n },\n})((props) => <Tabs {...props} TabIndicatorProps={{ children: <span /> }} />);\n\nconst StyledTab = withStyles((theme) => ({\n root: {\n textTransform: \"none\",\n color: \"#000\",\n fontWeight: theme.typography.fontWeightRegular,\n fontSize: theme.typography.pxToRem(15),\n marginRight: 60,\n \"&:focus\": {\n opacity: 1,\n },\n minWidth: 97,\n paddingLeft: 0,\n paddingRight: 0,\n },\n}))((props) => <Tab disableRipple {...props} />);\n\nexport const ProjectCreateDrawer = ({\n record,\n initialValues,\n drawerOpen,\n onClose,\n}) => {\n const [projectPhases, setProjectPhases] = React.useState();\n const [projectPhasesLoading, setProjectPhasesLoading] = React.useState();\n const [projectPhasesError, setProjectPhasesError] = React.useState();\n const [projectInfo, setProjectInfo] = React.useState(\"\");\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const refresh = useRefresh();\n const classes = useStyles();\n const resource = \"Project\";\n\n const onSubmit = (values, form) => {\n const phases =\n values.projectPhases && values.projectPhases.length > 0\n ? values.projectPhases\n .filter((x) => x && x.endDate != null && x.endDate != \"\")\n .map((projectPhase, index) => ({\n name: projectPhases[index].name,\n startDate: projectPhase.startDate,\n endDate: projectPhase.endDate,\n }))\n : null;\n // const forecast2 =\n // values.projectForecasts && values.projectForecasts.length > 0\n // ? values.projectForecasts.map((projectForecast, index) => ({\n // ...projectForecast,\n // businessUnitId: 1,\n // }))\n // : null;\n // const forecast3 =\n // values.projectForecasts && values.projectForecasts.length > 0\n // ? values.projectForecasts.map((projectForecast, index) => ({\n // ...projectForecast,\n // businessUnitId: 2,\n // }))\n // : null;\n // values.projectForecasts.push(...forecast2);\n // values.projectForecasts.push(...forecast3);\n // values.impactedBusinessUnitIds = [1, 2];\n const newForecastsValues = values.projectForecasts ? values.projectForecasts.flat() : null;\n values.projectForecasts = newForecastsValues;\n dataProvider\n .create(resource, {\n data: {\n ...values,\n projectPhases: phases,\n },\n })\n .then((response) => {\n form.restart();\n onClose(false);\n notify(\"Project added successfully\",\"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n };\n\n const WizardFromError = ({ name }) => (\n <Field\n name={name}\n subscription={{ touched: true, error: true }}\n render={({ meta: { touched, error } }) =>\n touched && error ? (\n <span style={{ color: \"#d32f2f\" }}>{error}</span>\n ) : null\n }\n />\n );\n\n React.useEffect(() => {\n setProjectPhasesLoading(true);\n dataProvider\n .getOne(\"MasterData\", { id: PROJECT_PHASE_MASTER_DATA_ID })\n .then((response) => {\n setProjectPhases(response.data.masterDataValues);\n setProjectPhasesLoading(false);\n })\n .catch((error) => {\n notify(`Project phases are unavailable: ${error.message}`, \"warning\");\n setProjectPhasesError(error.message);\n setProjectPhasesLoading(false);\n });\n }, []);\n\n return (\n <ProjectCustomDrawer\n drawerAnchor=\"right\"\n title=\"Create Project\"\n projectInfo={projectInfo}\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Wizard\n initialValues={{\n ...initialValues,\n projectPhases,\n }}\n onSubmit={onSubmit}\n onClose={onClose}\n setProjectInfo={setProjectInfo}\n >\n <Wizard.Page>\n <ProjectCreateInputs />\n </Wizard.Page>\n <Wizard.Page>\n <Typography className={classes.subTitle}>Project Phases</Typography>\n <ProjectPhasesInputs\n loading={projectPhasesLoading}\n error={projectPhasesError}\n data={projectPhases}\n />\n </Wizard.Page>\n <Wizard.Page\n validate={(values) => {\n const errors = {};\n // const weeksCount = getWeeksCount(moment(values.startDate), moment(values.endDate));\n const weeksCount = moment(values.endDate).diff(moment(values.startDate), 'week');\n const impactedBuCount = values.impactedBusinessUnits ? values.impactedBusinessUnits.length : 0;\n const forecastsValues = values && values.projectForecasts ? values.projectForecasts.flat() : null;\n if (forecastsValues) {\n if (forecastsValues.length < (weeksCount * (impactedBuCount + 1))) {\n errors.projectForecasts = \"Please fill all the project forecast details\";\n } else {\n for (let i = 0; i < forecastsValues.length; i++) {\n if (\n forecastsValues[i] &&\n !forecastsValues[i].risk\n ) {\n errors.projectForecasts =\n \"Please fill all the project forecast details\";\n break;\n }\n }\n }\n } else {\n errors.projectForecasts =\n \"Please fill all the project forecast details\";\n }\n return errors;\n }}\n >\n <div className={classes.forecastTopDiv}>\n <div>\n <Typography>Change Impact Forecast</Typography>\n <ForecastToolbar />\n {/* <h6 className={classes.projectNoteText}>\n Note : Click / tap on the color brick to select the impact. You\n can change the severity of any week by selecting color brick of\n that week. Please note that the followed bricks will change to\n same impact which is selected\n </h6>\n <ProjectForecastsInputs /> */}\n </div>\n </div>\n <div style={{ marginBottom: 16 }}>\n <WizardFromError name=\"projectForecasts\" />\n </div>\n </Wizard.Page>\n </Wizard>\n </ProjectCustomDrawer>\n );\n};\n\nconst ProjectCreateInputs = () => {\n const classes = useStyles();\n const [projectDriverChoices, setProjectDriverChoices] = React.useState();\n const [projectDriversLoading, setProjectDriversLoading] = React.useState();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const [showImpBus, setShowImpBus] = React.useState(false);\n const validateStartDate = (startDate, values) => {\n const endDate = values.endDate;\n if (startDate && endDate && startDate >= endDate) {\n return \"start date can not be greater than end date\";\n }\n };\n\n const validateEndDate = (endDate, values) => {\n const startDate = values.startDate;\n if (endDate && startDate && endDate <= startDate) {\n return \"end date can not be lesser than start date\";\n }\n };\n\n const validateGoLiveDate = (goLiveDate, values) => {\n const startDate = values.startDate;\n const endDate = values.endDate;\n if (goLiveDate < startDate || goLiveDate > endDate) {\n return \"Go live Date should be in between start date and end date. \";\n }\n };\n\n const handleBuChange = () => {\n console.log(showImpBus);\n setShowImpBus(true);\n console.log(showImpBus);\n }\n console.log(showImpBus);\n\n React.useEffect(() => {\n dataProvider\n .getOne(\"ProjecDriverMasterData\", { id: PROJECT_DRIVERS_MASTER_DATA_ID })\n .then(({ data }) => {\n setProjectDriverChoices(data.masterDataValues)\n setProjectDriversLoading(false)\n })\n .catch(error => {\n console.log(error);\n setProjectDriversLoading(false)\n setProjectDriverChoices([])\n notify(\"could not able to fetch project driver list\",\"warning\")\n })\n }, [])\n\n return (\n // <Grid container className={classes.gridContainer}>\n <Grid container spacing={2}>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <TextInput\n variant=\"outlined\"\n label=\"Project Name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n className={classes.inputWidthMargin}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n onChange={(e) => { console.log(e.target.value) }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n {/* <div onClick={console.log(\"hello bussss\")}> */}\n <ReferenceInput\n onChange={() => handleBuChange()}\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n validate={[required()]}\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n {/* </div> */}\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n {\n showImpBus ? <FormDataConsumer>\n {({ formData, ...rest }) => (\n <ReferenceArrayInput\n fullWidth\n variant=\"outlined\"\n label=\"Impacted Business Unit\"\n source=\"impactedBusinessUnits\"\n reference=\"BusinessUnit\"\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n filter={{\n excludeIds:\n formData && formData.businessUnitId\n ? [formData.businessUnitId]\n : null,\n }}\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n )}\n </FormDataConsumer> : <TextInput\n disabled\n source=\"body\"\n variant=\"outlined\"\n label=\"Impacted Business Unit\"\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n />\n }\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project Sponsor\"\n source=\"projectSponsorId\"\n reference=\"User\"\n validate={[required()]}\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Business Owner\"\n source=\"businessOwnerId\"\n reference=\"User\"\n validate={[required()]}\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <AutocompleteInput\n variant=\"outlined\"\n label=\"Strategic Driver\"\n source=\"projectDriver\"\n optionValue=\"name\"\n optionText=\"name\"\n choices={projectDriverChoices}\n validate={[required()]}\n fullWidth\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <DateInput\n variant=\"outlined\"\n label=\"Start Date\"\n source=\"startDate\"\n validate={[required(), validateStartDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <DateInput\n variant=\"outlined\"\n label=\"End Date\"\n source=\"endDate\"\n style={{ marginRight: 100 }}\n validate={[required(), validateEndDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Change Lead\"\n source=\"changeLeaderId\"\n reference=\"User\"\n validate={[required()]}\n fullWidth\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n {/* ----------------GO live date section start------------ */}\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <DateInput\n variant=\"outlined\"\n label=\"Go Live Date\"\n source=\"goLiveDate\"\n style={{ marginRight: 100 }}\n validate={[required(), validateGoLiveDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* ------- Go live date sction end------------- */}\n </Grid>\n );\n};\n\nconst ProjectPhasesInputs = ({ loading, error, data }) => {\n const classes = useStyles();\n console.log(data)\n const validateStartDate = (value, values, index) => {\n try {\n const startDate = value ? new Date(value) : null;\n const projectStartDate = values.startDate\n ? new Date(values.startDate)\n : null;\n const endDate = values.projectPhases[index].endDate\n ? new Date(values.projectPhases[index].endDate)\n : null;\n const prePhaseIndex = Math.max(index - 1, 0);\n const prePhaseEndDate = values.projectPhases[prePhaseIndex].endDate\n ? new Date(values.projectPhases[prePhaseIndex].endDate)\n : null;\n if (startDate && endDate && startDate >= endDate) {\n return \"should be lesser than end date\";\n }\n if (startDate && startDate < projectStartDate) {\n return `should be greater than \"${projectStartDate.toLocaleDateString('en-GB')}\"`;\n }\n if (\n index > 0 &&\n startDate &&\n prePhaseEndDate &&\n startDate <= prePhaseEndDate\n ) {\n return `should be greater than \"${prePhaseEndDate.toLocaleDateString('en-GB')}\"`;\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n const validateEndDate = (value, values, index) => {\n try {\n const endDate = value ? new Date(value) : null;\n const projectEndDate = values.endDate ? new Date(values.endDate) : null;\n const startDate = values.projectPhases[index].startDate\n ? new Date(values.projectPhases[index].startDate)\n : null;\n if (endDate && startDate && endDate <= startDate) {\n return \"should be greater than start date\";\n }\n if (endDate && endDate > projectEndDate) {\n return `should be lesser than \"${projectEndDate.toLocaleDateString('en-GB')}\"`;\n }\n if (startDate && !endDate) {\n return \"end date is required\";\n }\n } catch (e) {\n console.log(e);\n }\n };\n if (loading) {\n return <Loading />;\n }\n if (error) {\n return <Error title={error} />;\n }\n if (!data) {\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n Error in getting project phases\n </Grid>\n </Grid>\n );\n }\n\n return (\n <Grid container className={classes.gridContainer} spacing={2}>\n {data.map((projectPhase, index) => (\n <div key={projectPhase.id}>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid >\n <TextInput\n variant=\"outlined\"\n label={`Phase ${index + 1}`}\n source={`projectPhases[${index}].name`}\n initialValue={projectPhase.name}\n value={projectPhase.name}\n disabled={true}\n validate={[required(), maxLength(255)]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid >\n <Box style={{ display: \"flex\" }}>\n <DateInput\n variant=\"outlined\"\n label=\"Start Date\"\n source={`projectPhases[${index}].startDate`}\n style={{ marginRight: 15 }}\n validate={[\n required(),\n (value, values) => validateStartDate(value, values, index),\n ]}\n InputProps={{\n classes: {\n input: classes.phaseDateWidth,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n <DateInput\n variant=\"outlined\"\n label=\"End Date\"\n source={`projectPhases[${index}].endDate`}\n style={{ marginLeft: 15 }}\n validate={[\n required(),\n (value, values) => validateEndDate(value, values, index),\n ]}\n InputProps={{\n classes: {\n input: classes.phaseDateWidth,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Box>\n </Grid>\n </div>\n ))}\n </Grid>\n );\n};\n\nconst ProjectForecastsInputs = ({ businessUnitId }) => {\n const form = useForm();\n const formValues = form.getState().values;\n const savedForecasts = formValues && formValues.projectForecasts ? formValues.projectForecasts[businessUnitId] : null;\n const [projectForecasts, setProjectForecasts] = React.useState(savedForecasts);\n const startDate = formValues.startDate;\n const endDate = formValues.endDate;\n\n React.useEffect(() => {\n // console.log(formValues?.projectForecasts.flat())\n if (startDate && endDate && (!savedForecasts || (savedForecasts && savedForecasts.length === 0))) {\n let weeks = startEndDatesOfWeeks(moment(startDate), moment(endDate));\n weeks = weeks.map((week) => ({\n ...week,\n businessUnitId: businessUnitId,\n }));\n setProjectForecasts(weeks);\n }\n }, []);\n\n if (projectForecasts) return <ProjectForecastsInputsContainer\n isCreate={true}\n projectForecasts={projectForecasts}\n setProjectForecasts={setProjectForecasts}\n businessUnitId={businessUnitId}\n />;\n\n return null;\n};\n\nconst ForecastToolbar = () => {\n const classes = useStyles();\n const [value, setValue] = React.useState(0);\n const form = useForm();\n const formValues = form.getState().values;\n const impactedUnits = formValues.impactedBusinessUnits;\n const projectTitle = formValues.name;\n const [valuedUnits, setvaluedUnits] = React.useState([]);\n const businessUnitId = formValues.businessUnitId;\n const dataProvider = useDataProvider();\n\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n React.useEffect(() => {\n const variableInputs = async () => {\n const variableName = await dataProvider.getMany(\"BusinessUnit\", {\n ids: impactedUnits,\n });\n setvaluedUnits(variableName.data);\n };\n if (impactedUnits) variableInputs();\n }, []);\n const ForecastPanel = (props) => {\n const { children, value, index } = props;\n return <React.Fragment>{value === index && <React.Fragment>{children}</React.Fragment>}</React.Fragment>;\n };\n\n return (\n <div className={classes.tabsComponentDiv} >\n <StyledTabs\n value={value}\n onChange={handleChange}\n aria-label=\"styled tabs example\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n <StyledTab label={`${projectTitle}`} />\n {valuedUnits.length > 0\n ? valuedUnits.map((unit) => (\n <StyledTab key={unit.id} label={`${unit.name}`}></StyledTab>\n ))\n : null}\n </StyledTabs>\n <Typography className={classes.padding} />\n <ForecastPanel value={value} index={0}>\n <h6 className={classes.projectNoteText}>\n Note : Click / tap on the color brick to select the impact. You can\n change the severity of any week by selecting color brick of that week.\n Please note that the followed bricks will change to same impact which\n is selected\n </h6>\n <ProjectForecastsInputs businessUnitId={businessUnitId} />\n </ForecastPanel>\n {valuedUnits.length > 0\n ? valuedUnits.map((unit, index) => (\n <ForecastPanel key={unit.id} value={value} index={index + 1}>\n <h6 className={classes.projectNoteText}>\n Note : Click / tap on the color brick to select the impact. You\n can change the severity of any week by selecting color brick of\n that week. Please note that the followed bricks will change to\n same impact which is selected\n </h6>\n <ProjectForecastsInputs businessUnitId={unit.id} />\n </ForecastPanel>\n ))\n : null}\n </div>\n );\n};\nexport default ProjectCreateDrawer;\n","import { Box } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport arrayMutators from \"final-form-arrays\";\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport {\n AutocompleteInput,\n DateInput, maxLength, required, TextInput, useDataProvider,\n useNotify,\n useRefresh\n} from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\nconst useStyles = makeStyles({\n\n});\n\nexport const MilestoneCreateDrawer = ({\n record,\n drawerOpen,\n onClose,\n activeStep, handleBack, handleNext, steps, setIsUpdateProjectDetails \n}) => {\n const [initialValues, setInitialValues] = React.useState();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const refresh = useRefresh();\n const classes = useStyles();\n\n const resource = \"Milestone\";\n const onSubmit = (values, form) => {\n const milestoneData = {\n projectId: +record.id,\n milestones: values.milestones\n }\n dataProvider\n .postRequest(resource, {\n queryType: \"create\",\n data: milestoneData,\n })\n .then((response) => {\n form.restart();\n console.log(response)\n onClose(false, true);\n notify(\"Milestones added successfully\",\"success\");\n // refresh();\n createMilestoneView()\n })\n .catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n };\n\n const validate = () => { };\n\n React.useEffect(() => {\n console.log('projectPhases1', record);\n /* if (record && record.id) {\n const projectPhases = record.projectPhases ? record.projectPhases : null;\n console.log('projectPhases_create', projectPhases);\n setInitialValues({ milestones: [{}], projectPhases: projectPhases })\n } */\n createMilestoneView();\n }, [record]);\n\n const createMilestoneView = React.useCallback(() => {\n if (record && record.id) {\n const projectPhases = record.projectPhases ? record.projectPhases : null;\n console.log('projectPhases_create', projectPhases);\n setInitialValues({ milestones: [{}], projectPhases: projectPhases })\n }\n }, [record])\n\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Create Milestones\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Box mr={4}>\n <Form\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={initialValues}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n },\n }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <MilestoneForm\n push={push}\n onClose={onClose}\n projectStartDate={record ? record.startDate : null}\n projectEndDate={record ? record.endDate : null}\n projectPhases={initialValues ? initialValues.projectPhases : null}\n milestonesValues={[{}]}\n />\n </form>\n )}\n />\n </Box>\n </CustomDrawer>\n );\n};\n\nconst MilestoneForm = ({ push, onClose, milestonesValues, projectStartDate, projectEndDate, projectPhases }) => {\n const [milestones, setMilestones] = React.useState();\n const form = useForm();\n\n const validateStartDate = (value, values, index) => {\n try {\n const startDate = value;\n const projectPhase = projectPhases.filter(e => e.name === values.milestones[index].projectPhase);\n\n if (!projectPhase || !(projectPhase.length > 0)) {\n return `Please select a valid Project phase`;\n }\n\n const phaseStartDate = moment(projectPhase[0].startDate).format(\"YYYY-MM-DD\");\n const phaseEndDate = moment(projectPhase[0].endDate).format(\"YYYY-MM-DD\");\n\n if (startDate && moment(startDate).isBefore(projectStartDate.slice(0, 10))) {\n return `should be greater than \"${moment(projectStartDate).format(\"DD/MM/YY\")}\"`;\n }\n\n if (startDate && moment(startDate).isSameOrAfter(projectEndDate.slice(0, 10))) {\n return `should be lesser than \"${moment(projectEndDate).format(\"DD/MM/YY\")}\"`;\n }\n\n if (startDate && !moment(startDate).isBetween(phaseStartDate, phaseEndDate, 'days', true)) {\n return `should be between \"${moment(phaseStartDate).format(\"DD/MM/YY\")}\" and \"${moment(phaseEndDate).format(\"DD/MM/YY\")}\"`;\n }\n\n } catch (e) {\n console.log(e);\n }\n };\n\n React.useEffect(() => {\n setMilestones(milestonesValues);\n }, [milestonesValues])\n\n\n if (milestones)\n return (\n <Grid container spacing={2}>\n {console.log(milestones)}\n {milestones.map((milestone, index) => (\n Boolean(milestone) && <Box key={`${milestone.name}_${index}`} width=\"100%\">\n <Grid item xs={12}>\n <Field fullWidth name={`milestones[${index}].name`} component=\"input\">\n {(props) => (\n <TextInput\n fullWidth\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"Milestone Name\"\n validate={[required(), maxLength(255)]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12}>\n <Field fullWidth name={`milestones[${index}].projectPhase`} component=\"input\">\n {(props) => (\n <AutocompleteInput\n fullWidth\n variant=\"outlined\"\n label=\"Project Phase\"\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n optionValue=\"name\"\n optionText=\"name\"\n source={props.input.name}\n choices={projectPhases}\n validate={[required()]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12}>\n <Field fullWidth name={`milestones[${index}].milestoneDate`} component=\"input\">\n {(props) => (\n <DateInput\n fullWidth\n variant=\"outlined\"\n label=\"Milestone Date\"\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n validate={[\n required(),\n (value, values) =>\n validateStartDate(value, values, index),\n ]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12}>\n <Button\n variant=\"text\"\n startIcon={<DeleteIcon />}\n onClick={() => {\n milestones[index] = undefined\n form.change(`milestones[${index}]`, undefined)\n setMilestones([...milestones])\n }}\n >\n Remove\n </Button>\n </Grid>\n <Grid item xs={12}>\n <Box mt={1} mb={2}><Divider /></Box>\n </Grid>\n </Box>\n ))}\n <Grid item xs={12}>\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={() => {\n push(\"milestones\", undefined);\n milestones.push({})\n }}\n color=\"primary\"\n variant=\"text\"\n >\n Add Milestone\n </Button>\n </Grid>\n <Grid item xs={12}>\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"space-between\">\n <Box width=\"100%\">\n <Button\n fullWidth\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n >\n create\n </Button>\n </Box>\n <Box ml={1} width=\"100%\">\n <Button\n fullWidth\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n >\n Cancel\n </Button>\n </Box>\n </Box>\n </Grid>\n </Grid>\n )\n\n return null;\n}\n\nexport default MilestoneCreateDrawer;\n","import { Box, Grid, TextField, Typography } from \"@material-ui/core\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport arrayMutators from \"final-form-arrays\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport {\n AutocompleteArrayInput, AutocompleteInput, DateInput, Error, FormDataConsumer, Loading,\n RadioButtonGroupInput, ReferenceArrayInput, ReferenceInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n useNotify\n} from \"react-admin\";\nimport { Field, useForm } from \"react-final-form\";\nimport { FieldArray } from \"react-final-form-arrays\";\nimport {\n INACTIVE_ACTIVE_CHOICES, PROJECT_DRIVERS_MASTER_DATA_ID, PROJECT_PHASE_MASTER_DATA_ID\n} from \"../../framework/constants\";\nimport {\n onFailureMessage,\n startEndDatesOfWeeks\n} from \"../../utils/AppUtils\";\nimport Wizard from \"../customComponents/wizard\";\nimport ProjectCustomDrawer from \"./projectCustomDrawer\";\nimport ProjectForecastsInputsContainer from \"./projectForecastsInputsContainer\";\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n subTitle: {\n marginBottom: 16,\n },\n forecastTitle: {\n backgroundColor: \"#F2F2F2\",\n display: \"flex\",\n },\n forecastCard: {\n marginBottom: 30,\n margin: \"0 auto\",\n width: \"90%\",\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\"\n }\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n inputWidthChange: {\n width: 322,\n [theme.breakpoints.down(\"xs\")]: {\n width: '83vw',\n }\n },\n inputWidthMargin: {\n // marginRight: 100,\n },\n referenceInputWidth: {\n width: 350,\n [theme.breakpoints.down(\"xs\")]: {\n width: '100%'\n }\n },\n gridBoxMargin: {\n marginBottom: 12,\n width: 350,\n },\n phaseDateWidth: {\n width: 132,\n [theme.breakpoints.down(\"xs\")]: {\n width: '35vw'\n }\n },\n gridContainer: {\n display: \"grid\",\n gridColumnGap: 100,\n [theme.breakpoints.up(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr 1fr\",\n },\n [theme.breakpoints.between(\"sm\", \"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n forecastTopDiv: {\n width: \"95%\",\n },\n projectNoteText: {\n fontSize: 12,\n fontStyle: \"normal\",\n fontWeight: 400,\n marginBottom: 30,\n },\n tabsComponentDiv: {\n marginTop: 20,\n },\n input: {\n borderColor: \"#BDBDBD\",\n width: '350px',\n position: 'relative',\n borderRadius: '4px'\n },\n}));\n\nconst StyledTabs = withStyles({\n indicator: {\n display: \"flex\",\n justifyContent: \"center\",\n backgroundColor: \"transparent\",\n height: 5,\n \"& > span\": {\n maxWidth: 80,\n width: \"50%\",\n backgroundColor: \"#4F4F4F\",\n },\n },\n})((props) => <Tabs {...props} TabIndicatorProps={{ children: <span /> }} />);\n\nconst StyledTab = withStyles((theme) => ({\n root: {\n textTransform: \"none\",\n color: \"#000\",\n fontWeight: theme.typography.fontWeightRegular,\n fontSize: theme.typography.pxToRem(15),\n marginRight: 60,\n \"&:focus\": {\n opacity: 1,\n },\n minWidth: 97,\n paddingLeft: 0,\n paddingRight: 0,\n },\n}))((props) => <Tab disableRipple {...props} />);\n\nexport const ProjectEditDrawer = ({ record, drawerOpen, onClose }) => {\n const [initialValues, setInitialValues] = React.useState();\n const [projectInfo, setProjectInfo] = React.useState(\"\");\n const [defaulDrriver, setDefaultDriver] = React.useState({ name: '' })\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const classes = useStyles();\n const resource = \"Project\";\n const handleProjectDriverValues = (event, newValue) => {\n // console.log(newValue)\n setDefaultDriver(newValue)\n }\n const onSubmit = (values, form) => {\n const phases =\n values.projectPhases && values.projectPhases.length > 0\n ? values.projectPhases\n .filter((x) => x && x.endDate != null && x.endDate != \"\")\n .map((projectPhase, index) => ({\n name: projectPhase.name,\n startDate: projectPhase.startDate,\n endDate: projectPhase.endDate,\n goLiveDate: projectPhase.goLiveDate,\n }))\n : null;\n let weeks = startEndDatesOfWeeks(\n moment(values.startDate),\n moment(values.endDate)\n );\n\n const impactedBuCount = values.impactedBusinessUnits\n ? values.impactedBusinessUnits.length\n : 0;\n let requiredWeeksCount = weeks.length * (impactedBuCount + 1);\n let buArrays = 0;\n for (let i = 0; i < values.projectForecasts.length; i++) {\n if (Array.isArray(values.projectForecasts[i])) {\n buArrays++;\n }\n }\n\n if (buArrays == 0) {\n let forecasts = [];\n for (let i = 0; i < values.projectForecasts.length; i++) {\n if (values.projectForecasts[i].week > weeks.length) {\n continue;\n } else {\n if (\n values.projectForecasts[i].businessUnitId ==\n values.businessUnitId ||\n values.impactedBusinessUnits.includes(\n values.projectForecasts[i].businessUnitId\n )\n ) {\n forecasts[i] = values.projectForecasts[i];\n }\n }\n }\n\n forecasts.forEach((forecast) => {\n delete forecast.id;\n delete forecast.businessUnit;\n delete forecast.projectId;\n });\n\n const newForecastsValues = forecasts.flat();\n values.projectForecasts = newForecastsValues;\n } else {\n let mainBuForecasts = [values.projectForecasts[values.businessUnitId]];\n let allForecasts = [...mainBuForecasts];\n values.impactedBusinessUnits.forEach((index) => {\n allForecasts.push(values.projectForecasts[index]);\n });\n allForecasts.forEach((forecast) => {\n forecast.forEach((el) => {\n delete el.id;\n delete el.businessUnit;\n delete el.projectId;\n });\n });\n\n const newForecastsValues = allForecasts.flat();\n values.projectForecasts = newForecastsValues;\n }\n values.projectPhases = phases;\n values.projectDriver = defaulDrriver\n // console.log(values, form)\n dataProvider\n .update(resource, {\n data: values,\n })\n .then((response) => {\n form.restart();\n onClose(false);\n notify(\"Project updated successfully\",\"success\");\n window.location.reload(false);\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n };\n\n const WizardFormError = ({ name }) => (\n <Field\n name={name}\n subscription={{ touched: true, error: true }}\n render={({ meta: { touched, error } }) =>\n touched && error ? (\n <span style={{ color: \"#d32f2f\" }}>{error}</span>\n ) : null\n }\n />\n );\n\n React.useEffect(() => {\n if (record && record.id)\n dataProvider.getOne(resource, { id: record.id }).then((response) => {\n response.data.projectForecasts = [];\n const impactedBusinessUnits = _.map(\n response.data.impactedBusinessUnits,\n \"id\"\n );\n setInitialValues({\n ...response.data,\n impactedBusinessUnits,\n });\n setDefaultDriver(response.data.projectDriver)\n // console.log(\"dsfasdfsadfsdfasdf\",response.data )\n });\n }, [record]);\n\n return (\n <ProjectCustomDrawer\n drawerAnchor=\"right\"\n title=\"Edit Project\"\n projectInfo={projectInfo}\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n {initialValues && (\n <Wizard\n initialValues={initialValues}\n onSubmit={onSubmit}\n mutators={{\n ...arrayMutators,\n }}\n onClose={onClose}\n setProjectInfo={setProjectInfo}\n >\n <Wizard.Page>\n <ProjectEditInputs driverDefalt={initialValues} selectedDrover={defaulDrriver} setDefaultDriver={handleProjectDriverValues} />\n </Wizard.Page>\n <Wizard.Page>\n <Typography className={classes.subTitle}>Project Phases</Typography>\n <ProjectPhasesInputs />\n </Wizard.Page>\n <Wizard.Page\n validate={(values) => {\n const errors = {};\n let weeks = startEndDatesOfWeeks(\n moment(values.startDate),\n moment(values.endDate)\n );\n let weeksCount = weeks.length;\n const impactedBuCount = values.impactedBusinessUnits\n ? values.impactedBusinessUnits.length\n : 0;\n let forecastsValues =\n values && values.projectForecasts\n ? values.projectForecasts.flat().filter(x => x.risk)\n : null;\n if (forecastsValues) {\n if (\n forecastsValues.length <\n weeksCount * (impactedBuCount + 1)\n ) {\n errors.projectForecasts = \"Please fill all the project forecast details\";\n }\n } else {\n errors.projectForecasts = \"Please fill all the project forecast details\";\n }\n return errors;\n }}\n >\n <div className={classes.forecastTopDiv}>\n <div>\n <Typography>Change Impact Forecast</Typography>\n <ForecastToolbar />\n </div>\n </div>\n <div style={{ marginBottom: 16 }}>\n <WizardFormError name=\"projectForecasts\" />\n </div>\n </Wizard.Page>\n </Wizard>\n )}\n </ProjectCustomDrawer>\n );\n};\n\nconst ProjectEditInputs = ({ driverDefalt, setDefaultDriver, selectedDrover }) => {\n const classes = useStyles();\n const [projectDriverChoices, setProjectDriverChoices] = React.useState();\n const [projectDriversLoading, setProjectDriversLoading] = React.useState();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n\n const filterSelectedOption = (options, selectedOption) => {\n return options?.filter(option => option !== selectedOption);\n };\n const validateStartDate = (startDate, values) => {\n const endDate = values.endDate;\n if (startDate && endDate && startDate >= endDate) {\n return \"start date can not be greater than end date\";\n }\n };\n\n const validateEndDate = (endDate, values) => {\n const startDate = values.startDate;\n if (endDate && startDate && endDate <= startDate) {\n return \"end date can not be lesser than start date\";\n }\n };\n // ----------------------------\n\n const validateGoLiveDate = (goLiveDate, values) => {\n const startDate = values.startDate;\n if (goLiveDate && startDate && goLiveDate <= startDate) {\n return \"Go live date can be greater than start date\";\n }\n };\n // ----------------------------------\n\n React.useEffect(() => {\n console.log(driverDefalt)\n setProjectDriversLoading(true);\n dataProvider\n .getOne(\"ProjecDriverMasterData\", { id: PROJECT_DRIVERS_MASTER_DATA_ID })\n .then(({ data }) => {\n setProjectDriverChoices(data.masterDataValues);\n setProjectDriversLoading(false);\n })\n .catch((error) => {\n console.log(error);\n setProjectDriversLoading(false);\n setProjectDriverChoices([]);\n notify(\"could not able to fetch project driver list\",\"warning\");\n });\n }, []);\n\n return (\n <Grid container spacing={2}>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <TextInput\n variant=\"outlined\"\n label=\"Project Name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n className={classes.inputWidthMargin}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <ReferenceInput\n disabled={true}\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n validate={[required()]}\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <ReferenceArrayInput\n fullWidth\n variant=\"outlined\"\n label=\"Impacted Business Unit\"\n source=\"impactedBusinessUnits\"\n reference=\"BusinessUnit\"\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n filter={{\n excludeIds:\n formData && formData.businessUnitId\n ? [formData.businessUnitId]\n : null,\n }}\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n )}\n </FormDataConsumer>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Project Sponsor\"\n source=\"projectSponsorId\"\n reference=\"User\"\n validate={[required()]}\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Business Owner\"\n source=\"businessOwnerId\"\n reference=\"User\"\n validate={[required()]}\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n\n {/* <AutocompleteInput\n variant=\"outlined\"\n label=\"Strategic Driver\"\n source=\"projectDriver\"\n optionValue=\"name\"\n optionText=\"name\"\n choices={projectDriverChoices}\n defaultValue={'habi jabi'}\n validate={[required()]}\n fullWidth\n /> */}\n <Autocomplete\n id=\"free-solo-demo\"\n freeSolo\n // options={projectDriverChoices?.map((option) => option.name)}\n options={filterSelectedOption(projectDriverChoices?.map(option => option.name), selectedDrover)}\n defaultValue={[{ name: driverDefalt.projectDriver }]}\n // value={driverDefalt.projectDriver}\n value={selectedDrover}\n className={classes.input}\n // ListboxProps={{ style: { maxHeight: 20 } }}\n renderInput={(params) => (\n <TextField {...params}\n label=\"Strategic Driver\"\n variant=\"outlined\"\n size=\"small\"\n required\n />\n )}\n onChange={setDefaultDriver}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <DateInput\n variant=\"outlined\"\n label=\"Start Date\"\n source=\"startDate\"\n validate={[required(), validateStartDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <DateInput\n variant=\"outlined\"\n label=\"End Date\"\n source=\"endDate\"\n style={{ marginRight: 100 }}\n validate={[required(), validateEndDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n className={classes.inputWidthMargin}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <ReferenceInput\n variant=\"outlined\"\n label=\"Change Lead\"\n source=\"changeLeaderId\"\n reference=\"User\"\n validate={[required()]}\n className={`${classes.referenceInputWidth} ${classes.inputWidthMargin}`}\n >\n <AutocompleteInput optionText=\"fullName\" />\n </ReferenceInput>\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid item xs={12} md={6} lg={4}>\n <DateInput\n variant=\"outlined\"\n label=\"Go Live Date\"\n source=\"goLiveDate\"\n style={{ marginRight: 100 }}\n validate={[required(), validateGoLiveDate]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n className={classes.inputWidthMargin}\n />\n </Grid>\n <Grid item xs={12}>\n <RadioButtonGroupInput\n label=\"Status\"\n source=\"status\"\n row={true}\n choices={INACTIVE_ACTIVE_CHOICES}\n validate={[required()]}\n />\n </Grid>\n </Grid>\n );\n};\n\nconst ProjectPhasesInputs = () => {\n const classes = useStyles();\n const form = useForm();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const [loading, setLoading] = React.useState();\n const [error, setError] = React.useState();\n\n const validateStartDate = (value, values, index) => {\n try {\n const startDate = value ? new Date(value) : null;\n const projectStartDate = values.startDate\n ? new Date(values.startDate)\n : null;\n const endDate = values.projectPhases[index].endDate\n ? new Date(values.projectPhases[index].endDate)\n : null;\n const prePhaseIndex = Math.max(index - 1, 0);\n const prePhaseEndDate = values.projectPhases[prePhaseIndex].endDate\n ? new Date(values.projectPhases[prePhaseIndex].endDate)\n : null;\n if (startDate && endDate && startDate >= endDate) {\n return \"should be lesser than end date\";\n }\n if (startDate && startDate < projectStartDate) {\n return `should be greater than \"${projectStartDate.toLocaleDateString('en-GB')}\"`;\n }\n if (\n index > 0 &&\n startDate &&\n prePhaseEndDate &&\n startDate <= prePhaseEndDate\n ) {\n return `should be greater than \"${prePhaseEndDate.toLocaleDateString('en-GB')}\"`;\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n const validateEndDate = (value, values, index) => {\n try {\n const endDate = value ? new Date(value) : null;\n const projectEndDate = values.endDate ? new Date(values.endDate) : null;\n const startDate = values.projectPhases[index].startDate\n ? new Date(values.projectPhases[index].startDate)\n : null;\n if (endDate && startDate && endDate <= startDate) {\n return \"should be greater than start date\";\n }\n if (endDate && endDate > projectEndDate) {\n return `should be lesser than \"${projectEndDate.toLocaleDateString('en-GB')}\"`;\n }\n if (startDate && !endDate) {\n return \"end date is required\";\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n React.useEffect(() => {\n const formValues = form.getState().values;\n if (!formValues.projectPhases || (formValues.projectPhases && formValues.projectPhases.length === 0)) {\n setLoading(true);\n dataProvider\n .getOne(\"MasterData\", { id: PROJECT_PHASE_MASTER_DATA_ID })\n .then((response) => {\n form.change(\"projectPhases\", response.data.masterDataValues)\n setLoading(false);\n })\n .catch((error) => {\n notify(`project phases are unavailable: ${error.message}`, \"warning\");\n setError(error.message);\n setLoading(false);\n });\n }\n }, []);\n\n if (loading) {\n return <Loading />;\n }\n\n if (error) {\n return <Error title={error} />;\n }\n\n return (\n <Grid container className={classes.gridContainer} spacing={2}>\n <FieldArray name=\"projectPhases\">\n {({ fields }) =>\n fields.map((name, index) => {\n return (\n <div key={name}>\n <Grid >\n <TextInput\n variant=\"outlined\"\n label={`Phase ${index + 1}`}\n source={`${name}.name`}\n disabled={true}\n validate={[required(), maxLength(255)]}\n InputProps={{\n classes: {\n input: classes.inputWidthChange,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Grid>\n {/* <Grid className={classes.gridBoxMargin}> */}\n <Grid >\n <Box style={{ display: \"flex\" }}>\n <DateInput\n variant=\"outlined\"\n label=\"Start Date\"\n source={`${name}.startDate`}\n style={{ marginRight: 15 }}\n validate={[\n required(),\n (value, values) => validateStartDate(value, values, index),\n ]}\n InputProps={{\n classes: {\n input: classes.phaseDateWidth,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n <DateInput\n variant=\"outlined\"\n label=\"End Date\"\n source={`${name}.endDate`}\n style={{ marginLeft: 15 }}\n validate={[\n required(),\n (value, values) => validateEndDate(value, values, index),\n ]}\n InputProps={{\n classes: {\n input: classes.phaseDateWidth,\n notchedOutline: classes.inputBorder,\n },\n }}\n />\n </Box>\n </Grid>\n </div>\n )\n })}\n </FieldArray>\n </Grid>\n );\n};\n\nconst ProjectForecastsInputs = ({ businessUnitId, projectId }) => {\n const form = useForm();\n const dataProvider = useDataProvider();\n const formValues = form.getState().values;\n const availableForecasts = formValues.projectForecasts ? formValues.projectForecasts[businessUnitId] : null;\n const [projectForecasts, setProjectForecasts] = React.useState(availableForecasts);\n const [loading, setLoading] = React.useState();\n const { businessUnitId: mainBu, startDate, endDate } = formValues;\n\n React.useEffect(() => {\n setLoading(true);\n if (!availableForecasts || (availableForecasts && availableForecasts.length === 0)) {\n dataProvider\n .getList(\"ProjectForecast\", {\n pagination: { page: 1, perPage: 1000 },\n sort: { field: \"endDate\", order: \"ASC\" },\n filter: { projectId, businessUnitId },\n })\n .then(({ data }) => {\n let forecasts = data && data.length ? data : [];\n let weeks = startEndDatesOfWeeks(moment(startDate), moment(endDate));\n const forecastsCount = forecasts.length;\n const weeksCount = weeks.length;\n if (forecastsCount > weeksCount) {\n forecasts.splice(weeksCount, forecastsCount);\n } else if (forecastsCount < weeksCount) {\n for (let i = forecastsCount; i < weeksCount; i++) {\n forecasts[i] = {\n ...weeks[i],\n businessUnitId: businessUnitId,\n }\n }\n }\n setProjectForecasts(forecasts)\n form.change(`projectForecasts[${businessUnitId}]`, forecasts);\n setLoading(false);\n })\n .catch(error => {\n console.log(error)\n setProjectForecasts(null)\n setLoading(false);\n })\n } else {\n setLoading(false);\n }\n }, [businessUnitId, projectId]);\n\n if (loading) return <Loading />\n if (projectForecasts) return <ProjectForecastsInputsContainer\n isCreate={false}\n projectForecasts={projectForecasts}\n setProjectForecasts={setProjectForecasts}\n businessUnitId={businessUnitId}\n />;\n\n return null;\n};\n\nconst ForecastToolbar = () => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const [value, setValue] = React.useState(0);\n const [valuedUnits, setvaluedUnits] = React.useState([]);\n const form = useForm();\n const formValues = form.getState().values;\n const impactedUnits = formValues.impactedBusinessUnits;\n const projectTitle = formValues.name;\n const { businessUnitId, id: projectId } = formValues;\n\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n React.useEffect(() => {\n const variableInputs = async () => {\n const variableName = await dataProvider.getMany(\"BusinessUnit\", {\n ids: impactedUnits,\n });\n setvaluedUnits(variableName.data);\n };\n if (impactedUnits) variableInputs();\n }, []);\n\n\n const ForecastPanel = (props) => {\n const { children, value, index } = props;\n return <Box display={value === index ? \"block\" : \"none\"}>{children}</Box>\n };\n\n return (\n <div className={classes.tabsComponentDiv}>\n <StyledTabs\n value={value}\n onChange={handleChange}\n aria-label=\"styled tabs example\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n <StyledTab label={`${projectTitle}`} />\n {valuedUnits.length > 0\n ? valuedUnits.map((unit) => (\n <StyledTab key={unit.id} label={`${unit.name}`}></StyledTab>\n ))\n : null}\n </StyledTabs>\n <Typography className={classes.padding} />\n <ForecastPanel value={value} index={0}>\n <h6 className={classes.projectNoteText}>\n Note : Click / tap on the color brick to select the impact. You can\n change the severity of any week by selecting color brick of that week.\n Please note that the followed bricks will change to same impact which\n is selected\n </h6>\n <ProjectForecastsInputs businessUnitId={businessUnitId} projectId={projectId} />\n </ForecastPanel>\n {valuedUnits.length > 0\n ? valuedUnits.map((unit, index) => (\n <ForecastPanel key={unit.id} value={value} index={index + 1}>\n <h6 className={classes.projectNoteText}>\n Note : Click / tap on the color brick to select the impact. You\n can change the severity of any week by selecting color brick of\n that week. Please note that the followed bricks will change to\n same impact which is selected\n </h6>\n <ProjectForecastsInputs businessUnitId={unit.id} projectId={projectId} />\n </ForecastPanel>\n ))\n : null}\n </div>\n );\n};\nexport default ProjectEditDrawer;\n","import { Box } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport arrayMutators from \"final-form-arrays\";\nimport moment from 'moment';\nimport * as React from \"react\";\nimport {\n AutocompleteInput, DateInput, maxLength, required, TextInput, useDataProvider,\n useNotify,\n useRefresh\n} from \"react-admin\";\nimport { Field, Form, useForm } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\nconst useStyles = makeStyles({\n\n});\n\nexport const MilestoneEditDrawer = ({\n record,\n drawerOpen,\n onClose,\n}) => {\n const [initialValues, setInitialValues] = React.useState();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const refresh = useRefresh();\n const classes = useStyles();\n\n const resource = \"Milestone\";\n const onSubmit = (values, form) => {\n const milestoneData = {\n projectId: +record.id,\n milestones: values.milestones.filter(milestone => Boolean(milestone)).map(milestone => ({\n name: milestone.name,\n projectPhase: milestone.projectPhase,\n milestoneDate: milestone.milestoneDate,\n }))\n }\n dataProvider\n .postRequest(resource, {\n queryType: \"update\",\n data: milestoneData,\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false, true);\n notify(\"Milestones updated successfully\",\"success\");\n // refresh();\n updateMilestonesView();\n })\n .catch((error) => {\n console.log(error)\n const error_messages = onFailureMessage(error);\n notify(error_messages, \"error\");\n });\n };\n\n\n\n const validate = () => { };\n\n React.useEffect(() => {\n console.log(\"record\", record);\n updateMilestonesView();\n }, [record]);\n const updateMilestonesView = React.useCallback(\n async () => {\n if (record && record.id) {\n const milestones = await dataProvider\n .getList(\"Milestone\", {\n pagination: { page: 1, perPage: 25 },\n sort: { field: \"id\", order: \"ASC\" },\n filter: { projectId: record.id },\n })\n milestones.data = milestones.data ? milestones.data.map(milestone => ({\n name: milestone.name,\n projectPhase: milestone.projectPhase,\n milestoneDate: new Date(milestone.milestoneDate),\n })) : null;\n\n const projectPhases = record.projectPhases ? record.projectPhases : null;\n\n console.log('projectPhases', projectPhases);\n setInitialValues({ milestones: milestones.data, projectPhases: projectPhases })\n }\n },\n [dataProvider, record],\n )\n\n\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Add/Edit Milestones\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Box mr={4}>\n <Form\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={initialValues}\n render={({\n handleSubmit,\n form: {\n mutators: { push, pop },\n },\n }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <MilestoneForm\n push={push}\n onClose={onClose}\n projectStartDate={record ? record.startDate : null}\n projectEndDate={record ? record.endDate : null}\n projectPhases={initialValues ? initialValues.projectPhases : null}\n milestonesValues={initialValues ? initialValues.milestones : null}\n />\n </form>\n )}\n />\n </Box>\n </CustomDrawer>\n );\n};\n\nconst MilestoneForm = ({ push, onClose, milestonesValues, projectStartDate, projectEndDate, projectPhases }) => {\n const [milestones, setMilestones] = React.useState();\n const form = useForm();\n\n const validateStartDate = (value, values, index) => {\n try {\n const startDate = value;\n const projectPhase = projectPhases.filter(e => e.name === values.milestones[index].projectPhase);\n\n if (!projectPhase || !(projectPhase.length > 0)) {\n return `Please select a valid Project phase`;\n }\n\n const phaseStartDate = moment(projectPhase[0].startDate).format(\"YYYY-MM-DD\");\n const phaseEndDate = moment(projectPhase[0].endDate).format(\"YYYY-MM-DD\");\n\n if (startDate && moment(startDate).isBefore(projectStartDate.slice(0, 10))) {\n return `should be greater than \"${moment(projectStartDate).format(\"DD/MM/YY\")}\"`;\n }\n\n if (startDate && moment(startDate).isSameOrAfter(projectEndDate.slice(0, 10))) {\n return `should be lesser than \"${moment(projectEndDate).format(\"DD/MM/YY\")}\"`;\n }\n\n if (startDate && !moment(startDate).isBetween(phaseStartDate, phaseEndDate, 'days', true)) {\n return `should be between \"${moment(phaseStartDate).format(\"DD/MM/YY\")}\" and \"${moment(phaseEndDate).format(\"DD/MM/YY\")}\"`;\n }\n\n } catch (e) {\n console.log(e);\n }\n };\n\n React.useEffect(() => {\n setMilestones(milestonesValues);\n }, [milestonesValues])\n\n\n if (milestones)\n return (\n <Grid container spacing={2}>\n {milestones.map((milestone, index) => (\n Boolean(milestone) && <Box key={`${milestone.name}_${index}`} width=\"100%\">\n <Grid item xs={12}>\n <Field fullWidth name={`milestones[${index}].name`} component=\"input\">\n {(props) => (\n <TextInput\n fullWidth\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n variant=\"outlined\"\n label=\"Milestone Name\"\n validate={[required(), maxLength(255)]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12}>\n <Field fullWidth name={`milestones[${index}].projectPhase`} component=\"input\">\n {(props) => (\n <AutocompleteInput\n fullWidth\n variant=\"outlined\"\n label=\"Project Phase\"\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n optionValue=\"name\"\n optionText=\"name\"\n source={props.input.name}\n choices={projectPhases}\n validate={[required()]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12}>\n <Field fullWidth name={`milestones[${index}].milestoneDate`} component=\"input\">\n {(props) => (\n <DateInput\n fullWidth\n variant=\"outlined\"\n label=\"Milestone Date\"\n name={props.input.name}\n value={props.input.value}\n onChange={props.input.onChange}\n validate={[\n required(),\n (value, values) =>\n validateStartDate(value, values, index),\n ]}\n />\n )}\n </Field>\n </Grid>\n <Grid item xs={12}>\n <Button\n variant=\"text\"\n startIcon={<DeleteIcon />}\n onClick={() => {\n milestones[index] = undefined\n form.change(`milestones[${index}]`, undefined)\n setMilestones([...milestones])\n }}\n >\n Remove\n </Button>\n </Grid>\n <Grid item xs={12}>\n <Box mt={1} mb={2}><Divider /></Box>\n </Grid>\n </Box>\n ))}\n <Grid item xs={12}>\n <Button\n startIcon={<AddCircleOutlineIcon />}\n onClick={() => {\n push(\"milestones\", undefined);\n milestones.push({})\n }}\n color=\"primary\"\n variant=\"text\"\n >\n Add Milestone\n </Button>\n </Grid>\n <Grid item xs={12}>\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"space-between\">\n <Box width=\"100%\">\n <Button\n fullWidth\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n >\n Update\n </Button>\n </Box>\n <Box ml={1} width=\"100%\">\n <Button\n fullWidth\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n >\n Cancel\n </Button>\n </Box>\n </Box>\n </Grid>\n </Grid>\n )\n\n return null;\n}\nexport default MilestoneEditDrawer;\n","import { Box, Typography, useMediaQuery } from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport AddCircleOutlineIcon from \"@material-ui/icons/AddCircleOutline\";\nimport makeStyles from \"@material-ui/styles/makeStyles\";\nimport FileDownloadOutlinedIcon from \"@mui/icons-material/FileDownloadOutlined\";\nimport RemoveCircleOutlineOutlinedIcon from \"@mui/icons-material/RemoveCircleOutlineOutlined\";\nimport { Alert, Button, IconButton, Snackbar } from \"@mui/material\";\nimport moment from \"moment\";\nimport * as React from \"react\";\nimport { cloneElement } from \"react\";\nimport {\n Datagrid,\n Filter,\n FunctionField,\n List,\n Loading,\n SearchInput,\n TextField,\n TopToolbar,\n sanitizeListRestProps,\n useDataProvider,\n useListContext,\n usePermissions,\n useRecordContext,\n useRefresh,\n} from \"react-admin\";\nimport { useHistory } from \"react-router-dom\";\nimport { INACTIVE_ACTIVE_CHOICES } from \"../../framework/constants\";\nimport {\n currentDate,\n impersonatedURL,\n onFailureMessage,\n saveFileFromBinary,\n} from \"../../utils/AppUtils\";\nimport ButtonWithPermission from \"../../utils/ButtonWithPermission\";\nimport ExportButton from \"../../utils/ExportButton\";\nimport { ManageChip } from \"../../utils/ManageChip\";\nimport PostPagination from \"../../utils/PostPagination\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport MilestoneCustomChart from \"../customComponents/MilestoneCustomChart\";\nimport MoreActions from \"../customComponents/moreActions\";\nimport ProjectCreateDrawer from \"./projectCreateDrawer\";\nimport MilestoneCreateDrawer from \"./projectCreateMilestone_modified\";\nimport ProjectEditDrawer from \"./projectEditDrawer\";\nimport MilestoneEditDrawer from \"./projectEditMilestone_modified\";\nimport DeleteForeverIcon from \"@mui/icons-material/DeleteForever\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nconst phaseBgColors = [\n \"#629DD1\",\n \"#297FD5\",\n \"#4A66AC\",\n \"#5AA2AE\",\n \"#7F8FA9\",\n \"#F15024\",\n \"#F2D03B\",\n \"#00B050​\",\n \"#FF3300​\",\n \"#FC8722\",\n \"#8C72AA\",\n \"#D5BFED\",\n \"#46D9BF​\",\n \" #00A0D9​\",\n \"#03508C​\",\n];\n\nconst useStyles = makeStyles((theme) => ({\n headerCell: {\n [theme.breakpoints.down(\"xs\")]: {\n display: \"none\",\n },\n },\n rowCell: {\n [theme.breakpoints.down(\"xs\")]: {\n borderBottom: \"rgba(145, 158, 171, 0.24)\",\n paddingLeft: \"10px\",\n },\n },\n expandIcon: {\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: \"15px\",\n },\n },\n stylingTitle: {\n \"& p\": {\n color: theme.palette.grey[600],\n },\n \"& div\": {\n marginTop: 5,\n },\n },\n title: {\n textTransform: \"uppercase\",\n fontSize: \"20px\", // Adjust the font size as needed\n },\n}));\n\nconst ListActions = (props) => {\n const {\n className,\n exporter,\n isCustomerAdmin,\n isSuperAdmin,\n filters,\n maxResults,\n handleCreateDrawerOpen,\n ...rest\n } = props;\n const {\n currentSort,\n resource,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n } = useListContext();\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const [projects, setProjects] = React.useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const { themeObject, setTheme } = React.useContext(ThemeContext)\n React.useEffect(() => {\n dataProvider\n .getList(\"Project\", {\n pagination: { page: 1, perPage: 10 },\n sort: { field: \"id\", order: \"ASC\" },\n filter: {},\n })\n .then(({ data }) => {\n if (data && data.length) setProjects(data);\n });\n }, [dataProvider]);\n\n const handleExportBtnClick = () => {\n const projectsData = JSON.stringify(projects);\n dataProvider\n .postRequest(\"ExportProjects\", {\n queryType: \"retrieve\",\n data: { projectsData },\n })\n .then((response) => {\n saveFileFromBinary(response.data, \"Projects\" + currentDate);\n })\n .catch((error) => {\n handleSnackbarOpen(\"No data found to export\", \"warning\")\n });\n };\n\n return (\n <TopToolbar {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n\n <Button\n variant=\"contained\"\n onClick={handleExportBtnClick}\n sx={{\n width: isSmall ? \"0px\" : \"150px\",\n marginRight: \"8px\",\n backgroundColor: themeObject.palette.primary.main,\n boxShadow: \"0\",\n height: \"41px\",\n paddingX: \"0\",\n \"&:hover\": {\n backgroundColor: themeObject.palette.primary.buttonContrast,\n color: \"white\",\n cursor: \"pointer\",\n boxShadow: \"0\",\n },\n }}\n >\n {isSmall ? (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"100%\",\n height: \"41px\",\n }}\n >\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n ) : (\n <Box\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\",\n }}\n >\n <Box\n sx={{\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {isSmall ? \"\" : \"Export\"}\n </Box>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"41px\",\n height: \"41px\",\n }}\n >\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n </Box>\n )}\n </Button>\n\n {/* <Button style={{ marginRight: 8 }} variant=\"contained\" style={{backgroundColor: \"#405189\", height: '40px',padding: \"0 16px\",width: \"176px\", margin: '0 10px', color: \"#fff\"}} onClick={handleExportBtnClick} ><DownloadIcon fontSize='small' />{isSmall ? \"\" : \"Export\"}</Button> */}\n <CreateProjectBtn {...props} />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </TopToolbar>\n );\n};\n\nconst ProjectFilter = (props) => (\n <Filter {...props}>\n <SearchInput variant=\"outlined\" source=\"q\" alwaysOn />\n </Filter>\n);\n\nconst CreateProjectBtn = (props) => {\n const history = useHistory();\n const { isCustomerAdmin, permissions, isSuperAdmin, handleCreateDrawerOpen } =\n props;\n const user = TokenStorage.getUserDetails();\n // console.log(props)\n // console.log(user)\n const { isImpersonating } = user ? user : {};\n\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const handleClick = () => {\n console.log(\"console bosan tow\");\n TokenStorage.clearProjectData();\n impersonatedURL(isImpersonating, \"#/projectCreate?impersonated\");\n // history.push('/projectCreate')\n };\n return (\n <ButtonWithPermission\n variant=\"contained\"\n onClick={handleClick}\n bypassUser={isCustomerAdmin}\n action={[\"create\"]}\n resource=\"Project\"\n permissions={permissions}\n endIcon={<AddIcon style={{ marginLeft: \"-4px\" }} />}\n >\n {isSmall ? \"\" : \"Add Project\"}\n </ButtonWithPermission>\n );\n};\n\nconst Empty = (props) => (\n <Box textAlign=\"center\" m={1} p={1}>\n <Typography variant=\"h4\" paragraph>\n No Projects yet.\n </Typography>\n <Typography variant=\"body1\">Do you want to add one?</Typography>\n <Box mt={1}>\n <CreateProjectBtn {...props} />\n </Box>\n </Box>\n);\n\nconst ProjectPanel = ({ id, record, resource, isCustomerAdmin, ...props }) => {\n const dataProvider = useDataProvider();\n const [chartData, setChartData] = React.useState();\n const [loading, setLoading] = React.useState(true);\n const ref = React.useRef();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [nominated, setNominated] = React.useState();\n const [mileStone, setMileStone] = React.useState();\n const [createMilestoneDrawerOpen, setCreateMilestoneDrawerOpen] =\n React.useState();\n const [editMilestoneDrawerOpen, setEditMilestoneDrawerOpen] =\n React.useState();\n const { permissions } = props;\n const [legends, setLegends] = React.useState(false);\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const getProjectData = React.useCallback(async () => {\n setLoading(true);\n\n const milestoneAndProject = await Promise.all([\n dataProvider.getList(\"Milestone\", {\n pagination: { page: 1, perPage: 25 },\n sort: { field: \"id\", order: \"ASC\" },\n filter: { projectId: record.id },\n }),\n dataProvider.getOne(\"Project\", { id: record.id }),\n ]);\n\n const milestones = milestoneAndProject[0].data;\n const project = milestoneAndProject[1].data;\n\n const milestoneObj = {};\n\n milestones.map((item, index) => {\n milestoneObj[`Milestone Name ${[index + 1]}`] = item.name;\n milestoneObj[`Milestone Phase ${[index + 1]}`] = item.projectPhase;\n milestoneObj[`Milestone Date ${[index + 1]}`] = new Date(\n item.milestoneDate\n ).toLocaleDateString(\"en-GB\");\n });\n\n const startDate = new Date(project?.endDate);\n const endDate = new Date(project?.endDate);\n const goLiveDate = new Date(project?.endDate);\n if (project.status === true) {\n project.status = \"active\";\n } else {\n project.status = \"inactive\";\n }\n\n const excelData = {\n \"Project Name\": project?.name,\n \"Business Unit\": project?.businessUnit?.name,\n \"Project Sponsor\": project?.projectSponsor?.fullName,\n \"Business Owner\": project?.businessOwner?.fullName,\n \"Change Lead\": project?.changeLeader?.fullName,\n \"Stretegic Driver\": project?.projectDriver,\n \"Start Date\": startDate.toLocaleDateString(\"en-GB\"),\n \"End Date\": endDate.toLocaleDateString(\"en-GB\"),\n \"Go Live Date\": goLiveDate.toLocaleDateString(\"en-GB\"),\n Status: project.status,\n ...milestoneObj,\n };\n\n setMileStone(excelData);\n\n const chart_data = {\n labels: [\"milestones\"],\n datasets: {},\n startDate: project.startDate,\n endDate: project.endDate,\n };\n\n const phasesData =\n project && project.projectPhases && project.projectPhases.length\n ? project.projectPhases.map((phase, index) => ({\n label: phase.name,\n data: [[phase.startDate, phase.endDate]],\n backgroundColor: phaseBgColors[index],\n name: phase.name,\n barThickness: 40,\n borderWidth: 2,\n }))\n : null;\n\n const mileStonePointBackgroundColor = [\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n ];\n const mileStonePointBorderColor = [\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n \"#000000\",\n ];\n\n // -------------------------- Chart end\n const milestonesData =\n milestones && milestones.length\n ? milestones.map((milestone, index) => ({\n label: \"\",\n data: [milestone.milestoneDate],\n name: milestone.name,\n backgroundColor: \"white\",\n borderColor: \"white\",\n pointRadius: 5,\n pointStyle: \"circle\",\n pointHoverRadius: 10,\n barThickness: 30,\n pointBorderColor: mileStonePointBorderColor[index],\n pointBackgroundColor: mileStonePointBackgroundColor[index],\n legend: {\n display: false,\n },\n options: {},\n plugins: {\n // afterDraw: (chart) => {\n // const ctx = chart.ctx;\n // const xAxis = chart.scales.x;\n // // Add custom labels for start and end dates\n // const startDateLabel = moment(project.startDate).format('DD/MM/YYYY');\n // const endDateLabel = moment(project.endDate).format('DD/MM/YYYY');\n // const startX = xAxis.getPixelForValue(moment(project.startDate).valueOf());\n // const endX = xAxis.getPixelForValue(moment(project.endDate).valueOf());\n // // Draw custom labels\n // ctx.textAlign = 'center';\n // ctx.fillStyle = 'black';\n // ctx.fillText(startDateLabel, startX, chart.height - 10);\n // ctx.fillText(endDateLabel, endX, chart.height - 10);\n // return ctx\n // }\n },\n type: \"scatter\",\n }))\n : null;\n\n chart_data.datasets = { phasesData, milestonesData };\n setChartData(chart_data);\n setLoading(false);\n }, [dataProvider, record.id]);\n\n const handleCreateMilestoneDrawerOpen = (open, isSubmitted = false) => {\n setCreateMilestoneDrawerOpen(open);\n if (isSubmitted) getProjectData();\n };\n\n const handleEditMilestoneDrawerOpen = (open, isSubmitted = false) => {\n setEditMilestoneDrawerOpen(open);\n if (isSubmitted) getProjectData();\n };\n\n React.useEffect(() => {\n if (permissions.permissions) {\n const viewPermission = permissions.permissions.find(\n (element) => element.id == 18 || element.id == 17\n );\n viewPermission && setNominated(true);\n }\n }, [permissions]);\n\n React.useEffect(() => {\n getProjectData();\n }, [getProjectData]);\n\n const handleExportMileStone = () => {\n const projectMileStoneData = JSON.stringify([mileStone]);\n dataProvider\n .postRequest(\"ExportMileStone\", {\n queryType: \"retrieve\",\n data: { projectMileStoneData },\n })\n .then((response) => {\n saveFileFromBinary(response.data, \"Milestone\");\n })\n .catch((error) => {\n handleSnackbarOpen(\"No data found to export\", \"warning\")\n });\n };\n\n if (loading) return <Loading />;\n\n if (!chartData || (chartData && !chartData.datasets.milestonesData)) {\n return (\n <>\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"center\">\n <Box>\n <Button\n disabled={nominated}\n startIcon={<AddCircleOutlineIcon />}\n onClick={() => handleCreateMilestoneDrawerOpen(true)}\n color=\"primary\"\n variant=\"text\"\n >\n Add Milestone\n </Button>\n </Box>\n </Box>\n <MilestoneCreateDrawer\n record={record}\n drawerOpen={createMilestoneDrawerOpen}\n onClose={handleCreateMilestoneDrawerOpen}\n />\n <MilestoneEditDrawer\n record={record}\n drawerOpen={editMilestoneDrawerOpen}\n onClose={handleEditMilestoneDrawerOpen}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </>\n );\n }\n\n return (\n <>\n <Box style={{ width: \"100%\" }}>\n <Box\n pl={2}\n pr={isSmall ? \"8px\" : \"30px\"}\n height={250}\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n >\n <Box display=\"flex\" justifyContent=\"flex-end\">\n <ExportButton\n exportFile={handleExportMileStone}\n varient=\"contained\"\n width={isSmall ? \"50px\" : \"\"}\n btnName={isSmall ? \"\" : \"Export\"}\n />\n </Box>\n <Box ref={ref}>\n <MilestoneCustomChart chartData={chartData} />\n </Box>\n </Box>\n <Box>\n {\n <Box\n sx={{\n overflow: \"hidden\",\n maxHeight: legends ? \"500px\" : \"0\",\n transition: legends ? \"max-height 1.5s\" : \"max-height 0.3s\",\n }}\n >\n {[...chartData.datasets.phasesData].map((item, index) => (\n // <Box sx={{display: 'flex',flexDirection: 'column', alignItems: 'center', justifyContent: 'center'}}>\n <Box\n sx={{\n padding: \"5px 15px\",\n margin: \"2px 10px\",\n display: \"inline-block\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-around\",\n margin: \"0 10px\",\n }}\n >\n <Box\n sx={{\n backgroundColor:\n item.backgroundColor === \"white\"\n ? \"#000\"\n : item.backgroundColor,\n padding: \"6px 30px\",\n }}\n ></Box>\n\n <Typography\n variant=\"subtitle1\"\n style={{ color: \"#000\", margin: \"0 5px\" }}\n >\n {item.name}\n </Typography>\n {item.type === undefined ? (\n <Typography\n variant=\"subtitle1\"\n style={{ color: \"#000\" }}\n >{`${moment(item.data[0][0]).format(\n \"DD-MM-YYYY\"\n )} - ${moment(item.data[0][1]).format(\n \"DD-MM-YYYY\"\n )}`}</Typography>\n ) : (\n <Typography\n variant=\"subtitle1\"\n style={{ color: \"#000\" }}\n >{`${moment(item.data[0]).format(\n \"DD-MM-YYYY\"\n )}`}</Typography>\n )}\n </Box>\n </Box>\n ))}\n </Box>\n }\n </Box>\n <Box display=\"flex\" flexDirection=\"row\" justifyContent=\"center\">\n <Button\n disabled={nominated}\n startIcon={\n !legends ? (\n <AddCircleOutlineIcon />\n ) : (\n <RemoveCircleOutlineOutlinedIcon />\n )\n }\n onClick={() => setLegends(!legends)}\n color=\"primary\"\n variant=\"text\"\n >\n {!legends ? \"Show Legends\" : \"Hide Legends\"}\n </Button>\n\n {/* <Button\n disabled={nominated}\n startIcon={<ModeOutlinedIcon />}\n onClick={() => handleEditMilestoneDrawerOpen(true)}\n color=\"primary\"\n variant=\"text\"\n >\n Add/Edit Milestone\n </Button> */}\n </Box>\n </Box>\n <MilestoneCreateDrawer\n record={record}\n drawerOpen={createMilestoneDrawerOpen}\n onClose={handleCreateMilestoneDrawerOpen}\n />\n <MilestoneEditDrawer\n record={record}\n drawerOpen={editMilestoneDrawerOpen}\n onClose={handleEditMilestoneDrawerOpen}\n />\n </>\n );\n};\nconst CustomStatusField = ({ record }) => (\n <span>\n {record.isDraft ? (\n <ManageChip inactiveChip={true} record={INACTIVE_ACTIVE_CHOICES[2]} />\n ) : record.status ? (\n <ManageChip inactiveChip={true} record={INACTIVE_ACTIVE_CHOICES[1]} />\n ) : (\n <ManageChip inactiveChip={true} record={INACTIVE_ACTIVE_CHOICES[0]} />\n )}\n </span>\n // <ManageChip inactiveChip={true} record={{ id: false, name: \"Draft\" }}/>\n);\nexport const ProjectList = (props) => {\n const [createDrawerOpen, setCreateDrawerOpen] = React.useState();\n const [editDrawerOpen, setEditDrawerOpen] = React.useState();\n const [record, setRecord] = React.useState();\n const dataProvider = useDataProvider();\n\n const refresh = useRefresh();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const { loading: loadingPermissions, permissions } = usePermissions();\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin, isImpersonating } = user ? user : {};\n\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const handleCreateDrawerOpen = (open) => {\n setCreateDrawerOpen(open);\n };\n\n const handleCreateDrawerClose = () => {\n setCreateDrawerOpen(false);\n };\n\n const handleEditDrawerOpen = (open) => {\n setEditDrawerOpen(open);\n };\n const handleClick = (record) => {\n TokenStorage.storeProjectDetails(JSON.stringify(record));\n impersonatedURL(isImpersonating, \"#/projectCreate?impersonated\");\n // history.push('/projectCreate')\n };\n const handleEditDrawerClose = (open) => {\n setRecord(null);\n setEditDrawerOpen(open);\n };\n\n const rowActionsChoices = [\n { id: \"edit\", name: \"Edit\", resource: \"Project\", action: [\"edit\"] },\n { id: \"delete\", name: \"Delete\", resource: \"Project\", action: [\"delete\"] },\n ];\n const handleEditProject = (records) => {\n TokenStorage.storeProjectDetails(JSON.stringify(records));\n impersonatedURL(isImpersonating, \"#/projectCreate?impersonated\");\n };\n const handleDeleteProject = () => {\n const proceed = window.confirm(\"You are deleting the entry. Are you sure?\");\n if (proceed) {\n dataProvider\n .delete(\"Project\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"Project deleted successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n };\n const ActionButtonSmallScreen = () => {\n const records = useRecordContext();\n return (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <IconButton\n aria-label=\"edit\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <EditIcon\n size=\"small\"\n style={{\n color: \"#00A0D9\",\n cursor: \"pointer\",\n margin: \"0 5px\",\n fontSize: \"20px\",\n }}\n onClick={() => handleEditProject(records)}\n />\n </IconButton>\n <IconButton\n aria-label=\"delete\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <DeleteForeverIcon\n size=\"small\"\n style={{\n color: \"#de0937\",\n cursor: \"pointer\",\n fontSize: \"20px\",\n }}\n onClick={handleDeleteProject}\n />\n </IconButton>\n </Box>\n );\n };\n\n\n const handleMoreActionsClick = ({ action, record }) => {\n switch (action) {\n case \"edit\":\n // setRecord(record);\n handleClick(record);\n // handleEditDrawerOpen(true);\n break;\n case \"delete\":\n const proceed = window.confirm(\n \"You are deleting the entry. Are you sure?\"\n );\n if (proceed) {\n dataProvider\n .delete(\"Project\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"Project deleted successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n break;\n }\n };\n const classes = useStyles();\n\n impersonatedURL(isImpersonating, \"#/project?impersonated\");\n const postRowStyle = (record, index) => ({\n backgroundColor: index == 0 ? \"#efe\" : \"#000\",\n });\n return (\n <WithPermission\n resource=\"Project\"\n bypassUser={isCustomerAdmin}\n permissions={permissions}\n action={[\"view\"]}\n {...props}\n >\n <List\n title={<span style={{ textTransform: \"uppercase\" }}>Projects</span>}\n hasCreate={false}\n empty={\n <Empty\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n actions={\n <ListActions\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n filters={<ProjectFilter />}\n bulkActionButtons={false}\n pagination={<PostPagination />}\n {...props}\n >\n {isSmall ? (\n <Datagrid\n classes={{\n headerCell: classes.headerCell,\n rowCell: classes.rowCell,\n expandIcon: classes.expandIcon,\n }}\n >\n <Box\n mb={1}\n className={classes.stylingTitle}\n style={{ display: \"flex\", flexDirection: \"column\" }}\n >\n <Box>\n\n <TextField label=\"Project Name\" source=\"name\" sortable={true} />\n </Box>\n\n <Box>\n\n <TextField\n label=\"Strategic Driver\"\n source=\"projectDriver\"\n sortable={false}\n />\n </Box>\n <Box>\n\n <TextField\n label=\"Business Owner\"\n source=\"businessOwner.fullName\"\n sortable={false}\n />\n </Box>\n <ActionButtonSmallScreen />\n </Box>\n\n </Datagrid>\n ) : (\n <Datagrid\n expand={\n <ProjectPanel\n isCustomerAdmin={isCustomerAdmin}\n permissions={props.permissions}\n />\n }\n hover={true}\n title=\"Expand Milestone\"\n\n sx={{\n \"& .RaDatagrid-expandedPanel\": {\n backgroundColor: \"#000\",\n },\n }}\n >\n <TextField label=\"Project Name\" source=\"name\" sortable={true} />\n <TextField\n label=\"Project Sponsor\"\n source=\"projectSponsor.fullName\"\n sortable={false}\n />\n <TextField\n label=\"Project Driver\"\n source=\"projectDriver\"\n sortable={false}\n />\n <TextField\n label=\"Business Owner\"\n source=\"businessOwner.fullName\"\n sortable={false}\n />\n\n <FunctionField\n label=\"Status\"\n render={(record) => <CustomStatusField record={record} />}\n />\n <MoreActions\n record={record}\n choices={rowActionsChoices}\n bypassUser={isCustomerAdmin}\n permissions={props.permissions}\n handleClose={() => console.log(\"closing\")}\n handleClick={handleMoreActionsClick}\n sortable={false}\n />\n </Datagrid>\n )}\n </List>\n <ProjectCreateDrawer\n record={record}\n drawerOpen={createDrawerOpen}\n onClose={handleCreateDrawerClose}\n />\n <ProjectEditDrawer\n record={record}\n drawerOpen={editDrawerOpen}\n onClose={handleEditDrawerClose}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n};\n\nexport default ProjectList;\n","import AccountBalanceIcon from '@material-ui/icons/AccountBalance';\nimport ProjectList from './projectList';\n\n\nexport default {\n list: ProjectList,\n icon: AccountBalanceIcon,\n};","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { useEffect, useState } from \"react\";\nimport {\n AutocompleteArrayInput,\n CheckboxGroupInput,\n ReferenceArrayInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n useRefresh,\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\nimport { Box, Checkbox, Divider, FormControlLabel } from \"@material-ui/core\";\nimport arrayMutators from \"final-form-arrays\";\nconst useStyles = makeStyles({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n bottom: 0,\n marginBottom: 40,\n width: 360\n // padding: 16\n },\n textHeadings: {\n fontWeight: 400,\n fontSize: 16,\n fontStyle: \"normal\",\n margin: 0,\n color: \"#B5B5B5\",\n },\n inputMargin: {\n marginTop: 5,\n },\n gridItemPadding: {\n padding: \"0 0 14px 8px !important\",\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n formWidth: {\n maxWidth: 350\n\n }\n // ,\n // textWhiteSpace: {\n // whiteSpace: 'normal'\n // } \n});\nexport const RoleCreateDrawer = ({ choicess, record, drawerOpen, onClose,handleSnackbarOpen}) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const classes = useStyles();\n const [permissionParentName, setPermissionParentName] = useState({ view: false, edit: false })\n const [showCreateButton, setShowCreateButton] = useState(false);\n const [roleName, setRoleName] = useState(false);\n // const [hasAnyPermission, setPermission] = useState(true);\n const [hasAnyPermission, setHasAnyPermission] = useState(false)\n const handleRoleName = (e) => {\n const nameField = e.target.value;\n if (nameField !== '') {\n setRoleName(true)\n }\n else {\n setRoleName(false)\n }\n };\n const handlePermissionView = (e) => {\n if (e.length !== 0) {\n const oldState = { ...permissionParentName }\n oldState['view'] = true\n setHasAnyPermission(true)\n setPermissionParentName(oldState)\n // setPermission(truez\n }\n else {\n const oldState = { ...permissionParentName }\n oldState['view'] = false\n setHasAnyPermission(false)\n setPermissionParentName(oldState)\n // setPermission(true)\n }\n };\n const handlePermissionEdit = (e) => {\n if (e.length !== 0) {\n const oldState = { ...permissionParentName }\n oldState['edit'] = true\n setHasAnyPermission(true)\n setPermissionParentName(oldState)\n // setPermission(false)\n }\n else {\n const oldState = { ...permissionParentName }\n oldState['edit'] = false\n setHasAnyPermission(false)\n setPermissionParentName(oldState)\n // setPermission(true)\n }\n };\n const handleChangeView = (e, form) => {\n const oldState = { ...permissionParentName }\n setHasAnyPermission(!oldState.view)\n oldState['view'] = !oldState.view\n setPermissionParentName(oldState)\n const permissionState = Object.keys(form.getState().values && form.getState().values.viewPermissions).length > 0 ? form.getState().values.viewPermissions : [];\n let newPermission = []\n\n if (permissionState.length > 0) {\n newPermission = []\n }\n else {\n newPermission = choicess.ViewGroup.map(item => item.id)\n }\n\n form.change('viewPermissions', newPermission)\n \n }\n const handleChangeEdit = (e, form) => {\n const oldState = { ...permissionParentName }\n setHasAnyPermission(!oldState.edit)\n oldState['edit'] = !oldState.edit\n setPermissionParentName(oldState)\n\n const permissionState = Object.keys(form.getState().values && form.getState().values.editPermissions).length > 0 ? form.getState().values.editPermissions : [];\n let newPermission = []\n if (permissionState.length > 0) {\n newPermission = []\n }\n else {\n newPermission = choicess.EditGroup.map(item => item.id)\n }\n\n form.change('editPermissions', newPermission)\n \n }\n useEffect(() => {\n if (roleName === false && hasAnyPermission === false) {\n // setShowCreateButton(false)\n \n }\n else {\n // setShowCreateButton(true)\n }\n }, [roleName, hasAnyPermission])\n\n const resource = \"Role\";\n const onSubmit = (values, form) => {\n const newVales = {\n name: values.name,\n permissions: [...values.viewPermissions, ...values.editPermissions]\n }\n dataProvider\n .create(resource, {\n data: newVales,\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Role added successfully\", \"success\");\n setPermissionParentName({ view: false, edit: false })\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = () => { \n\n if (roleName === false || hasAnyPermission === false) {\n setShowCreateButton(false)\n \n }\n else {\n setShowCreateButton(true)\n }\n };\n\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Create Role\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Form\n onSubmit={onSubmit}\n mutators={{\n // potentially other mutators could be merged here\n ...arrayMutators,\n }}\n validate={validate}\n initialValues={record}\n render={({ handleSubmit, form }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextInput\n onChange={(e) => handleRoleName(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Role name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12} >\n <FormControlLabel\n control={<Checkbox checked={permissionParentName.view} onChange={(e) => handleChangeView(e, form)} name=\"checkedA\" />}\n label=\"View Projects/Reports\"\n />\n <CheckboxGroupInput\n onChange={(e) => handlePermissionView(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Permissions\"\n source=\"viewPermissions\"\n // validate={[required()]}\n choices={choicess.ViewGroup}\n optionText=\"name\"\n row={false}\n style={{ paddingLeft: '12px' }}\n />\n <Box sx={{ padding: '0 0 10px 0' }}>\n <Divider />\n </Box>\n <FormControlLabel\n control={<Checkbox checked={permissionParentName.edit} onChange={(e) => handleChangeEdit(e, form)} name=\"checkedA\" />}\n label=\"Edit Projects/Reports\"\n />\n <CheckboxGroupInput\n onChange={(e) => handlePermissionEdit(e)}\n fullWidth\n variant=\"outlined\"\n label=\"\"\n source=\"editPermissions\"\n // validate={[required()]}\n choices={choicess.EditGroup}\n optionText=\"name\"\n row={false}\n style={{ paddingLeft: '12px' }}\n />\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n {\n \n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n disabled = {!showCreateButton ? true : false}\n >\n Save\n </Button>\n }\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n );\n};\n\nexport default RoleCreateDrawer;\n","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport {\n AutocompleteArrayInput,\n CheckboxGroupInput,\n ReferenceArrayInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { groupPermissions, onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\nimport { Box, Checkbox, Divider, FormControlLabel } from \"@material-ui/core\";\nimport permission from \"../permission\";\nconst useStyles = makeStyles({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n bottom: 0,\n marginBottom: 40,\n width: 360\n // padding: 16\n },\n textHeadings: {\n fontWeight: 400,\n fontSize: 16,\n fontStyle: \"normal\",\n margin: 0,\n color: \"#B5B5B5\",\n },\n inputMargin: {\n marginTop: 5,\n },\n gridItemPadding: {\n padding: \"0 0 14px 8px !important\",\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: \"#BDBDBD\",\n },\n formWidth: {\n maxWidth: 350\n\n }\n});\n\nexport const RoleEditDrawer = ({ choicess, record, drawerOpen, onClose,handleSnackbarOpen }) => {\n const dataProvider = useDataProvider();\n const [initialValues, setInitialValues] = React.useState();\n const [permissionParentName, setPermissionParentName] = React.useState({ view: false, edit: false })\n const classes = useStyles();\n\n const resource = \"Role\";\n\n\n\n\n const handlePermissionView = (e) => {\n \n if (e.length !== 0) {\n const oldState = { ...permissionParentName }\n oldState['view'] = true\n\n setPermissionParentName(oldState)\n // setPermission(truez\n }\n else {\n const oldState = { ...permissionParentName }\n oldState['view'] = false\n\n setPermissionParentName(oldState)\n // setPermission(true)\n }\n };\n const handlePermissionEdit = (e) => {\n \n if (e.length !== 0) {\n const oldState = { ...permissionParentName }\n oldState['edit'] = true\n\n setPermissionParentName(oldState)\n // setPermission(false)\n }\n else {\n const oldState = { ...permissionParentName }\n oldState['edit'] = false\n\n setPermissionParentName(oldState)\n // setPermission(true)\n }\n };\n const handleChangeView = (e, form) => {\n const oldState = { ...permissionParentName }\n\n oldState['view'] = !oldState.view\n setPermissionParentName(oldState)\n \n const permissionState = Object.keys(form.getState().values && form.getState().values.viewPermissions).length > 0 ? form.getState().values.viewPermissions : [];\n let newPermission = []\n\n if (permissionState.length > 0) {\n newPermission = []\n }\n else {\n newPermission = choicess.ViewGroup.map(item => item.id)\n }\n\n form.change('viewPermissions', newPermission)\n\n \n }\n const handleChangeEdit = (e, form) => {\n const oldState = { ...permissionParentName }\n\n oldState['edit'] = !oldState.edit\n setPermissionParentName(oldState)\n \n const permissionState = Object.keys(form.getState().values && form.getState().values.editPermissions).length > 0 ? form.getState().values.editPermissions : [];\n let newPermission = []\n if (permissionState.length > 0) {\n newPermission = []\n }\n else {\n newPermission = choicess.EditGroup.map(item => item.id)\n }\n\n form.change('editPermissions', newPermission)\n\n }\n const onSubmit = (values, form) => {\n const newValue = [...values.viewPermissions, ...values.editPermissions]\n dataProvider\n .update(resource, {\n id: record.id,\n data: {\n id: record.id,\n name: values.name,\n permissions: newValue\n },\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Role updated successfully\", \"success\");\n setPermissionParentName({ view: false, edit: false })\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = () => { };\n\n React.useEffect(() => {\n if (record && record.id)\n dataProvider.getOne(resource, { id: record.id }).then((response) => {\n \n const viewsData = groupPermissions(choicess.ViewGroup, response.data.permissions) \n const editData = groupPermissions(choicess.EditGroup, response.data.permissions) \n setInitialValues({\n ...response.data,\n viewPermissions: response.data.permissions\n ? viewsData\n : null,\n editPermissions: response.data.permissions\n ? editData\n : null,\n });\n setPermissionParentName({view: viewsData.length, edit: editData.length})\n });\n }, [record]);\n\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Edit Role\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit, form }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2} >\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Role name\"\n source=\"name\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12} >\n <FormControlLabel\n control={<Checkbox checked={permissionParentName.view} onChange={(e) => handleChangeView(e, form)} name=\"checkedA\" />}\n label=\"View Projects/Reports\"\n />\n <CheckboxGroupInput\n onChange={(e) => handlePermissionView(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Permissions\"\n source=\"viewPermissions\"\n // validate={[required()]}\n choices={choicess.ViewGroup}\n optionText=\"name\"\n row={false}\n style={{ paddingLeft: '12px' }}\n />\n <Box sx={{ padding: '0 0 10px 0' }}>\n <Divider />\n </Box>\n <FormControlLabel\n control={<Checkbox checked={permissionParentName.edit} onChange={(e) => handleChangeEdit(e, form)} name=\"checkedA\" />}\n label=\"Edit Projects/Reports\"\n />\n <CheckboxGroupInput\n onChange={(e) => handlePermissionEdit(e)}\n fullWidth\n variant=\"outlined\"\n label=\"\"\n source=\"editPermissions\"\n // validate={[required()]}\n choices={choicess.EditGroup}\n optionText=\"name\"\n row={false}\n style={{ paddingLeft: '12px' }}\n />\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n >\n Update\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n );\n};\n\nexport default RoleEditDrawer;\n","import { Box, Typography, useMediaQuery } from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport makeStyles from \"@material-ui/styles/makeStyles\";\nimport _ from \"lodash\";\nimport * as React from \"react\";\nimport { cloneElement } from \"react\";\nimport {\n Datagrid,\n Filter,\n List,\n SearchInput,\n TextField,\n TopToolbar,\n sanitizeListRestProps,\n useDataProvider,\n useListContext,\n useNotify,\n usePermissions,\n useRecordContext,\n useRefresh,\n} from \"react-admin\";\nimport { groupByAction, onFailureMessage } from \"../../utils/AppUtils\";\nimport ButtonWithPermission from \"../../utils/ButtonWithPermission\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport MoreActions from \"../customComponents/moreActions\";\nimport RoleCreateDrawer from \"./roleCreateDrawer\";\nimport RoleEditDrawer from \"./roleEditDrawer\";\nimport DeleteForeverIcon from \"@mui/icons-material/DeleteForever\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport { Alert, IconButton, Snackbar } from \"@mui/material\";\nimport PostPagination from \"../../utils/PostPagination\";\nconst useStyles = makeStyles((theme) => ({\n headerCell: {\n [theme.breakpoints.down(\"xs\")]: {\n display: \"none\",\n },\n },\n rowCell: {\n [theme.breakpoints.down(\"xs\")]: {\n paddingLeft: \"10px\",\n },\n },\n}));\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const {\n className,\n exporter,\n filters,\n maxResults,\n handleCreateDrawerOpen,\n ...rest\n } = props;\n const {\n currentSort,\n resource,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext();\n\n return (\n <TopToolbar {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n <CreateRoleBtn {...props} />\n </TopToolbar>\n );\n};\n\nconst RoleFilter = (props) => (\n <Filter {...props}>\n <SearchInput variant=\"outlined\" source=\"q\" alwaysOn />\n </Filter>\n);\n\nconst CreateRoleBtn = (props) => {\n const { isCustomerAdmin, permissions, isSuperAdmin, handleCreateDrawerOpen } =\n props;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const classes = useStyles();\n return (\n <ButtonWithPermission\n resource=\"Role\"\n permissions={permissions}\n bypassUser={isCustomerAdmin}\n endIcon={<AddIcon />}\n action={[\"create\"]}\n variant=\"contained\"\n onClick={() => handleCreateDrawerOpen(true)}\n >\n {isSmall ? \"\" : \"Create Role\"}\n </ButtonWithPermission>\n );\n};\n\nconst Empty = (props) => {\n const { basePath, resource } = useListContext();\n return (\n <Box textAlign=\"center\" m={1} p={1}>\n <Typography variant=\"h4\" paragraph>\n No Roles yet.\n </Typography>\n <Typography variant=\"body1\">Do you want to add one?</Typography>\n <Box mt={1}>\n <CreateRoleBtn {...props} />\n </Box>\n </Box>\n );\n};\n\nexport const RoleList = (props) => {\n const [createDrawerOpen, setCreateDrawerOpen] = React.useState();\n const [editDrawerOpen, setEditDrawerOpen] = React.useState();\n const [record, setRecord] = React.useState({ viewPermissions: [], editPermissions: [], name: \"\" });\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({message: name, type: type})\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const {vertical, horizontal} = anchorOrigin;\n const refresh = useRefresh();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const classes = useStyles();\n const { loading: loadingPermissions, permissions } = usePermissions();\n\n const [permissionList, setPermissionList] = React.useState([])\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n\n const handleCreateDrawerOpen = (open) => {\n setCreateDrawerOpen(open);\n };\n\n const handleCreateDrawerClose = () => {\n setCreateDrawerOpen(false);\n };\n\n const handleEditDrawerOpen = (open) => {\n setEditDrawerOpen(open);\n };\n\n const handleEditDrawerClose = (open) => {\n setRecord(null);\n setEditDrawerOpen(open);\n };\n\n React.useEffect(() => {\n dataProvider.getList(\"Permission\", {\n pagination: { page: 1, perPage: 100 },\n sort: { field: \"id\", order: \"ASC\" },\n filter: { isDisabled: true },\n }).then((res) => {\n setPermissionList(groupByAction(res.data))\n })\n .catch((err) => {\n console.log(err.message)\n })\n }, [])\n\n\n const rowActionsChoices = [\n { id: \"edit\", name: \"Edit\", resource: \"Role\", action: [\"edit\"] },\n { id: \"delete\", name: \"Delete\", resource: \"Role\", action: [\"delete\"] },\n ];\n\n const handleEditRole = (editRecord) => {\n setRecord(editRecord);\n handleEditDrawerOpen(true);\n };\n const handleDeleteRole = (record) => {\n const proceed = window.confirm(\"You are deleting the entry. Are you sure?\");\n if (proceed) {\n dataProvider\n .delete(\"Role\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"Role deleted successfully\", \"success\")\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n };\n const handleMoreActionsClick = ({ action, record }) => {\n switch (action) {\n case \"edit\":\n setRecord(record);\n handleEditDrawerOpen(true);\n break;\n case \"delete\":\n const proceed = window.confirm(\n \"You are deleting the entry. Are you sure?\"\n );\n if (proceed) {\n dataProvider\n .delete(\"Role\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"Role deleted successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n break;\n }\n };\n\n const PermissionsField = ({ record }) => {\n if (record && record.permissions) {\n return _.map(record.permissions, \"name\").join(\", \");\n }\n\n return null;\n };\n const PermissionsFieldSC = () => {\n const records = useRecordContext();\n if (records && records.permissions) {\n const permissionsText = _.map(records.permissions, \"name\").join(\", \");\n return (\n <span style={{ color: \"#8d8f8e\", fontSize: \"13px\" }}>\n {permissionsText}\n </span>\n );\n }\n\n return null;\n };\n\n const ActionButtonSM = () => {\n const records = useRecordContext();\n return (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <IconButton\n aria-label=\"edit\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <EditIcon\n size=\"small\"\n style={{\n color: \"#00A0D9\",\n cursor: \"pointer\",\n margin: \"0 5px\",\n fontSize: \"20px\",\n }}\n onClick={() => handleEditRole(records)}\n />\n </IconButton>\n <IconButton\n aria-label=\"delete\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <DeleteForeverIcon\n size=\"small\"\n style={{ color: \"#de0937\", cursor: \"pointer\", fontSize: \"20px\" }}\n onClick={() => handleDeleteRole(records)}\n />\n </IconButton>\n </Box>\n );\n };\n return (\n <WithPermission\n resource=\"Role\"\n permissions={permissions}\n bypassUser={isCustomerAdmin}\n action={[\"view\"]}\n {...props}\n >\n <List\n title={\n <span style={{ textTransform: \"uppercase\" }}>Role Management</span>\n }\n hasCreate={false}\n empty={\n <Empty\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n actions={\n <ListActions\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n filters={<RoleFilter />}\n bulkActionButtons={false}\n pagination={<PostPagination />}\n {...props}\n >\n {isSmall ? (\n <Datagrid\n classes={{\n headerCell: classes.headerCell,\n rowCell: classes.rowCell,\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n px: \"5px\",\n }}\n >\n <TextField label=\"Name\" source=\"name\" sortable={false} />\n <br />\n <PermissionsFieldSC\n label=\"Permissions\"\n source=\"permissions\"\n sortable={false}\n />\n <br />\n <ActionButtonSM />\n </Box>\n </Datagrid>\n ) : (\n <Datagrid>\n <TextField label=\"Name\" source=\"name\" sortable={false} />\n <PermissionsField\n label=\"Permissions\"\n source=\"permissions\"\n sortable={false}\n />\n <MoreActions\n bypassUser={isCustomerAdmin}\n permissions={permissions}\n choices={rowActionsChoices}\n handleClose={() => console.log(\"closing\")}\n handleClick={handleMoreActionsClick}\n sortable={false}\n />\n </Datagrid>\n )}\n </List>\n <RoleCreateDrawer\n choicess={permissionList}\n record={record}\n drawerOpen={createDrawerOpen}\n onClose={handleCreateDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <RoleEditDrawer\n choicess={permissionList}\n record={record}\n drawerOpen={editDrawerOpen}\n onClose={handleEditDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n};\n\nexport default RoleList;\n","import AccountBalanceIcon from '@material-ui/icons/AccountBalance';\nimport RoleList from './roleList';\n\n\nexport default {\n list: RoleList,\n icon: AccountBalanceIcon,\n};","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport * as React from \"react\";\nimport {\n AutocompleteInput,\n RadioButtonGroupInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n useRefresh\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport { YES_NO_CHOICES } from \"../../framework/constants\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\nconst useStyles = makeStyles({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n // padding: 16\n },\n inputMargin: {\n marginTop: 5\n },\n gridItemPadding: {\n padding: '0 0 14px 8px !important'\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: '#BDBDBD'\n },\n formWidth: {\n maxWidth: 350\n }\n});\n\nconst industries = [\n { id: \"Agriculture, Forestry and Fishing\", name: \"Agriculture, Forestry and Fishing\" },\n { id: \"Mining\", name: \"Mining\" },\n { id: \"Manufacturing\", name: \"Manufacturing\" },\n { id: \"Electricity, Gas, Water and Waste Services\", name: \"Electricity, Gas, Water and Waste Services\" },\n { id: \"Construction\", name: \"Construction\" },\n { id: \"Wholesale Trade\", name: \"Wholesale Trade\" },\n { id: \"Retail Trade\", name: \"Retail Trade\" },\n { id: \"Accommodation and Food Services\", name: \"Accommodation and Food Services\" },\n { id: \"Transport, Postal and Warehousing\", name: \"Transport, Postal and Warehousing\" },\n { id: \"Information Media and Telecommunications\", name: \"Information Media and Telecommunications\" },\n { id: \"Financial and Insurance Services\", name: \"Financial and Insurance Services\" },\n { id: \"Rental, Hiring and Real Estate Services\", name: \"Rental, Hiring and Real Estate Services\" },\n { id: \"Professional, Scientific and Technical Services\", name: \"Professional, Scientific and Technical Services\" },\n { id: \"Administrative and Support Services\", name: \"Administrative and Support Services\" },\n { id: \"Public Administration and Safety\", name: \"Public Administration and Safety\" },\n { id: \"Education and Training\", name: \"Education and Training\" },\n { id: \"Health Care and Social Assistance \", name: \"Health Care and Social Assistance \" },\n { id: \"Arts and Recreation Services\", name: \"Arts and Recreation Services\" },\n { id: \"Government\", name: \"Government\" },\n { id: \"Other Services\", name: \"Other Services\" },\n];\n\nexport const UserCreateDrawer = ({ initialValues, drawerOpen, onClose,handleSnackbarOpen}) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const classes = useStyles();\n const [currency, setCurrency] = React.useState();\n\n const resource = \"User\";\n const onSubmit = (values, form) => {\n console.log(values);\n dataProvider\n .create(resource, {\n data: {\n ...values,\n firstName: values.fullName,\n },\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Customer added successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n\n const validate = () => { };\n\n const handleChange = (event) => {\n setCurrency(event.target.value);\n };\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Create Client\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Client Name\"\n source=\"companyName\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Location\"\n source=\"location\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <AutocompleteInput\n variant=\"outlined\"\n source=\"industry\"\n label=\"Industry\"\n choices={industries}\n className={classes.inputMargin}\n fullWidth\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <RadioButtonGroupInput\n label=\"Managed Services\"\n source=\"isManagedService\"\n row={true}\n choices={YES_NO_CHOICES}\n validate={[required()]}\n style={{ display: 'flex' }}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Admin Name\"\n source=\"fullName\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Email\"\n source=\"email\"\n type=\"email\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n inputProps={{\n classes: {\n notchedOutline: classes.inputBorder\n }\n }}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Comments\"\n source=\"description\"\n multiline\n validate={[maxLength(255)]}\n className={classes.inputMargin}\n inputProps={{\n style: {\n height: 80,\n },\n classes: {\n notchedOutline: classes.inputBorder\n }\n }}\n />\n </Grid>\n <Grid item xs={12} style={{ paddingLeft: 8, paddingRight: 0 }}>\n <div className={classes.toolbar}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n >\n Create\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n );\n};\n\nexport default UserCreateDrawer;\n","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport {\n AutocompleteInput,\n BooleanInput,\n CheckboxGroupInput,\n RadioButtonGroupInput,\n TextInput,\n maxLength,\n required,\n useDataProvider,\n useNotify,\n useRefresh,\n} from \"react-admin\";\nimport { Form } from \"react-final-form\";\nimport {\n INACTIVE_ACTIVE_CHOICES,\n STATUS_INACTIVE_ACTIVE_CHOICES,\n YES_NO_CHOICES,\n} from \"../../framework/constants\";\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\nimport { Box, Switch } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n bottom: 0,\n marginBottom: 40,\n // width: 360\n // padding: 16\n },\n inputMargin: {\n marginTop: 5\n },\n gridItemPadding: {\n padding: '0 0 14px 8px !important'\n },\n inputBorder: {\n borderRadius: 8,\n borderColor: '#BDBDBD'\n },\n formWidth: {\n maxWidth: 360\n },\n mobileBtn: {\n [theme.breakpoints.down('xs')]: {\n width: \"40vw\",\n },\n }\n}));\n\nconst industries = [\n { id: \"Agriculture, Forestry and Fishing\", name: \"Agriculture, Forestry and Fishing\" },\n { id: \"Mining\", name: \"Mining\" },\n { id: \"Manufacturing\", name: \"Manufacturing\" },\n { id: \"Electricity, Gas, Water and Waste Services\", name: \"Electricity, Gas, Water and Waste Services\" },\n { id: \"Construction\", name: \"Construction\" },\n { id: \"Wholesale Trade\", name: \"Wholesale Trade\" },\n { id: \"Retail Trade\", name: \"Retail Trade\" },\n { id: \"Accommodation and Food Services\", name: \"Accommodation and Food Services\" },\n { id: \"Transport, Postal and Warehousing\", name: \"Transport, Postal and Warehousing\" },\n { id: \"Information Media and Telecommunications\", name: \"Information Media and Telecommunications\" },\n { id: \"Financial and Insurance Services\", name: \"Financial and Insurance Services\" },\n { id: \"Rental, Hiring and Real Estate Services\", name: \"Rental, Hiring and Real Estate Services\" },\n { id: \"Professional, Scientific and Technical Services\", name: \"Professional, Scientific and Technical Services\" },\n { id: \"Administrative and Support Services\", name: \"Administrative and Support Services\" },\n { id: \"Public Administration and Safety\", name: \"Public Administration and Safety\" },\n { id: \"Education and Training\", name: \"Education and Training\" },\n { id: \"Health Care and Social Assistance \", name: \"Health Care and Social Assistance \" },\n { id: \"Arts and Recreation Services\", name: \"Arts and Recreation Services\" },\n { id: \"Government\", name: \"Government\" },\n { id: \"Other Services\", name: \"Other Services\" },\n];\n\nexport const UserEditDrawer = ({ record, drawerOpen, onClose, handleSnackbarOpen }) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const [initialValues, setInitialValues] = React.useState();\n const [checked, setChecked] = React.useState(true);\n const classes = useStyles();\n\n const resource = \"User\";\n\n const onSubmit = (values, form) => {\n // console.log(values)\n const { isFirstTimeLogin, ...newValues } = values;\n dataProvider\n .update(resource, {\n id: record.id,\n data: {\n ...newValues,\n firstName: values.fullName,\n },\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"Customer updated successfully\", \"success\")\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n\n });\n };\n\n const validate = () => { };\n\n React.useEffect(() => {\n if (record && record.id)\n dataProvider.getOne(resource, { id: record.id }).then((response) => {\n setInitialValues(response.data);\n setChecked(!response.data.isDisabled);\n });\n }, [record]);\n\n const handleSwitchChange = (event, form) => {\n const confirmed = window.confirm(`Are you sure you want to ${event.target.checked ? 'enable' : 'disable'} this user?`);\n if (confirmed) {\n setChecked(event.target.checked);\n form.change(\"isDisabled\", !event.target.checked)\n }\n };\n\n\n return (\n <CustomDrawer\n drawerAnchor=\"right\"\n title=\"Edit Client\"\n drawerOpen={drawerOpen}\n onClose={onClose}\n >\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit, form, values }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Client Name\"\n source=\"companyName\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Location\"\n source=\"location\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <AutocompleteInput\n variant=\"outlined\"\n source=\"industry\"\n label=\"Industry\"\n choices={industries}\n className={classes.inputMargin}\n fullWidth\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <RadioButtonGroupInput\n label=\"Managed Services\"\n source=\"isManagedService\"\n row={true}\n choices={YES_NO_CHOICES}\n validate={[required()]}\n style={{ display: 'flex' }}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Admin Name\"\n source=\"fullName\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Email\"\n source=\"email\"\n type=\"email\"\n validate={[required(), maxLength(255)]}\n className={classes.inputMargin}\n inputProps={{\n classes: {\n notchedOutline: classes.inputBorder\n }\n }}\n />\n </Grid>\n <Grid item xs={12}>\n <RadioButtonGroupInput\n label=\"Status\"\n source=\"status\"\n row={true}\n choices={STATUS_INACTIVE_ACTIVE_CHOICES}\n validate={[required()]}\n />\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n {/* <CheckboxGroupInput \n label=\"\" \n fullWidth\n variant=\"outlined\" \n optionText=\"name\" \n source=\"isDisabled\" \n choices={[\n { id: false, name: 'Disable the user' },\n ]} \n /> */}\n {/* {console.log(\"isDisabled\", form)}\n {console.log(\"isDisabled\", values)}\n <ControlledSwitches\n isDisabled={values.isDisabled}\n /> */}\n <Box>\n\n <Switch\n checked={checked}\n onChange={(e) => handleSwitchChange(e, form)}\n />\n {values.isDisabled ? \"User disabled\" : \"User enabled\"}\n </Box>\n {/* <ConfirmableBooleanInput label=\"Disable the user\" source=\"isDisabled\" /> */}\n\n </Grid>\n <Grid item xs={12} className={classes.gridItemPadding}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Comments\"\n source=\"description\"\n multiline\n validate={[maxLength(255)]}\n className={classes.inputMargin}\n inputProps={{\n style: {\n height: 80,\n },\n classes: {\n notchedOutline: classes.inputBorder\n }\n }}\n />\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n className={classes.mobileBtn}\n >\n Update\n </Button>\n <Button\n type=\"button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"large\"\n onClick={() => onClose(false)}\n className={classes.mobileBtn}\n >\n Cancel\n </Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n );\n};\n\nexport default UserEditDrawer;\n","import { Box, Typography, useMediaQuery } from \"@material-ui/core\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport ExitToAppIcon from \"@material-ui/icons/ExitToApp\";\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\nimport makeStyles from \"@material-ui/styles/makeStyles\";\nimport FileDownloadOutlinedIcon from '@mui/icons-material/FileDownloadOutlined';\nimport Button from '@mui/material/Button';\nimport * as React from \"react\";\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteForeverIcon from '@mui/icons-material/DeleteForever';\nimport { cloneElement } from \"react\";\nimport {\n Datagrid, Filter, List,\n SearchInput,\n SelectField, TextField,\n TopToolbar,\n sanitizeListRestProps,\n useDataProvider, useListContext, useNotify,\n useRecordContext,\n useRefresh\n} from \"react-admin\";\nimport {\n INACTIVE_ACTIVE_CHOICES,\n YES_NO_CHOICES\n} from \"../../framework/constants\";\nimport palette from \"../../framework/theme/palette\";\nimport { Loading, currentDate, onFailureMessage, saveFileFromBinary } from \"../../utils/AppUtils\";\nimport { ManageChip, ManageChipForStatus } from \"../../utils/ManageChip\";\nimport PostPagination from \"../../utils/PostPagination\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport MoreActions from \"../customComponents/moreActions\";\nimport UserCreateDrawer from \"./customerCreateDrawer\";\nimport UserEditDrawer from \"./customerEditDrawer\";\nimport theme from \"../../framework/theme\";\n\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nimport { Alert, Snackbar } from \"@mui/material\";\n\nconst LightTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: theme.palette.common.white,\n color: \"rgba(0, 0, 0, 0.87)\",\n boxShadow: theme.shadows[1],\n fontSize: 11,\n },\n}))(Tooltip);\n\nconst useStyles = makeStyles((theme) => ({\n warningIcon: {\n color: theme.palette.customsColor.amber,\n },\n IconButtonOverride: {\n '&:hover': {\n // borderRadius: \"4px\",\n },\n margin: \"8px 6px\",\n padding: \"4px 3px\"\n }\n}));\n\nconst ListActions = (props) => {\n const {\n className,\n exporter,\n filters,\n maxResults,\n handleCreateDrawerOpen,\n ...rest\n } = props;\n const {\n currentSort,\n resource,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext();\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const classes = useStyles();\n const { themeObject, setTheme, setContextUser } = React.useContext(ThemeContext)\n const handleExportBtnClick = () => {\n\n dataProvider\n .postRequest(\"ExportClients\", {\n queryType: \"retrieve\",\n }).then(response => {\n saveFileFromBinary(response.data, \"Clients\" + currentDate)\n })\n .catch(error => {\n handleSnackbarOpen(\"No data found to export\", \"warning\")\n });\n\n }\n\n const CreateUserBtn = () => (\n <Button variant=\"contained\" onClick={() => handleCreateDrawerOpen(true)}\n sx={{\n width: isSmall ? \"0px\" : \"210px\",\n // backgroundColor: theme.palette[`${clientTheme.name}`].secondary,\n backgroundColor: themeObject.palette.primary.main,\n boxShadow: \"0\",\n height: '41px',\n paddingX: '0',\n \"&:hover\": {\n backgroundColor: themeObject.palette.primary.buttonContrast,\n color: \"white\",\n cursor: 'pointer',\n boxShadow: \"0\"\n },\n }}>\n {\n isSmall ? <Box sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: 'rgba(255,255,255,0.2)',\n fontSize: \"16px\",\n width: \"100%\",\n height: '41px',\n }}>\n <AddIcon style={{ marginLeft: '-4px' }} />\n </Box> : <Box style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\"\n }}>\n <Box sx={{\n textAlign: \"center\",\n width: '100%'\n }}>\n {isSmall ? \"\" : \"Add Client\"}\n </Box>\n <Box sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: 'rgba(255,255,255,0.2)',\n fontSize: \"16px\",\n width: \"41px\",\n height: '41px',\n }}>\n <AddIcon style={{ marginLeft: '-4px' }} />\n </Box>\n </Box>\n }\n\n\n </Button>\n );\n\n return (\n <TopToolbar\n {...sanitizeListRestProps(rest)}\n >\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n {/* <Button style={{ marginRight: 8 }} label=\"Export\" variant=\"contained\" color=\"primary\" onClick={handleExportBtnClick}>{<DownloadIcon fontSize='small' />}</Button> */}\n <Button variant=\"contained\" onClick={handleExportBtnClick}\n\n sx={{\n // fontSize: \"12px\",\n // fontWeight: \"400\",\n width: isSmall ? \"0px\" : \"150px\",\n marginRight: \"8px\",\n backgroundColor: themeObject.palette.primary.main,\n // backgroundColor: theme.palette[`${clientTheme.name}`].pink,\n boxShadow: \"0\",\n height: '41px',\n paddingX: '0',\n \"&:hover\": {\n backgroundColor: themeObject.palette.primary.buttonContrast,\n color: \"white\",\n cursor: 'pointer',\n boxShadow: \"0\"\n },\n }}>\n {isSmall ? <Box sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: 'rgba(255,255,255,0.2)',\n fontSize: \"16px\",\n width: \"100%\",\n height: '41px',\n }}>\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box> : <Box style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\"\n }}>\n <Box sx={{\n textAlign: \"center\",\n width: '100%'\n }}>\n {isSmall ? \"\" : \"Export\"}\n </Box>\n <Box sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: 'rgba(255,255,255,0.2)',\n fontSize: \"16px\",\n width: \"41px\",\n height: '41px',\n }}>\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n </Box>}\n </Button>\n <CreateUserBtn />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </TopToolbar>\n );\n};\n\nconst UserFilter = (props) => (\n <Filter {...props}>\n <SearchInput\n variant=\"outlined\"\n source=\"q\"\n alwaysOn\n />\n </Filter>\n);\n\nconst Empty = ({ handleCreateDrawerOpen }) => (\n <Box textAlign=\"center\" m={1} p={1}>\n <Typography variant=\"h4\" paragraph>\n No Clients yet.\n </Typography>\n <Typography variant=\"body1\">Do you want to add one?</Typography>\n <Box mt={1}>\n <Button\n label=\"Create Client\"\n variant=\"contained\"\n children={<AddIcon />}\n onClick={() => handleCreateDrawerOpen(true)}\n />\n </Box>\n </Box>\n);\n\n\n\nexport const UserList = (props) => {\n const classes = useStyles();\n const [createDrawerOpen, setCreateDrawerOpen] = React.useState();\n const [editDrawerOpen, setEditDrawerOpen] = React.useState();\n const [record, setRecord] = React.useState();\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const {setContextUser} = React.useContext(ThemeContext)\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n const refresh = useRefresh();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n\n const handleCreateDrawerOpen = (open) => {\n setCreateDrawerOpen(open);\n };\n\n const handleCreateDrawerClose = () => {\n setCreateDrawerOpen(false);\n };\n\n const handleEditDrawerOpen = (open) => {\n setEditDrawerOpen(open);\n };\n\n const handleEditDrawerClose = (open) => {\n setRecord(null);\n setEditDrawerOpen(open);\n };\n\n const rowActionsChoices = [\n { id: \"edit\", name: \"Edit\", resource: \"Customer\", action: [\"edit\"] },\n { id: \"delete\", name: \"Delete\", resource: \"Customer\", action: [\"Delete\"] },\n ];\n\n const handleMoreActionsClick = ({ action, record }) => {\n switch (action) {\n case \"edit\":\n setRecord(record);\n handleEditDrawerOpen(true);\n break;\n case \"delete\":\n const proceed = window.confirm('You are deleting the entry. Are you sure?');\n if (proceed) {\n dataProvider\n .delete(\"User\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"User deleted successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n break;\n }\n };\n const handleEditClient = (record) => {\n setRecord(record);\n handleEditDrawerOpen(true);\n }\n const handleDeleteClient = (record) => {\n const proceed = window.confirm('You are deleting the entry. Are you sure?');\n if (proceed) {\n dataProvider\n .delete(\"User\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"User deleted successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n };\n }\n const InfoField = ({ record, source }) => {\n const value = record ? record[source] : null;\n return value ? (\n <LightTooltip title={value} placement=\"left-start\">\n <IconButton aria-label=\"info\" className={classes.IconButtonOverride} size=\"small\">\n <InfoOutlinedIcon style={{ color: palette.customsColor.main }} />\n </IconButton>\n </LightTooltip>\n ) : null;\n };\n\n const ImpersonateUser = ({ record }) => {\n const handleClick = () => {\n dataProvider.getOne(\"User\", { id: record.id }).then((response) => {\n TokenStorage.storeImpersonateUserDetails(\n JSON.stringify({\n ...response.data,\n isImpersonating: true,\n })\n );\n window.location.href = \"/\";\n // console.log('before loading...');\n // setTimeout(function () {\n // window.location.reload(false);\n // setContextUser({...response.data,\n // isImpersonating: true})\n console.log('reloading...');\n // }, 10);\n });\n };\n\n return (\n <LightTooltip title=\"Go to Client Site\" placement=\"left-start\">\n <IconButton aria-label=\"impersonate user\" onClick={handleClick} className={classes.IconButtonOverride} size=\"small\">\n <ExitToAppIcon className={classes.warningIcon} />\n </IconButton>\n </LightTooltip>\n );\n };\n\n const ActionButtons = ({ record }) => {\n return (\n <Box display=\"flex\" style={{ float: \"right\" }}>\n <InfoField record={record} label=\"\" source=\"description\" />\n {record && record.status && record.isManagedService && (\n <ImpersonateUser record={record} label=\"\" />\n )}\n <MoreActions\n bypassUser={isSuperAdmin}\n permissions={props.permissions}\n record={record}\n choices={rowActionsChoices}\n handleClose={() => console.log(\"closing\")}\n handleClick={handleMoreActionsClick}\n />\n </Box>\n );\n };\n\n const ActionButtonSmallScreen = () => {\n const records = useRecordContext();\n return (\n <Box style={{ display: \"flex\", flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\" }}>\n <InfoField record={records} label=\"\" source=\"description\" />\n {records && records.status && records.isManagedService && (\n <ImpersonateUser record={records} label=\"\" />\n )}\n <IconButton aria-label=\"edit\" className={classes.IconButtonOverride} size=\"small\">\n <EditIcon size=\"small\" style={{ color: \"#00A0D9\", cursor: \"pointer\", margin: '0 5px', fontSize: \"20px\" }} onClick={() => handleEditClient(records)} />\n </IconButton>\n <IconButton aria-label=\"delete\" className={classes.IconButtonOverride} size=\"small\">\n <DeleteForeverIcon size=\"small\" style={{ color: \"#de0937\", cursor: \"pointer\", fontSize: \"20px\" }} onClick={() => handleDeleteClient(records)} />\n </IconButton>\n </Box>\n );\n };\n\n return (\n <React.Suspense fallback={<Loading />}>\n <React.Fragment>\n <List\n {...props}\n title={<span style={{ textTransform: 'uppercase' }}>Client</span>}\n hasCreate={false}\n empty={<Empty handleCreateDrawerOpen={handleCreateDrawerOpen} />}\n actions={\n <ListActions handleCreateDrawerOpen={handleCreateDrawerOpen} />\n }\n filters={<UserFilter />}\n bulkActionButtons={false}\n pagination={<PostPagination />}\n >\n {isSmall ? (\n <Datagrid>\n <Box display=\"flex\" style={{ flexDirection: 'column', width: '100%' }}>\n\n <TextField source=\"fullName\" sortable={true} />\n {/* <TextField label=\"INDUSTRY\" source=\"industry\" sortable={false} /> */}\n {/* <TextField label=\"LOCATION\" source=\"location\" sortable={false} /> */}\n <TextField label=\"EMAIL\" color=\"secondary\" source=\"email\" sortable={false} />\n <ActionButtonSmallScreen label=\"\" sortable={false} />\n </Box>\n\n </Datagrid>\n ) : (\n <Datagrid>\n <TextField\n label=\"CLIENT NAME\"\n source=\"companyName\"\n sortable={true}\n // style={{textAlign: 'center'}}\n />\n <TextField\n label=\"ADMIN NAME\"\n source=\"fullName\"\n sortable={true}\n />\n <TextField label=\"EMAIL\" source=\"email\" sortable={false} />\n <TextField label=\"LOCATION\" source=\"location\" sortable={false} />\n <TextField label=\"INDUSTRY\" source=\"industry\" sortable={false} />\n <SelectField\n label=\"MANAGED SERVICE\"\n source=\"isManagedService\"\n choices={YES_NO_CHOICES}\n optionText={<ManageChipForStatus />}\n sortable={false}\n />\n <SelectField\n label=\"STATUS\"\n source=\"status\"\n choices={INACTIVE_ACTIVE_CHOICES}\n // optionText={<ChipField source=\"name\" />}\n optionText={<ManageChip inactiveChip={true} />}\n sortable={false}\n />\n <ActionButtons label=\"\" sortable={false} />\n </Datagrid>\n )}\n </List>\n <UserCreateDrawer\n record={record}\n drawerOpen={createDrawerOpen}\n onClose={handleCreateDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <UserEditDrawer\n record={record}\n drawerOpen={editDrawerOpen}\n onClose={handleEditDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </React.Fragment>\n </React.Suspense>\n\n );\n};\n\nexport default UserList;\n","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useEffect, useState } from \"react\";\nimport { AutocompleteArrayInput, AutocompleteInput, ReferenceArrayInput, ReferenceInput, TextInput, maxLength, required, useDataProvider, useNotify, useRefresh } from \"react-admin\";\nimport { Form } from 'react-final-form';\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n bottom: 0,\n marginBottom: 40,\n // width: 360\n // padding: 16\n },\n formWidth: {\n maxWidth: 360\n },\n mobileBtn: {\n [theme.breakpoints.down('xs')]: {\n width: \"40vw\",\n },\n },\n}));\n\nexport const UserCreateDrawer = ({ initialValues, drawerOpen, onClose,handleSnackbarOpen}) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const classes = useStyles();\n\n //show button\n const [showButton, setShowButton] = useState(true);\n const [firstName, setFirstName] = useState(true);\n const [lastName, setLastName] = useState(true);\n const [email, setEmail] = useState(true);\n const [bU, setBu] = useState(true);\n const [roleName, setRoleName] = useState(true);\n const handleFirstName = (e) => {\n const inputField = e.target.value;\n if (inputField !== '') {\n setFirstName(false)\n }\n else {\n setFirstName(true)\n }\n };\n const handleLastName = (e) => {\n const inputField = e.target.value;\n if (inputField !== '') {\n setLastName(false)\n }\n else {\n setLastName(true)\n }\n };\n const handleEmail = (e) => {\n const inputField = e.target.value;\n if (inputField !== '') {\n setEmail(false)\n }\n else {\n setEmail(true)\n }\n };\n const handleBu = (e) => {\n if (e !== 0) {\n setBu(false)\n }\n else {\n setBu(true)\n }\n };\n const handleRole = (e) => {\n if (e.length !== 0) {\n setRoleName(false)\n }\n else {\n setRoleName(true)\n }\n };\n useEffect(() => {\n if (roleName === false && firstName === false && lastName === false && email === false && bU === false) {\n setShowButton(false)\n }\n else {\n setShowButton(true)\n }\n }, [roleName, firstName, lastName, email, bU])\n\n const resource = \"User\"\n const onSubmit = (values, form) => {\n dataProvider\n .create(resource, {\n data: {\n ...values,\n fullName: `${values.surname} ${values.firstName}`\n }\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"User added successfully\",\"success\");\n refresh()\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n\n const validate = () => {\n\n }\n\n return (\n <CustomDrawer drawerAnchor=\"right\" title=\"Create User\" drawerOpen={drawerOpen} onClose={onClose}>\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextInput\n onChange={(e) => handleFirstName(e)}\n fullWidth\n variant=\"outlined\"\n label=\"First Name\"\n source=\"firstName\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n onChange={(e) => handleLastName(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Last Name\"\n source=\"surname\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n onChange={(e) => handleEmail(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Email\"\n source=\"email\"\n type=\"email\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <ReferenceInput\n onChange={(e) => handleBu(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n validate={[required()]}>\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n <Grid item xs={12}>\n <ReferenceArrayInput\n onChange={(e) => handleRole(e)}\n fullWidth\n variant=\"outlined\"\n label=\"Role\"\n source=\"roles\"\n reference=\"Role\"\n validate={[required()]}>\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" size=\"large\" className={classes.mobileBtn} disabled={!showButton ? false : true} >Submit</Button>\n <Button type=\"button\" variant=\"outlined\" color=\"primary\" size=\"large\" onClick={() => onClose(false)} className={classes.mobileBtn} >Cancel</Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n )\n}\n\nexport default UserCreateDrawer;","import Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport _ from 'lodash';\nimport React from \"react\";\nimport {\n AutocompleteArrayInput,\n AutocompleteInput,\n ReferenceArrayInput,\n ReferenceInput,\n TextInput,\n maxLength,\n required,\n useDataProvider, useNotify,\n useRefresh\n} from \"react-admin\";\nimport { Form } from 'react-final-form';\nimport { onFailureMessage } from \"../../utils/AppUtils\";\nimport CustomDrawer from \"../customComponents/customDrawer\";\n\nconst useStyles = makeStyles({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n bottom: 0,\n marginBottom: 40,\n width: 360\n // padding: 16\n },\n formWidth: {\n maxWidth: 350\n }\n});\n\nexport const UserEditDrawer = ({ record, drawerOpen, onClose,handleSnackbarOpen}) => {\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const [initialValues, setInitialValues] = React.useState();\n const classes = useStyles();\n\n const resource = \"User\"\n const onSubmit = (values, form) => {\n dataProvider\n .update(resource, {\n id: record.id,\n data: { ...values, status: true }\n })\n .then((response) => {\n form.initialize({});\n form.restart();\n onClose(false);\n handleSnackbarOpen(\"User updated successfully\",\"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n\n const validate = () => {\n\n }\n\n React.useEffect(() => {\n if (record && record.id)\n dataProvider.getOne(resource, { id: record.id }).then(response => {\n setInitialValues({\n ...response.data,\n businessUnitId: response.data.businessUnit ? response.data.businessUnit.id : null,\n roles: _.map(response.data.roles, 'id')\n })\n })\n }, [record])\n\n return (\n <CustomDrawer drawerAnchor=\"right\" title=\"Edit User\" drawerOpen={drawerOpen} onClose={onClose}>\n <Form\n onSubmit={onSubmit}\n validate={validate}\n initialValues={initialValues}\n render={({ handleSubmit }) => (\n <form className={classes.formWidth} onSubmit={handleSubmit}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"First Name\"\n source=\"firstName\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Last Name\"\n source=\"surname\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n fullWidth\n variant=\"outlined\"\n label=\"Email\"\n source=\"email\"\n type=\"email\"\n validate={[required(), maxLength(255)]}\n />\n </Grid>\n <Grid item xs={12}>\n <ReferenceInput\n fullWidth\n variant=\"outlined\"\n label=\"Business Unit\"\n source=\"businessUnitId\"\n reference=\"BusinessUnit\"\n validate={[required()]}>\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </Grid>\n <Grid item xs={12}>\n <ReferenceArrayInput\n fullWidth\n variant=\"outlined\"\n label=\"Role\"\n source=\"roles\"\n reference=\"Role\"\n validate={[required()]}>\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n </Grid>\n <Grid item xs={12}>\n <div className={classes.toolbar}>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" size=\"large\" >Submit</Button>\n <Button type=\"button\" variant=\"outlined\" color=\"primary\" size=\"large\" onClick={() => onClose(false)} >Cancel</Button>\n </div>\n </Grid>\n </Grid>\n </form>\n )}\n />\n </CustomDrawer>\n )\n}\n\nexport default UserEditDrawer;","import { useMediaQuery } from \"@material-ui/core\";\nimport Box from \"@material-ui/core/Box\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport FileDownloadOutlinedIcon from \"@mui/icons-material/FileDownloadOutlined\";\nimport { Alert, Button, IconButton, Snackbar } from \"@mui/material\";\n\nimport _ from \"lodash\";\nimport PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport { cloneElement } from \"react\";\nimport {\n Datagrid,\n DateField,\n Filter,\n FunctionField,\n List,\n SearchInput,\n TextField,\n TopToolbar,\n sanitizeListRestProps,\n useDataProvider,\n useListContext,\n useNotify,\n usePermissions,\n useRecordContext,\n useRefresh,\n} from \"react-admin\";\nimport {\n currentDate,\n impersonatedURL,\n onFailureMessage,\n saveFileFromBinary,\n} from \"../../utils/AppUtils\";\nimport ButtonWithPermission from \"../../utils/ButtonWithPermission\";\nimport PostPagination from \"../../utils/PostPagination\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport WithPermission from \"../../utils/WithPermission\";\nimport MoreActions from \"../customComponents/moreActions\";\nimport RoleList from \"../role/roleList\";\nimport UserCreateDrawer from \"./userCreateDrawer\";\nimport UserEditDrawer from \"./userEditDrawer\";\nimport DeleteForeverIcon from \"@mui/icons-material/DeleteForever\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n aria-labelledby={`simple-tab-${index}`}\n {...other}\n >\n {value === index && <Box>{children}</Box>}\n </div>\n );\n}\n\nTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n};\n\nfunction a11yProps(index) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`,\n };\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n // backgroundColor: theme.palette.background.paper,\n },\n headerCell: {\n [theme.breakpoints.down(\"xs\")]: {\n backgroundColor: \"blue\",\n display: \"none\",\n },\n },\n}));\nconst StyledTabs = withStyles({\n root: {\n maxWidth: \"85vw\",\n // marginBottom: \"15px\",\n // backgroundColor: \"#fff\"\n // borderBottom: '2px solid #ccc', // Border for all tabs\n },\n indicator: {\n display: \"none\",\n // justifyContent: \"center\",\n // backgroundColor: \"transparent\",\n // height: 5,\n // \"& > span\": {\n // maxWidth: 80,\n // width: \"100%\",\n // backgroundColor: \"#EFF2F7\"\n // },\n },\n \"& .Mui-selected\": {\n borderBottom: \"10px solid #f0f\", // Remove border for the active tab\n },\n})((props) => <Tabs {...props} TabIndicatorProps={{ children: <span /> }} />);\n\nconst StyledTab = withStyles((theme) => ({\n root: {\n textTransform: \"none\",\n color: \"#000\",\n fontWeight: theme.typography.fontWeightRegular,\n // fontSize: theme.typography.pxToRem(15),\n fontSize: \"14px\",\n padding: \"0 20px\",\n \"&:focus\": {\n opacity: 1,\n },\n minWidth: 97,\n // paddingLeft: 0,\n // paddingRight: 0,\n borderBottom: \"2px solid #cdd0d1\",\n \"&:not($selected)\": {\n // borderBottomColor: '#ccc', // Add border for unselected tabs\n },\n \"&$selected\": {\n // borderTop: \"2px solid #0Ab39C\",\n // marginBottom: '2px',\n borderTopRightRadius: \"5px\",\n borderTopLeftRadius: \"5px\",\n // paddingBottom: \"-10px\",\n fontWeight: \"600\",\n borderBottom: \"none\",\n // borderTop: \"2px solid #cdd0d1\",\n // borderRight: \"2px solid #cdd0d1\",\n // borderLeft: \"2px solid #cdd0d1\",\n // backgroundColor: \"#EFF2F7\", // Change this to the color you desire\n backgroundColor: \"#FFFFFF\", // Change this to the color you desire\n color: \"#000\", // Change this to the color you desire for the text\n },\n },\n selected: {},\n}))((props) => <Tab disableRipple {...props} />);\nexport default function UserAndRoleTabs(props) {\n const classes = useStyles();\n const [value, setValue] = React.useState(0);\n const user = TokenStorage.getUserDetails();\n const { isImpersonating } = user ? user : {};\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n impersonatedURL(isImpersonating, \"#/user?impersonated\");\n\n return (\n <div className={classes.root}>\n <StyledTabs\n value={value}\n onChange={handleChange}\n aria-label=\"simple tabs example\"\n >\n <StyledTab label=\"Users\" {...a11yProps(0)} />\n <StyledTab label=\"Roles\" {...a11yProps(1)} />\n </StyledTabs>\n <TabPanel value={value} index={0}>\n <UserList {...props} />\n </TabPanel>\n <TabPanel value={value} index={1}>\n <RoleList resource=\"Role\" basePath=\"/\" />\n </TabPanel>\n </div>\n );\n}\n\nconst ListActions = (props) => {\n const {\n className,\n exporter,\n filters,\n isCustomerAdmin,\n maxResults,\n handleCreateDrawerOpen,\n ...rest\n } = props;\n const {\n currentSort,\n resource,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const { themeObject, setTheme } = React.useContext(ThemeContext)\n const handleExportBtnClick = () => {\n dataProvider\n .postRequest(\"ExportUsers\", {\n queryType: \"retrieve\",\n })\n .then((response) => {\n saveFileFromBinary(response.data, \"Users\" + currentDate);\n })\n .catch((error) => {\n notify(\"No data found to export\", \"warning\");\n });\n };\n\n return (\n <TopToolbar {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n\n <Button\n variant=\"contained\"\n onClick={handleExportBtnClick}\n sx={{\n width: isSmall ? \"0px\" : \"150px\",\n marginRight: \"8px\",\n backgroundColor: themeObject.palette.primary.main,\n boxShadow: \"0\",\n height: \"41px\",\n paddingX: \"0\",\n \"&:hover\": {\n backgroundColor: themeObject.palette.primary.buttonContrast,\n color: \"white\",\n cursor: \"pointer\",\n boxShadow: \"0\",\n },\n }}\n >\n {isSmall ? (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"100%\",\n height: \"41px\",\n }}\n >\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n ) : (\n <Box\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\",\n }}\n >\n <Box\n sx={{\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {isSmall ? \"\" : \"Export\"}\n </Box>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n paddingLeft: \"2px\",\n borderBottomRightRadius: \"5px\",\n borderTopRightRadius: \"5px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n fontSize: \"16px\",\n width: \"41px\",\n height: \"41px\",\n }}\n >\n <FileDownloadOutlinedIcon style={{ marginLeft: \"-4px\" }} />\n </Box>\n </Box>\n )}\n </Button>\n <CreateUserBtn {...props} />\n </TopToolbar>\n );\n};\n\nconst UserFilter = (props) => (\n <Filter {...props}>\n <SearchInput variant=\"outlined\" source=\"q\" alwaysOn />\n </Filter>\n);\n\nconst CreateUserBtn = (props) => {\n const { isCustomerAdmin, permissions, isSuperAdmin, handleCreateDrawerOpen } =\n props;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const classes = useStyles();\n return (\n <ButtonWithPermission\n permissions={permissions}\n resource=\"User\"\n bypassUser={isCustomerAdmin}\n action={[\"create\"]}\n variant=\"contained\"\n onClick={() => handleCreateDrawerOpen(true)}\n endIcon={<AddIcon />}\n >\n {\" \"}\n {isSmall ? \"\" : \"Create User\"}\n </ButtonWithPermission>\n );\n};\n\nconst Empty = (props) => {\n const { basePath, resource, isCustomerAdmin } = useListContext();\n return (\n <Box textAlign=\"center\" m={1}>\n <Typography variant=\"h4\" paragraph>\n No Users yet.\n </Typography>\n <Typography variant=\"body1\">Do you want to add one?</Typography>\n <Box mt={1}>\n <CreateUserBtn {...props} />\n </Box>\n </Box>\n );\n};\n\nexport const UserList = (props) => {\n const [createDrawerOpen, setCreateDrawerOpen] = React.useState();\n const [editDrawerOpen, setEditDrawerOpen] = React.useState();\n const [record, setRecord] = React.useState();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const refresh = useRefresh();\n const { loading: loadingPermissions, permissions } = usePermissions();\n\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({ message: name, type: type })\n setSnackbarOpen(true);\n };\n\n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n\n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n\n const { vertical, horizontal } = anchorOrigin;\n\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const classes = useStyles();\n const handleCreateDrawerOpen = (open) => {\n setCreateDrawerOpen(open);\n };\n\n const handleCreateDrawerClose = () => {\n setCreateDrawerOpen(false);\n };\n\n const handleEditDrawerOpen = (open) => {\n setEditDrawerOpen(open);\n };\n\n const handleEditDrawerClose = (open) => {\n setRecord(null);\n setEditDrawerOpen(open);\n };\n const handleEditUser = (record) => {\n setRecord(record);\n handleEditDrawerOpen(true);\n };\n const handleDeleteUser = (record) => {\n const proceed = window.confirm(\"You are deleting the entry. Are you sure?\");\n if (proceed) {\n dataProvider\n .delete(\"User\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"User deleted successfully\", \"success\")\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\")\n });\n }\n };\n const rowActionsChoices = [\n { id: \"edit\", name: \"Edit\", resource: \"User\", action: [\"edit\"] },\n { id: \"delete\", name: \"Delete\", resource: \"User\", action: [\"delete\"] },\n ];\n\n const handleMoreActionsClick = ({ action, record }) => {\n switch (action) {\n case \"edit\":\n setRecord(record);\n handleEditDrawerOpen(true);\n break;\n case \"delete\":\n const proceed = window.confirm(\n \"You are deleting the entry. Are you sure?\"\n );\n if (proceed) {\n dataProvider\n .delete(\"User\", { id: record.id })\n .then((response) => {\n handleSnackbarOpen(\"User deleted successfully\", \"success\");\n refresh();\n })\n .catch((error) => {\n const error_messages = onFailureMessage(error);\n handleSnackbarOpen(error_messages, \"error\");\n });\n }\n break;\n }\n };\n const ActionButtonSM = () => {\n const records = useRecordContext();\n return (\n <Box\n sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}\n >\n <IconButton\n aria-label=\"edit\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <EditIcon\n size=\"small\"\n style={{\n color: \"#00A0D9\",\n cursor: \"pointer\",\n margin: \"0 5px\",\n fontSize: \"20px\",\n }}\n onClick={() => handleEditUser(records)}\n />\n </IconButton>\n <IconButton\n aria-label=\"delete\"\n className={classes.IconButtonOverride}\n size=\"small\"\n >\n <DeleteForeverIcon\n size=\"small\"\n style={{ color: \"#de0937\", cursor: \"pointer\", fontSize: \"20px\" }}\n onClick={() => handleDeleteUser(records)}\n />\n </IconButton>\n </Box>\n );\n };\n // console.log(permissions);\n return (\n <WithPermission\n resource=\"User\"\n bypassUser={isCustomerAdmin}\n permissions={permissions}\n action={[\"view\"]}\n {...props}\n >\n <List\n title={<span style={{ textTransform: \"uppercase\" }}>User</span>}\n hasCreate={false}\n empty={\n <Empty\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n actions={\n <ListActions\n isCustomerAdmin={isCustomerAdmin}\n isSuperAdmin={isSuperAdmin}\n permissions={props.permissions}\n handleCreateDrawerOpen={handleCreateDrawerOpen}\n />\n }\n filters={<UserFilter />}\n bulkActionButtons={false}\n pagination={<PostPagination />}\n {...props}\n >\n {isSmall ? (\n // <SimpleList\n // primaryText={record => `${record.firstName} ${record.surname}`}\n // secondaryText={record => record.email}\n // tertiaryText={record => record && record.roles ? _.map(record.roles, 'name').join(\",\") : null}\n // linkType={false}\n\n // />\n <Datagrid classes={{ headerCell: classes.headerCell }}>\n <Box\n display=\"flex\"\n style={{ flexDirection: \"column\", width: \"100%\" }}\n >\n <Box>\n {/* <TextField source=\"firstName\" sortable={true} />{\" \"}\n <TextField source=\"surname\" sortable={true} /> */}\n <FunctionField\n label=\"Full Name\"\n render={(record) => `${record.firstName} ${record.surname}`}\n sortable={true}\n />\n <br />\n <TextField\n style={{ wordWrap: \"break-word\" }}\n color=\"secondary\"\n source=\"email\"\n sortable={false}\n />\n <br />\n <FunctionField\n render={(record) =>\n record && record.roles\n ? _.map(record.roles, \"name\").join(\",\")\n : null\n }\n source=\"roles.name\"\n sortable={false}\n />\n <br />\n <TextField\n color=\"secondary\"\n source=\"businessUnit.name\"\n sortable={false}\n />\n <ActionButtonSM />\n </Box>\n </Box>\n {/* <DateField label=\"Last login\" source=\"lastLoggedInAt\" showTime={false} sortable={false} /> */}\n </Datagrid>\n ) : (\n <Datagrid classes={{ headerCell: classes.headerCell }}>\n <TextField label=\"First Name\" source=\"firstName\" sortable={true} />\n <TextField label=\"Last Name\" source=\"surname\" sortable={true} />\n <TextField label=\"Email\" source=\"email\" sortable={false} />\n <TextField\n label=\"Business Unit\"\n source=\"businessUnit.name\"\n sortable={false}\n />\n <FunctionField\n label=\"Role\"\n render={(record) =>\n record && record.roles\n ? _.map(record.roles, \"name\").join(\",\")\n : null\n }\n source=\"roles.name\"\n sortable={false}\n />\n <DateField\n label=\"Last login\"\n source=\"lastLoggedInAt\"\n showTime={false}\n sortable={false}\n />\n <MoreActions\n bypassUser={isCustomerAdmin}\n permissions={props.permissions}\n choices={rowActionsChoices}\n handleClose={() => console.log(\"closing\")}\n handleClick={handleMoreActionsClick}\n sortable={false}\n />\n </Datagrid>\n )}\n </List>\n <UserCreateDrawer\n record={record}\n drawerOpen={createDrawerOpen}\n onClose={handleCreateDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <UserEditDrawer\n record={record}\n drawerOpen={editDrawerOpen}\n onClose={handleEditDrawerClose}\n handleSnackbarOpen={handleSnackbarOpen}\n />\n <Snackbar open={snackbarOpen} autoHideDuration={6000} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity=\"success\"\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n Project Forecast updated!\n </Alert>\n </Snackbar>\n </WithPermission>\n );\n};\n\n// export default UserList;\n","// import AccountBalanceIcon from '@material-ui/icons/AccountBalance';\n// import ErrorCard from '../../utils/ErrorCard';\n// import { TokenStorage } from \"../../utils/TokenStorage\";\nimport CustomerList from '../customer/customerList';\nimport UserList from './userList';\n\n\n// const UserManagement = (props) => {\n// const user = TokenStorage.getUserDetails();\n// const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n// const isNonAdminUser = !user.isSuperAdmin && !user.isCustomerAdmin ? true : false;\n// console.log(props);\n// console.log(isNonAdminUser);\n// if (isSuperAdmin) {\n// return <CustomerList {...props} />\n// }\n\n// if (isCustomerAdmin) {\n// return <UserList {...props} />\n// }\n// if (isNonAdminUser) {\n// return <UserList {...props} />\n// }\n\n// return <ErrorCard message=\"You do not have permission to this page\" align=\"center\" />\n// }\n\n// export default {\n// list: UserManagement,\n// icon: AccountBalanceIcon,\n// };\n\nimport AccountBalanceIcon from '@material-ui/icons/AccountBalance';\nimport { Suspense, lazy } from 'react';\n// import { Loading } from '../../utils/AppUtils';\nimport ErrorCard from '../../utils/ErrorCard';\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport { Loading } from 'react-admin';\n// import LoadingFallback from './LoadingFallback'; // Your loading fallback component\n\n// Lazy-loaded components\n// const CustomerList = lazy(() => import('../customer/customerList'));\n// const UserList = lazy(() => import('./userList'));\n\n\nconst UserManagement = (props) => {\n const user = TokenStorage.getUserDetails();\n const { isSuperAdmin, isCustomerAdmin } = user ? user : {};\n const isNonAdminUser = !user.isSuperAdmin && !user.isCustomerAdmin ? true : false;\n\n if (isSuperAdmin) {\n return (\n // <Suspense fallback={<Loading />}>\n <CustomerList {...props} />\n // </Suspense>\n );\n }\n\n if (isCustomerAdmin || isNonAdminUser) {\n return (\n // <Suspense fallback={<Loading />}>\n <UserList {...props} />\n // </Suspense>\n );\n }\n\n return <ErrorCard message=\"You do not have permission for this page\" align=\"center\" />;\n}\n\nexport default {\n list: UserManagement,\n icon: AccountBalanceIcon,\n};\n","// import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Admin, Loading, Resource } from 'react-admin';\nimport authProvider from \"./framework/authProvider\";\nimport customRoutes from './framework/customRoutes';\nimport dashboard from './framework/dashboard';\nimport dataProvider from './framework/dataProvider';\nimport layout from \"./framework/layout\";\nimport Skeleton from '@material-ui/lab/Skeleton';\n// import { Loading } from './utils/AppUtils';\nimport NotFound from './utils/NotFound';\nimport businessUnit from \"./views/businessUnit\";\nimport Login from './views/login';\nimport permission from './views/permission';\nimport project from \"./views/project\";\nimport role from './views/role';\nimport user from \"./views/user\";\nimport { ThemeProvider, ThemeContext } from './framework/theme/themeContext';\nimport { themes } from './framework/theme';\nconst App = () => {\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const handleLoad = () => {\n setLoading(false);\n };\n\n window.addEventListener('load', handleLoad);\n\n return () => {\n window.removeEventListener('load', handleLoad);\n };\n }, []);\n\n if (loading) {\n return <div style={{ display: 'flex', backgroundColor: \"lightgrey\"}}>\n <div style={{borderRight: '6px solid lightgrey'}}>\n <Skeleton variant=\"rect\" width={180} height={'100vh'} />\n </div>\n <div>\n <Skeleton variant=\"text\" width={'100vw'} height={40} />\n <Skeleton variant=\"rect\" width={'100vw'} height={'100vh'} />\n </div>\n </div>;\n }\n\n return (\n <>\n {\n !loading &&\n <ThemeProvider>\n <ThemeContext.Consumer>\n {({ theme, setTheme, themeObject }) => (\n <Admin loginPage={Login} catchAll={NotFound} customRoutes={customRoutes} dataProvider={dataProvider} dashboard={dashboard} authProvider={authProvider} theme={themeObject} layout={layout}>\n <Resource name=\"BusinessUnit\" {...businessUnit} />\n <Resource name=\"User\" {...user} />\n <Resource name=\"Role\" {...role} />\n <Resource name=\"Permission\" {...permission} />\n <Resource name=\"MasterData\" />\n <Resource name=\"MasterDataValue\" />\n <Resource name=\"Project\" {...project} />\n <Resource name=\"ProjectForCA\" {...project} />\n </Admin>\n )}\n </ThemeContext.Consumer>\n </ThemeProvider>\n }\n\n </>\n\n );\n}\n\nexport default App;","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport TagManager from 'react-gtm-module'\nimport { REACT_APP_GTM_ID } from './framework/constants';\n\nconst tagManagerArgs = {\n gtmId: REACT_APP_GTM_ID\n}\n\nTagManager.initialize(tagManagerArgs)\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root'),\n document.getElementById('app')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","import { hsv2rgb, rgbString } from '@kurkle/color';\nimport { Box, CircularProgress, IconButton, Typography } from '@material-ui/core';\nimport { styled } from '@material-ui/styles';\nimport { saveAs } from \"file-saver\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport { TextInput, } from \"react-admin\";\nimport { TokenStorage } from \"./TokenStorage\";\nvar FileSaver = require(\"file-saver\");\n\n/**\n *\n * @param str\n * @returns {void | string | *}\n */\nexport const toTitleCase = (str) =>\n str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n\n/**\n *Saves the file to local machine with file extension provided by the content_type\n *\n * @param disposition returned from http response\n * @param content_type returned from http response\n * @param response The response mut be of type blob\n * @param filename [filename=file name from the {response}] - filename.\n */\nexport const saveFile = (disposition, content_type, response, filename) => {\n if (disposition && disposition.indexOf(\"attachment\") !== -1) {\n let filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n let matches = filenameRegex.exec(disposition);\n if (!filename && matches != null && matches[1])\n filename = matches[1].replace(/['\"]/g, \"\");\n }\n let type = content_type;\n\n let blob;\n if (typeof File === \"function\") {\n try {\n blob = new File([response], filename, { type: type });\n } catch (e) {\n /* Edge */\n }\n }\n if (typeof blob === \"undefined\") {\n blob = new Blob([response], { type: type });\n }\n\n if (typeof window.navigator.msSaveBlob !== \"undefined\") {\n // IE workaround for \"HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed.\"\n window.navigator.msSaveBlob(blob, filename);\n } else {\n let URL = window.URL || window.webkitURL;\n let downloadUrl = URL.createObjectURL(blob);\n\n if (filename) {\n // use HTML5 a[download] attribute to specify filename\n let a = document.createElement(\"a\");\n // safari doesn't support this yet\n if (typeof a.download === \"undefined\") {\n window.location.href = downloadUrl;\n } else {\n a.href = downloadUrl;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n }\n } else {\n window.location.href = downloadUrl;\n }\n\n setTimeout(function () {\n URL.revokeObjectURL(downloadUrl);\n }, 100); // cleanup\n }\n};\n\n/**\n *\n * @param locales {string} [locales='en-IN']\n * @param currency {!string} A string, but never null.\n * @param amount {!number} [amount=0] A number, but never null.\n * @returns {string}\n */\nexport const toCurrency = ({\n locales = \"en-IN\",\n currency,\n amount = 0,\n minimumFractionDigits = 0,\n maximumFractionDigits = 0,\n}) => {\n //TODO use navigator.language for locales\n if (currency)\n return new Intl.NumberFormat(locales, {\n style: \"currency\",\n currency: currency,\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits,\n }).format(amount);\n else\n return new Intl.NumberFormat(locales, {\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits,\n }).format(amount);\n};\n\n/**\n *Saves the file to local machine with file extension provided by the content_type\n *\n * @param disposition returned from http response\n * @param content_type returned from http response\n * @param response The response mut be of type blob\n * @param filename [filename=file name from the {response}] - filename.\n */\nexport const openFile = (disposition, content_type, response, filename) => {\n let type = content_type;\n let blob;\n if (typeof File === \"function\") {\n try {\n blob = new File([response], filename, { type: type });\n } catch (e) {\n /* Edge */\n }\n }\n if (typeof blob === \"undefined\") {\n blob = new Blob([response], { type: type });\n }\n\n if (typeof window.navigator.msSaveBlob !== \"undefined\") {\n // IE workaround for \"HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed.\"\n window.navigator.msSaveBlob(blob, filename);\n } else {\n let URL = window.URL || window.webkitURL;\n let fileURL = URL.createObjectURL(blob);\n\n if (filename) {\n //Open the URL on new Window\n window.open(fileURL);\n } else {\n window.location.href = fileURL;\n }\n\n setTimeout(function () {\n URL.revokeObjectURL(fileURL);\n }, 100); // cleanup\n }\n};\n\nexport const getUnAvailablePermissions = (requiredPermissions) => {\n const permissions = TokenStorage.getPermissions();\n if (permissions) {\n const permissionsSet = new Set(permissions);\n var unAvailablePermissions = requiredPermissions.filter(\n (x) => !permissionsSet.has(x)\n );\n\n return unAvailablePermissions;\n }\n\n return requiredPermissions;\n};\n\nexport const getAvailablePermissions = (requiredPermissions) => {\n const permissions = TokenStorage.getPermissions();\n if (permissions) {\n const permissionsSet = new Set(permissions);\n var availablePermissions = requiredPermissions.filter((x) =>\n permissionsSet.has(x)\n );\n\n return availablePermissions;\n }\n\n return null;\n};\n\n/**\n * returns data in json format for the provided arraybuffer data\n * @param {*} arraybuffer\n */\nexport const ArrayBufferToJson = (arraybuffer) => {\n if (arraybuffer) {\n const uint8Array = new Uint8Array(arraybuffer);\n return JSON.parse(String.fromCharCode.apply(null, uint8Array));\n }\n return null;\n};\n\n/**\n *\n * @param {*} str\n */\nexport const IsJsonString = (str) => {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n};\n\nexport const sanitizeJson = (object) => {\n Object.entries(object).forEach(([k, v]) => {\n if (v && typeof v === \"object\") {\n sanitizeJson(v);\n }\n if (\n (v && typeof v === \"object\" && !Object.keys(v).length) ||\n v === null ||\n v === undefined\n ) {\n delete object[k];\n }\n });\n return object;\n};\n\n/**\n *\n * @param {*} obj\n * @returns\n */\nexport const removeEmptyOrNull = (obj) => {\n Object.keys(obj).forEach(\n (k) =>\n (obj[k] && typeof obj[k] === \"object\" && removeEmptyOrNull(obj[k])) ||\n (!obj[k] && obj[k] !== undefined && delete obj[k])\n );\n return obj;\n};\n\n/**\n *\n * @param {*} error\n * @returns\n */\nexport const onFailureMessage = (error) => {\n let error_messages = \"\";\n if (\n error.response.status < 500 &&\n error.response.data &&\n error.response.data.errors &&\n error.response.data.errors.length > 0\n ) {\n const errors = error.response.data.errors;\n error_messages = _.map(errors, (error) => error.message).join(\", \");\n } else {\n error_messages = \"Something went wrong!!..\";\n }\n return error_messages;\n};\n\n/**\n *\n * @param {*} response\n * @param {*} responseStatusCode\n */\nexport const formatResponse = (response, responseStatusCode) => {\n switch (responseStatusCode) {\n case \"BAD_USER_INPUT\":\n response.status = 400;\n response.statusText = null;\n break;\n case \"UNAUTHENTICATED\":\n response.status = 401;\n response.statusText = null;\n break;\n case \"INTERNAL_SERVER_ERROR\":\n response.status = 500;\n response.statusText = null;\n break;\n default:\n response.status = 400;\n response.statusText = null;\n break;\n }\n};\n\n/**\n *\n * @param {*} array\n */\nexport function hasDuplicates(array) {\n return new Set(array).size !== array.length;\n}\n\n/**\n *\n * @param {*} dateStartString\n * @param {*} dateEndString\n * @returns\n */\nexport const getAllMonthsBetweenDates = (\n dateStartString,\n dateEndString,\n format = \"YYYY-MM\"\n) => {\n let dateStart = moment(dateStartString);\n let dateEnd = moment(dateEndString);\n let interim = dateStart.clone();\n let timeValues = [];\n\n while (dateEnd > interim || interim.format(\"M\") === dateEnd.format(\"M\")) {\n timeValues.push(interim.format(format));\n interim.add(1, \"month\");\n }\n return timeValues;\n};\n\n/**\n *\n * @param {*} date\n * @returns\n */\nconst weekOfMonth = (date = moment()) => {\n const firstDayOfMonth = date.clone().startOf(\"month\");\n const firstDayOfWeek = firstDayOfMonth.clone().startOf(\"week\");\n\n const offset = firstDayOfMonth.diff(firstDayOfWeek, \"days\");\n\n return Math.ceil((date.date() + offset) / 7);\n};\n\nexport const startEndDatesOfWeeks = (startDate, endDate) => {\n let weeks = [];\n let tempStartDate = startDate.clone();\n\n let startDateOfWeek = tempStartDate.startOf(\"isoWeek\").clone();\n let endDateOfWeek = tempStartDate.endOf(\"isoWeek\").clone();\n\n if (startDate > startDateOfWeek) {\n startDateOfWeek = startDate;\n }\n\n weeks.push({\n startDate: startDateOfWeek.format(\"YYYY-MM-DD\"),\n endDate: endDateOfWeek.format(\"YYYY-MM-DD\"),\n });\n\n while (endDate.isAfter(endDateOfWeek)) {\n startDateOfWeek = tempStartDate.add(1, \"weeks\").startOf(\"isoWeek\").clone();\n endDateOfWeek = tempStartDate.endOf(\"isoWeek\").clone();\n\n if (endDate < endDateOfWeek) {\n endDateOfWeek = endDate;\n }\n\n weeks.push({\n startDate: startDateOfWeek.format(\"YYYY-MM-DD\"),\n endDate: endDateOfWeek.format(\"YYYY-MM-DD\"),\n });\n }\n\n return weeks;\n};\n\nexport const hasPermissions = async (permissions, args = {}) => {\n const condition = {};\n\n if (args.name) condition.name = args.name;\n if (args.resource) condition.resource = args.resource;\n if (args.action) condition.action = args.action;\n condition.allow = true;\n\n const allowedPermissions = _.filter(permissions, condition);\n if (args.resource === \"Change Assessment\") {\n console.log(\n \"*******88\",\n allowedPermissions && allowedPermissions.length > 0 ? true : false\n );\n console.log(\"&&&&&&&&&&\", permissions);\n }\n return allowedPermissions && allowedPermissions.length > 0 ? true : false;\n};\n\nexport const getWeeksCount = (momentStartDate, momentEndDate) => {\n const startWeekNumber = momentStartDate.startOf(\"month\").isoWeek();\n const endWeekNumber = momentEndDate.endOf(\"month\").isoWeek();\n return endWeekNumber - startWeekNumber + 1;\n};\n\nexport const saveFileFromBinary = (s, fileName) => {\n let buf = new ArrayBuffer(s.length); //convert s to arrayBuffer\n let view = new Uint8Array(buf); //create uint8array as viewer\n for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xff; //convert to octet\n saveAs(\n new Blob([view], { type: \"application/octet-stream\" }),\n `${fileName}.xlsx`\n );\n};\n\nexport const saveChangeReport = (props) => {\n // base64 to pdf\n const byteCharecters = atob(props);\n const byteNumbers = new Array(byteCharecters.length);\n for (let i = 0; i < byteCharecters.length; i++) {\n byteNumbers[i] = byteCharecters.charCodeAt(i);\n }\n const byteArr = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArr], { type: \"application/octet-stream\" });\n const fileName = \"export.pdf\";\n FileSaver.saveAs(blob, fileName);\n};\n\n// the following random color generator can generate 1024 random colors with i < 10\nfunction* hueGen() {\n yield 0;\n for (let i = 1; i < 10; i++) {\n const d = 1 << i;\n for (let j = 1; j <= d; j += 2) {\n yield j / d;\n }\n }\n}\n\nexport function* chartRandomColorGenerator(repeat = 1) {\n const hue = hueGen();\n let h = hue.next();\n while (!h.done) {\n let rgb = hsv2rgb(Math.round(h.value * 360), 0.6, 0.8);\n for (let i = 0; i < repeat; i++) {\n yield { background: rgbString({ r: rgb[0], g: rgb[1], b: rgb[2], a: 192 }), border: rgbString({ r: rgb[0], g: rgb[1], b: rgb[2], a: 144 }) };\n }\n rgb = hsv2rgb(Math.round(h.value * 360), 0.6, 0.5);\n for (let i = 0; i < repeat; i++) {\n yield { background: rgbString({ r: rgb[0], g: rgb[1], b: rgb[2], a: 192 }), border: rgbString({ r: rgb[0], g: rgb[1], b: rgb[2], a: 144 }) };\n }\n h = hue.next();\n }\n}\n\nexport const handleProjectInfo = (projectInfo, page, setProjectInfo) => {\n\n const formatDate = (date) => {\n return moment(date).format('DD-MM-YYYY');\n };\n\n const { name, startDate, goLiveDate, endDate } = projectInfo;\n\n const projectInfoArray = [];\n\n if (name) {\n projectInfoArray.push(`Project: ${name}`);\n }\n\n if (startDate) {\n projectInfoArray.push(`Start Date: ${formatDate(startDate)}`);\n }\n\n if (endDate) {\n projectInfoArray.push(`End Date: ${formatDate(endDate)}`);\n }\n\n if (goLiveDate) {\n projectInfoArray.push(`Go Live Date: ${formatDate(goLiveDate)}`);\n }\n\n const projectInfoString = projectInfoArray.join(' | ');\n if (page >= 1) {\n setProjectInfo(projectInfoString)\n } else {\n setProjectInfo(\"\")\n }\n};\nexport const Loading = ({ }) => (\n <Box sx={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <CircularProgress color=\"success\" variant=\"determinate\" value={75} style={{ color: '#108fb5' }} size={70} sx={{ mb: 3 }} />\n <Box>\n <Typography variant=\"h4\" sx={{ color: '#3c3c3d' }} align='center'>Loading</Typography>\n <Typography variant=\"h6\" sx={{ color: '#3c3c3d' }} align='center'>This page is loading a while</Typography>\n </Box>\n </Box>\n </Box>\n)\n\nexport const impersonatedURL = (isImpersonating, url) => {\n if (isImpersonating) {\n window.location.href = window.location.origin + window.location.pathname + url;\n } else {\n const currentURL = window.location.href;\n const updatedURL = url.replace(/\\?impersonated$/, '');\n window.location.href = window.location.origin + window.location.pathname + updatedURL;\n }\n};\n\nexport const StyledTextInput = styled(TextInput)(({ theme }) => ({\n '& .MuiOutlinedInput-root': {\n '& fieldset': {\n border: 'none',\n },\n '&:hover fieldset': {\n border: 'none',\n },\n '&.Mui-focused fieldset': {\n border: 'none',\n },\n },\n '& .MuiInputBase-root': {\n backgroundColor: 'white',\n // width: '280px',\n padding: 0,\n fontWeight: 600,\n color: '#000',\n },\n}));\n\nexport const StyledIconButton = styled(IconButton)(({ theme }) => ({\n '&.MuiIconButton-root': {\n borderRadius: 5,\n // padding: theme.spacing(1),\n },\n}));\n\nexport const currentDate = moment().format(' YYYYMMDD');\n\nexport const getFormatExtension = (format) => {\n const extensions = {\n \"Word\": \".docx\",\n \"PPT\": \".pptx\",\n \"Excel\": \".xlsx\",\n \"PDF\": \".pdf\"\n };\n return extensions[format] || '';\n}\n\nexport function groupByAction(data) {\n const result = {\n ViewGroup: [],\n EditGroup: []\n };\n\n data.forEach(item => {\n if (item.action.length === 1 && item.action[0] === \"view\") {\n result.ViewGroup.push(item);\n } else {\n result.EditGroup.push(item);\n }\n });\n\n return result;\n}\n\nexport const groupPermissions = (groupChoices, rolePermissions) => {\n const groupIds = groupChoices.map(permission => permission.id);\n const permissions = rolePermissions.filter(permission => groupIds.includes(permission.id)).map(permission => permission.id);\n return permissions;\n};\n\nexport const getClientId = () => {\n const user = TokenStorage.getUserDetails();\n const impersonateUser = TokenStorage.getImpersonateUserDetails();\n return impersonateUser ? impersonateUser.id : user.isCustomerAdmin ? user.id : user.customerAdminId;\n}\n\nexport const wordpressEndpoint = async (endpoint) => {\n return new Promise((resolve, reject) => {\n try {\n fetch(`${process.env.REACT_APP_WORDPRESS_URL}`, {\n method: 'POST',\n body: JSON.stringify(endpoint),\n }).then(async (response) => {\n const clonedResponse = response.clone();\n const responseData = await clonedResponse.json();\n resolve(responseData);\n });\n } catch (err) {\n console.log(err);\n reject(err);\n }\n });\n};\n\nexport const downloadPDF = (base64Data, fileName) => {\n // Decode the Base64 string\n const binaryString = window.atob(base64Data);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Create a Blob from the decoded data\n const blob = new Blob([bytes], { type: 'application/pdf' });\n FileSaver.saveAs(blob, fileName);\n}\n\nexport const transformToPowerBIFilter = (input) => {\n const filterMap = new Map();\n\n input.forEach(item => {\n const target = item.identity[0].target;\n const table = target.table;\n const column = target.column;\n const equalsValue = item.identity[0].equals;\n\n // Create a unique key for the map\n const key = `${table}:${column}`;\n\n // If the key doesn't exist in the map, initialize it\n if (!filterMap.has(key)) {\n filterMap.set(key, {\n table,\n column,\n \"values\": []\n });\n }\n\n filterMap.get(key).values.push(equalsValue);\n });\n\n // Convert the map values to an array\n return Array.from(filterMap.values());\n}\n\nconst yearVisual = [\"1657a28683098678f3cd\", \"760169a9d0f6939d11fc\",]\n\nexport const pbiFilterNoDuplicate = (allFilter, selectedFilter, visualName) => {\n if (!selectedFilter.length) {\n const isYearSelected = yearVisual.includes(visualName)\n if (isYearSelected) {\n const filter = allFilter.filter(item => !(item.identity[0].target.column === \"Year\"))\n return filter;\n } else {\n const filter = allFilter.filter(item => !(item.identity[0].target.column !== \"Year\"))\n return filter;\n }\n }\n // if (!selectedFilter.length) {\n // return [];\n // }\n const target = selectedFilter[0].identity[0].target;\n const table = target.table;\n const column = target.column;\n\n const prev = allFilter.filter(item => !(item.identity[0].target.table === table && item.identity[0].target.column === column))\n const finalArr = [...prev, ...selectedFilter];\n // Convert back to array of objects\n return finalArr;\n}","import axios, { AxiosRequestConfig } from 'axios';\nimport { Promise } from 'es6-promise';\nimport { API_URL } from '../framework/constants';\n\n\ninterface User {\n id: number;\n surname?: String;\n firstName?: String;\n fullName: String;\n email?: String;\n companyName?: String;\n location?: String;\n isManagedService?: Boolean;\n customerAdminName?: String;\n isSuperAdmin: Boolean;\n isCustomerAdmin: Boolean;\n description?: String;\n industry?: String;\n status: Boolean;\n businessUnit?: any;\n roles?: Array<any>;\n lastLoggedInAt?: Date;\n permissions?: Array<any>;\n}\n\nexport class TokenStorage {\n\n private static readonly LOCAL_STORAGE_TOKEN = 'access';\n private static readonly LOCAL_STORAGE_PROJECT = 'projectDetails';\n private static readonly LOCAL_STORAGE_REFRESH_TOKEN = 'refresh';\n private static readonly REFRESH_TOKEN_RESOURCE = \"auth/token/refresh\";\n private static readonly LOCAL_STORAGE_USER = \"user\";\n private static readonly LOCAL_STORAGE_IMPERSONATE_USER = \"impersonate_user\";\n private static readonly LOCAL_STORAGE_PROJECT_DATA = \"projectData\";\n private static readonly LOCAL_STORAGE_PBI_ACCESS_TOKEN = \"pbi_access_token\";\n private static readonly LOCAL_STORAGE_PBI_REFRESH_TOKEN = \"pbi_refresh_token\";\n\n public static isAuthenticated(): boolean {\n return this.getToken() !== null;\n }\n\n public static getAuthentication(): AxiosRequestConfig {\n return {\n headers: { 'Authorization': 'Bearer ' + this.getToken() }\n };\n }\n\n public static getNewToken(): Promise<string> {\n return new Promise((resolve, reject) => {\n axios\n .post(`${API_URL}/${TokenStorage.REFRESH_TOKEN_RESOURCE}/`, { refresh: this.getRefreshToken() })\n .then(response => {\n\n this.storeToken(response.data.access);\n\n // TODO get refresh token and store in local storage\n // this.storeRefreshToken(response.data.data.refresh);\n\n resolve(response.data.access);\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n\n public static getNewPbiToken(): Promise<string> {\n return new Promise((resolve, reject) => {\n axios\n .post(`${API_URL}`,\n {\n query: `mutation(\n $refreshToken: String!\n ) {\n pbiToken(\n refreshToken: $refreshToken\n ) {\n pbi_access_token\n pbi_refresh_token\n }\n } `,\n variables: {\n refreshToken: this.getPbiRefreshToken()\n }\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.getToken()}`\n }\n })\n .then(response => {\n this.pbiStoreToken(response.data.data.pbiToken.pbi_access_token, response.data.data.pbiToken.pbi_refresh_token);\n\n resolve(response.data);\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n\n public static storeToken(token: string): void {\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_TOKEN, token);\n }\n public static storeProjectDetails(project: string): void {\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_PROJECT, project);\n }\n public static pbiStoreToken(pbi_access_token: string, pbi_refresh_token: string): void {\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_PBI_ACCESS_TOKEN, pbi_access_token);\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_PBI_REFRESH_TOKEN, pbi_refresh_token);\n }\n public static storeRefreshToken(refreshToken: string): void {\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_REFRESH_TOKEN, refreshToken);\n }\n\n public static storeUserDetails(user_details: string): void {\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_USER, user_details);\n }\n\n public static storeImpersonateUserDetails(user_details: string): void {\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_IMPERSONATE_USER, user_details);\n }\n\n public static clearImpersonateUserDetails(): void {\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_IMPERSONATE_USER);\n }\n\n public static clear(): void {\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_TOKEN);\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_PBI_REFRESH_TOKEN);\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_PBI_ACCESS_TOKEN);\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_REFRESH_TOKEN);\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_USER);\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_IMPERSONATE_USER);\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_PROJECT_DATA);\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_PROJECT)\n }\n\n public static getRefreshToken(): string | null {\n return localStorage.getItem(TokenStorage.LOCAL_STORAGE_REFRESH_TOKEN);\n }\n\n public static getToken(): string | null {\n return localStorage.getItem(TokenStorage.LOCAL_STORAGE_TOKEN);\n }\n public static getProjectDetails(): string | null {\n \n const project = localStorage.getItem(TokenStorage.LOCAL_STORAGE_PROJECT);\n return project ? JSON.parse(project): null\n }\n public static getPbiAccessToken(): string | null {\n return localStorage.getItem(TokenStorage.LOCAL_STORAGE_PBI_ACCESS_TOKEN);\n }\n\n public static getPbiRefreshToken(): string | null {\n return localStorage.getItem(TokenStorage.LOCAL_STORAGE_PBI_REFRESH_TOKEN);\n }\n\n public static getRoles(): Array<any> | null | undefined {\n const user = this.getUserDetails();\n const roles = user ? user.roles : null;\n return roles;\n }\n\n public static getPermissions(): Array<any> | null | undefined {\n const user = this.getUserDetails();\n const permissions = user ? user.permissions : null;\n return permissions;\n }\n\n public static getUserDetails(): User | null {\n const impersonateUser = this.getImpersonateUserDetails();\n if (impersonateUser) {\n return impersonateUser;\n }\n\n const userStr = localStorage.getItem(TokenStorage.LOCAL_STORAGE_USER);\n return userStr ? JSON.parse(userStr) as User : null;\n }\n\n public static getImpersonateUserDetails(): User | null {\n const userStr = localStorage.getItem(TokenStorage.LOCAL_STORAGE_IMPERSONATE_USER);\n return userStr ? JSON.parse(userStr) as User : null;\n }\n\n public static storeProjectData(projectData: string): void {\n localStorage.setItem(TokenStorage.LOCAL_STORAGE_PROJECT_DATA, projectData);\n }\n\n public static getProjectData(): string | null {\n return localStorage.getItem(TokenStorage.LOCAL_STORAGE_PROJECT_DATA);\n }\n\n public static clearProjectData(): void {\n localStorage.removeItem(TokenStorage.LOCAL_STORAGE_PROJECT);\n }\n}","export default __webpack_public_path__ + \"static/media/cat_logo_white.40bcc820.png\";","const getEnv = (variableName) => {\n if (!process.env[variableName]) {\n const errMsg = `Invalid environment variable - \"${variableName}\"`;\n throw new Error(errMsg);\n }\n return process.env[variableName];\n};\n\nexport const API_URL = getEnv(\"REACT_APP_API_URL\");\n\nexport const REACT_APP_GTM_ID = getEnv(\"REACT_APP_GTM_ID\");\n\nexport const API_URL_FOR_PDF = getEnv(\"REACT_APP_API_URL_FOR_PDF\");\n\nexport const WORDPRESS_ENDPOINT = getEnv(\"REACT_APP_WORDPRESS_ENDPOINT\");\n\n\nexport const NETWORK_ERROR_MESSAGE =\n \"Network error occurred: Please check your internet connection\";\n\nexport const INACTIVE_ACTIVE_CHOICES = [\n { id: false, name: \"Inactive\" },\n { id: true, name: \"Active\" },\n { id: false, name: \"Draft\" }\n];\nexport const STATUS_INACTIVE_ACTIVE_CHOICES = [\n { id: false, name: \"Inactive\" },\n { id: true, name: \"Active\" },\n];\n\nexport const YES_NO_CHOICES = [\n { id: false, name: \"No\" },\n { id: true, name: \"Yes\" },\n];\n\nexport const ACTIONS_CHOICES = [\n { id: \"create\", name: \"Create\" },\n { id: \"view\", name: \"View\" },\n { id: \"edit\", name: \"Edit\" },\n { id: \"delete\", name: \"Delete\" },\n];\n\nexport const PROJECT_PHASE_MASTER_DATA_ID = 2;\nexport const PROJECT_DRIVERS_MASTER_DATA_ID = 1;\nexport const CHANGE_COMPONENTS_ID = 2;\n\nexport const ASSESSMENT_SUB_TYPES = {\n Employee: 1,\n Customers: 2,\n \"Job losses\": 3,\n \"Behaviour/Culture\": 4,\n Suppliers: 5,\n \"New Roles\": 6,\n \"Employees in scope\": 7,\n \"Customers in scope\": 8,\n \"Areas in scope\": 9,\n Complexity: 10,\n Timeframe: 11,\n \"Resistance (Employee)\": 12,\n \"IR/Legal/Compliance\": 13,\n \"Resistance (Line Managers)\": 14,\n \"Resistance (Customers)\": 15,\n Rating: 16,\n \"Morale Impact - Implications\": 17,\n Interdependencies: 18,\n \"Challenge to absorb change \": 19,\n \"Implementation Approach\": 20,\n \"Rating - Scale/Effort\": 21,\n \"Rating - Challenge\": 22,\n};\n\nexport const ASSESSMENT_TYPES = {\n Impact: 1,\n Scope: 2,\n Challenge: 3,\n \"Stakeholder Management\": 4,\n \"Change Leadership\": 5,\n \"Communications and Engagement \": 6,\n \"Process and Systems Re-design\": 7,\n \"Business Strategy and Operating Model\": 8,\n \"Job Re-design\": 9,\n \"Capability: Skills Definition and Development \": 10,\n Restructuring: 11,\n \"Behaviour / Culture Change \": 12,\n \"Performance Management\": 13,\n \"Resourcing, Costing and Scheduling \": 14,\n \"Risk Management (Change Management Risks)\": 15,\n \"Industrial Relations / Legal / Compliance\": 16,\n \"Business rules / Policy / Procedures\": 17,\n};\n\nexport const CHART_COLORS = [\n '#4dc9f6',\n '#f67019',\n '#f53794',\n '#537bc4',\n '#acc236',\n '#166a8f',\n '#00a950',\n '#58595b',\n '#8549ba',\n // new colors\n '#cb4335',\n '#e74c3c',\n '#a93226',\n '#c0392b',\n '#935116',\n '#ff7043',\n '#5499c7',\n '#a569bd',\n '#4a235a',\n '#633974',\n '#884ea0',\n '#af7ac5',\n '#145a32',\n '#1e8449',\n '#27ae60',\n '#0e6251',\n '#17a589',\n '#48c9b0',\n '#e67e22',\n '#9c640c',\n '#f5b041',\n '#7d6608',\n '#d4ac0d',\n '#f4d03f',\n];\n\nexport const RISK_COLORS = { H: '#EB5757', M: '#F2994A', L: '#27AE60' }\n\nexport const KPI_CRITERIA_TYPE = {\n GONOGO: \"GoNoGo\",\n CLOSEOUT: \"CloseOut\"\n}\n\nexport const kpiChoice = [\n {\n id: \"Yes\",\n name: \"Yes\",\n },\n {\n id: \"No\",\n name: \"No\"\n },\n {\n id: \"N/A\",\n name: \"N/A\",\n },\n]\n\nexport const consequenceChoice = [\n {\n id: 1,\n name: \"1. Insignificant\"\n },\n {\n id: 2,\n name: \"2. Minor\"\n },\n {\n id: 3,\n name: \"3. Moderate\"\n },\n {\n id: 4,\n name: \"4. Major\"\n },\n {\n id: 5,\n name: \"5. Significant\"\n }\n];\n\nexport const likelihoodChoice = [\n {\n id: 1,\n name: \"1. Rare\"\n },\n {\n id: 2,\n name: \"2. Unlikely\"\n },\n {\n id: 3,\n name: \"3. Possible\"\n },\n {\n id: 4,\n name: \"4. Likely\"\n },\n {\n id: 5,\n name: \"5. Almost Certain\"\n }\n]\n\nexport const CHANGE_ASSESSMENT = {\n IMPACT: [\"Impact\"],\n ENVIRONMENT: [\"Maturity\", \"Environment\", \"Saturation\"]\n}\n\nexport const CustomsThemePalette = [\n {\n name: \"Blue\",\n color: \"#028FC2\"\n },\n {\n name: \"Yellow\",\n color: \"#FFA500\"\n },\n {\n name: \"Rose\",\n color: \"#800000\"\n },\n {\n name: \"Green\",\n color: \"#006400\"\n },\n {\n name: \"DarkBlue\",\n color: \"#000080\"\n },\n {\n name: \"PurpleDark\",\n color: \"#800080\"\n },\n {\n name: \"Gold\",\n color: \"#8B4513\"\n },\n {\n name: \"Bricks\",\n color: \"#A0522D\"\n },\n {\n name: \"GoldLighter\",\n color: \"#CD853F\"\n },\n {\n name: \"DarkGreen\",\n color: \"#556B2F\"\n },\n {\n name: \"Red\",\n color: \"#FF4500\"\n },\n {\n name: \"Purple\",\n color: \"#DA70D6\"\n },\n {\n name: \"Cyan\",\n color: \"#00CED1\"\n },\n {\n name: \"Violet\",\n color: \"#9400D3\"\n },\n {\n name: \"Orange\",\n color: \"#FF8C00\"\n }\n]\n","import teal from '@material-ui/core/colors/teal';\nimport { alpha } from '@material-ui/core/styles';\n\nfunction createGradient(color1, color2) {\n return `linear-gradient(to bottom, ${color1}, ${color2})`;\n}\n\n// SETUP COLORS\nconst GREY = {\n 0: '#FFFFFF',\n 100: '#F9FAFB',\n 200: '#F4F6F8',\n 300: '#DFE3E8',\n 400: '#C4CDD5',\n 500: '#919EAB',\n 600: '#637381',\n 700: '#454F5B',\n 800: '#212B36',\n 900: '#161C24',\n 500_8: alpha('#919EAB', 0.08),\n 500_12: alpha('#919EAB', 0.12),\n 500_16: alpha('#919EAB', 0.16),\n 500_24: alpha('#919EAB', 0.24),\n 500_32: alpha('#919EAB', 0.32),\n 500_48: alpha('#919EAB', 0.48),\n 500_56: alpha('#919EAB', 0.56),\n 500_80: alpha('#919EAB', 0.8)\n};\n\nconst PRIMARY = {\n lighter: '#ddf6ff',\n light: '#19aadd',\n main: '#00a0d9',\n dark: '#0693c6',\n darker: '#495057',\n contrastText: '#ffffff'\n};\nconst SECONDARY = {\n lighter: teal[400],\n light: \"#6ee1d4\",\n main: \"#606f89\",\n dark: \"#007f74\",\n darker: teal[800],\n contrastText: '#fff',\n};\nconst INFO = {\n lighter: '#D0F2FF',\n light: '#74CAFF',\n main: '#1890FF',\n dark: '#0C53B7',\n darker: '#04297A',\n contrastText: '#fff'\n};\nconst SUCCESS = {\n lighter: '#E9FCD4',\n light: '#AAF27F',\n main: '#54D62C',\n dark: '#219653',\n darker: '#08660D',\n contrastText: GREY[800]\n};\nconst WARNING = {\n lighter: '#FFF7CD',\n light: '#FFE16A',\n main: '#FF800A',\n dark: '#B78103',\n darker: '#7A4F01',\n contrastText: GREY[800]\n};\nconst ERROR = {\n lighter: '#FFE7D9',\n light: '#FFA48D',\n main: '#EB5757',\n dark: '#B72136',\n darker: '#7A0C2E',\n contrastText: '#fff'\n};\nconst CUSTOMSCOLORS = {\n main: '#0ab39c',\n secondary: \"#299CDB\",\n success: \"#219653\",\n gray: \"#F3F3F9\",\n creamium: \"#ffffff\",\n darkBlue: \"#495057\",\n primary: \"#405189\",\n darkGray: \"#dadde9\",\n lightGray: \"#f3f6f9\",\n amber: \"#f06548\",\n lighter: \"#e1ebfd\",\n // tail: \"#0ab39c\"\n}\nconst blueTheme = {\n main: \"#028FC2\",\n secondary: \"#400d73\",\n pink: \"#cc0ca6\"\n}\nconst GRADIENTS = {\n primary: createGradient(PRIMARY.light, PRIMARY.main),\n secondary: createGradient(SECONDARY.light, SECONDARY.main),\n info: createGradient(INFO.light, INFO.main),\n success: createGradient(SUCCESS.light, SUCCESS.main),\n warning: createGradient(WARNING.light, WARNING.main),\n error: createGradient(ERROR.light, ERROR.main)\n};\n\nconst palette = {\n common: { black: '#000', white: '#fff' },\n primary: { ...PRIMARY },\n secondary: { ...SECONDARY },\n info: { ...INFO },\n success: { ...SUCCESS },\n warning: { ...WARNING },\n error: { ...ERROR },\n customsColor: {...CUSTOMSCOLORS},\n grey: GREY,\n gradients: GRADIENTS,\n divider: GREY[500_24],\n text: { primary: GREY[800], secondary: GREY[600], disabled: GREY[500] },\n background: { paper: '#fff', default: GREY[200], neutral: GREY[200] },\n action: {\n active: GREY[600],\n hover: GREY[500_8],\n selected: GREY[500_16],\n disabled: GREY[500_80],\n disabledBackground: GREY[500_24],\n focus: GREY[500_24],\n hoverOpacity: 0.08,\n disabledOpacity: 0.48\n }\n};\n\nexport default palette;","import React, { createContext, useState } from 'react';\nimport themes from './index';\n\nimport cat_logo_white from \"../../assets/images/cat_logo_white.png\";\n\n\nconst ThemeContext = createContext();\n\nconst ThemeProvider = ({ children }) => {\n\n const [theme, setTheme] = useState({\n id: \"Blue\",\n img: cat_logo_white\n });\n const [contextUser, setContextUser] = useState({});\n return (\n <ThemeContext.Provider value={{ theme, setTheme, themeObject: themes[theme.id], contextUser, setContextUser}}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport { ThemeContext, ThemeProvider };\n","import { Grid, Tooltip, Typography, useMediaQuery, withStyles } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/styles\";\nimport FileDownloadOutlinedIcon from '@mui/icons-material/FileDownloadOutlined';\nimport { Alert, Box, CircularProgress, Divider, Snackbar, } from \"@mui/material\";\nimport React, { useContext } from \"react\";\nimport { Title, useDataProvider } from \"react-admin\";\nimport { getFormatExtension, impersonatedURL } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport { ThemeContext } from \"../../framework/theme/themeContext\";\nvar FileSaver = require(\"file-saver\");\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n },\n heading: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightRegular,\n textTransform: \"uppercase\",\n },\n nonAccordionCard: {\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n title: {\n textTransform: \"uppercase\",\n // fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nconst ToolsAndTemplates = () => {\n const classes = useStyles();\n const user = TokenStorage.getUserDetails();\n const { isImpersonating } = user ? user : {};\n const [buttonLoader, setButtonLoader] = React.useState(false);\n const dataProvider = useDataProvider();\n const [snackbarOpen, setSnackbarOpen] = React.useState(false);\n\n const handleSnackbarOpen = (name, type) => {\n setPopupMessage({message: name, type: type})\n setSnackbarOpen(true);\n };\n \n const hanndleSnackbar = (event, reason) => {\n if (reason === 'clickaway') {\n return\n }\n \n setSnackbarOpen(false);\n };\n const [anchorOrigin, setAnchorOrigin] = React.useState({\n vertical: 'top',\n horizontal: 'center',\n })\n const [popupMessage, setPopupMessage] = React.useState({\n message: \"\",\n type: \"\"\n });\n \n const {vertical, horizontal} = anchorOrigin;\n const { themeObject } = useContext(ThemeContext)\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n impersonatedURL(isImpersonating, '#/cat_templates?impersonated');\n\n const handleToolsAndTemplateDownload = (file) => {\n const filename = file.title + getFormatExtension(file.format)\n setButtonLoader(file.title);\n dataProvider\n .postRequest(\"ExportToolsAndTemplates\", {\n queryType: \"retrieve\",\n data: { filename }\n }).then(response => {\n downloadFile(JSON.parse(response.data))\n })\n .catch(error => {\n handleSnackbarOpen(\"No data found to export\", \"warning\")\n setButtonLoader(false);\n });\n }\n\n const downloadFile = ({ filename, data }) => {\n const { ContentType, Body } = data;\n\n let arrayBuffer;\n if (Body instanceof Uint8Array) {\n arrayBuffer = Body.buffer;\n } else {\n arrayBuffer = Buffer.from(Body).buffer;\n }\n const blob = new Blob([arrayBuffer], { type: ContentType });\n FileSaver.saveAs(blob, filename);\n setButtonLoader(false);\n };\n\n return (\n <div>\n <Title title=\"Tools and Templates\" className={classes.title} />\n <Box mb={2}>\n <span style={{ fontWeight: \"700\" }} >Description: </span>\n Use the following Tools and Templates to get you started in documenting and analysing your change journey.\n </Box>\n <Grid container spacing={2}>\n {\n templateData.map((items, index) =>\n <Grid className={classes.nonAccordionCard} item xs={12} key={items.projectPhase} >\n <Box sx={{ display: \"flex\", flexDirection: isSmall ? \"column\" : \"row\" }}>\n <Box sx={{ minWidth: 220, mt: isSmall ? 0 : 1, fontSize: \"1.5rem\", fontWeight: \"700\" }}>\n {items.projectPhase}\n </Box>\n <Box sx={{ display: 'flex', flexWrap: \"wrap\" }}>\n {\n items.fileDetails.map(file =>\n <HtmlTooltip key={file.id}\n title={\n <Box >\n <Typography color=\"inherit\" >\n {file.summary}\n </Typography>\n </Box>\n }\n placement=\"top\">\n <Box\n sx={{\n display: 'flex',\n alignItems: \"center\",\n justifyContent: \"center\",\n margin: 1,\n backgroundColor: themeObject.palette.primary.main,\n borderRadius: 1.5,\n color: \"white\",\n \"&:hover\": {\n backgroundColor: themeObject.palette.primary.buttonContrast,\n color: \"white\",\n cursor: 'pointer',\n },\n }}\n onClick={() => handleToolsAndTemplateDownload(file)}\n >\n <span style={{ padding: \"10px 10px\" }}>\n {file.title}\n </span>\n <span style={{\n width: \"2rem\",\n marginLeft: \".25rem\",\n backgroundColor: \"rgba(255,255,255,0.2)\", borderTopRightRadius: 5,\n borderBottomRightRadius: 5,\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}>\n {\n buttonLoader === file.title ? <CircularProgress size={13} sx={{ color: \"white\", ml: \".15rem\" }} /> : <FileDownloadOutlinedIcon\n sx={{ color: \"#F3F3F9\", fontSize: \"16px\" }}\n />\n }\n </span>\n </Box>\n </HtmlTooltip>)\n }\n </Box>\n </Box>\n {(templateData.length - 1) !== index && <Divider sx={{ m: isSmall ? \"1rem 0 0 0\" : \"1rem 0\" }} />}\n </Grid>\n )\n }\n </Grid>\n\n <Snackbar open={snackbarOpen} autoHideDuration={1500} anchorOrigin={{ vertical, horizontal }} onClose={hanndleSnackbar}>\n <Alert\n\n onClose={hanndleSnackbar}\n severity={popupMessage.type}\n variant=\"filled\"\n sx={{ width: '100%' }}\n >\n {popupMessage.message}\n </Alert>\n </Snackbar>\n </div>\n );\n};\n\nexport default ToolsAndTemplates;\n\nconst HtmlTooltip = withStyles((theme) => ({\n tooltip: {\n backgroundColor: '#f5f5f9',\n color: \"black\",\n fontSize: 11,\n border: '1px solid #dadde9 ',\n },\n}))(Tooltip);\n\nconst templateData = [\n {\n \"projectPhase\": \"1. Initiate & Assess\",\n \"fileDetails\": [\n {\n \"title\": \"Case for Change\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"This document can be used if you are right at the start of the project cycle and will set up the foundation for moving through to your Change Management Strategy and Plan. Often we don't get a chance to do this as we get brought in too late, but if you are brought in early this is a great starting place.\"\n },\n {\n \"title\": \"Change Definition Document\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"To be successful, any organisational change must first be fully defined and understood. Use this template to provide further clarity when defining the change.\"\n },\n {\n \"title\": \"Change Impact Evaluation Tool\",\n \"format\": \"PPT\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Detailed Change Impact Assessment will support you in assessing the change impact of your project/initiative.\"\n },\n {\n \"title\": \"Change Strategy\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"A Change Strategy is required for business change initiatives that are medium to high complexity and impact large segments of the business.\"\n },\n {\n \"title\": \"Business Case\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"Use the Business Case document to outline how the benefits of a project will outweigh the potential costs and give reasoning as to why the project should be executed.\"\n },\n {\n \"title\": \"Communications Strategy and Plan\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Communications Strategy and Plan will help you get ahead of your requirements by mapping out what the project/initiative is, why we need it, who is affected, when, where and how will it happen.\"\n }\n ]\n },\n {\n \"projectPhase\": \"2. Design & Plan\",\n \"fileDetails\": [\n {\n \"title\": \"70-20-10 Learning Approach\",\n \"format\": \"PDF\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"To drive change adoption and shift behaviours, there is requirement for individuals to be able to change. This model helps identify the various learning activities dependent on change complexity.\"\n },\n {\n \"title\": \"Change Canvas\",\n \"format\": \"PPT\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"Use the Change Canvas to put your change program on one page and engage people in conversation to understand the change impacts.\"\n },\n {\n \"title\": \"Change Complexity Assessment\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Change Complexity Assessment tool will help you measure the scope, scale and complexity of your project/initiative, enabling you to determine the level of change resource capability and requirements you require to support successful delivery and benefits realisation.\"\n },\n {\n \"title\": \"Change Complexity Profile Tool\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Change Complexity Tool will help you measure the scope, scale and complexity of your project/initiative, enabling you to determine the level of change resource capability and requirements you require to support successful delivery and benefits realisation.\"\n },\n {\n \"title\": \"Change Plan\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Change Plan defines the approach to managing the impact of change for the particular initiative. When completing a Change Plan, consideration should be given to the Change approach, Stakeholder engagement, Training and benefits\"\n },\n {\n \"title\": \"Communications and Engagement Plan\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"A Communications and Engagement Plan provides a detailed plan with clear tasks, responsibilities and timelines for communication activities.\"\n },\n {\n \"title\": \"Detailed Change Impact Assessment\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The purpose of this tool is to support you in assessing the change impact of your project/initiative.\"\n },\n {\n \"title\": \"Stakeholder Assessment and Engagement Plan\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Stakeholder Assessment and Engagement Plan is developed based on information gathered during a stakeholder assessment. It details how the project team should engage with stakeholders throughout the life of the project, and outputs used to inform communications and learning plans and activities.\"\n },\n {\n \"title\": \"Stakeholder Empathy Map\",\n \"format\": \"PPT\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Stakeholder Empathy Map provides a framework to explore each stakeholder within the program, which informs stakeholder engagement activities, Communication Plans and Learning Plans and Activities.\"\n }\n ]\n },\n {\n \"projectPhase\": \"3. Build & Test\",\n \"fileDetails\": [\n {\n \"title\": \"Learning Needs Assessment\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"A Learning Needs Assessment (LNA) forms the basis for the design, development and delivery of training. It should be designed based on the understanding of the change impacts and capability requirements.\"\n },\n {\n \"title\": \"Learning Plan\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"Based on the Learning Needs Assessment, a detailed Learning Plan should be prepared to outline the training design and delivery implementation plan.\"\n },\n {\n \"title\": \"Scope Change Request\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"Whenever you face an adjustment in scope, use the Scope Change Request form to identify the basics of the new impacts, key stakeholders and related risks that may be apparent.\"\n }\n ]\n },\n {\n \"projectPhase\": \"4. Launch & Embed\",\n \"fileDetails\": [\n {\n \"title\": \"Business Readiness Checklist\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"A Business Readiness Checklist is a key tool used to measure the readiness of the business to accept the change. The checklist is usually completed prior to go-live and usually requires approval from the project sponsor and/or the business owner.\"\n },\n {\n \"title\": \"Change Readiness Assessment\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"A Change Readiness Assessment helps to understand individual/group stakeholders' level of readiness and acceptance of the change, including what issues and barriers to change people are facing and the required mitigation activities to address these.\"\n },\n {\n \"title\": \"Embedding Change Checklist\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"Use the Embedding Change Checklist to assess whether the change has been successfully embedded into Business As Usual (BAU).\"\n },\n {\n \"title\": \"Training Assessment and Evaluation\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Training Assessment and Evaluation can be used to ensure that training is fit for purpose and achieves the desired outcomes.\"\n }\n ]\n },\n {\n \"projectPhase\": \"5. Sustain & Close\",\n \"fileDetails\": [\n {\n \"title\": \"Change Evaluation\",\n \"format\": \"Excel\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Change Management Evaluation is an excellent way to understand what worked well and what could be improved in your last project.\"\n },\n {\n \"title\": \"Handover and Sustainability Plan\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"This document provides a detailed description of the implementation to date, including any gaps that still need to be addressed. It clearly defines how the Change project will be handed over to the business and outlines ways the change objectives will be incorporated into the business plan and long term strategy.\"\n },\n {\n \"title\": \"Post Implementation Review\",\n \"format\": \"Word\",\n \"scrubbed\": \"Yes\",\n \"summary\": \"The Post-Implementation Review is an evaluation tool used to assess the actual results/outcomes of a project/program against the baseline expectations, as set out in the Business Case.\"\n }\n ]\n }\n]\n","import { Grid, Tooltip, Typography, useMediaQuery, withStyles } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/styles\";\nimport FileDownloadOutlinedIcon from '@mui/icons-material/FileDownloadOutlined';\nimport { Box, CircularProgress, Divider, IconButton, InputAdornment, TextField, } from \"@mui/material\";\nimport React, { useEffect, useState } from \"react\";\nimport { Loading, Title, useDataProvider, useNotify } from \"react-admin\";\nimport { getFormatExtension, impersonatedURL, wordpressEndpoint } from \"../../utils/AppUtils\";\nimport { TokenStorage } from \"../../utils/TokenStorage\";\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport Paper from '@mui/material/Paper';\nimport DescriptionIcon from '@mui/icons-material/Description';\nimport axios from \"axios\";\nimport { Link } from 'react-router-dom';\nimport { WORDPRESS_ENDPOINT } from \"../../framework/constants\";\nimport SearchIcon from '@mui/icons-material/Search';\nvar FileSaver = require(\"file-saver\");\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n },\n heading: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightRegular,\n textTransform: \"uppercase\",\n },\n nonAccordionCard: {\n [theme.breakpoints.down(\"md\")]: {\n width: \"100%\",\n },\n },\n title: {\n textTransform: \"uppercase\",\n // fontSize: \"20px\" // Adjust the font size as needed\n }\n}));\n\nconst LearningCentre = () => {\n const classes = useStyles();\n const user = TokenStorage.getUserDetails();\n const { isImpersonating } = user ? user : {};\n const [buttonLoader, setButtonLoader] = React.useState(false);\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [posts, setPosts] = useState(null);\n const [filteredPosts, setFilteredPosts] = useState([]);\n const [query, setQuery] = useState('');\n impersonatedURL(isImpersonating, '#/learning_centre?impersonated');\n\n const handleToolsAndTemplateDownload = (file) => {\n const filename = file.title + getFormatExtension(file.format)\n setButtonLoader(file.title);\n dataProvider\n .postRequest(\"ExportLearningCentre\", {\n queryType: \"retrieve\",\n data: { filename }\n }).then(response => {\n downloadFile(JSON.parse(response.data))\n })\n .catch(error => {\n notify(\"No data found to export\", \"warning\")\n setButtonLoader(false);\n });\n }\n\n const downloadFile = ({ filename, data }) => {\n const { ContentType, Body } = data;\n\n let arrayBuffer;\n if (Body instanceof Uint8Array) {\n arrayBuffer = Body.buffer;\n } else {\n arrayBuffer = Buffer.from(Body).buffer;\n }\n const blob = new Blob([arrayBuffer], { type: ContentType });\n FileSaver.saveAs(blob, filename);\n setButtonLoader(false);\n };\n const handleSearch = (event) => {\n const searchQuery = event.target.value.toLowerCase();\n setQuery(searchQuery);\n\n const filtered = posts.filter(post =>\n post.title.rendered.toLowerCase().includes(searchQuery)\n );\n setFilteredPosts(filtered);\n };\n useEffect(() => {\n const fetchPosts = async () => {\n try {\n const response = await axios.get(`${WORDPRESS_ENDPOINT}wp-json/wp/v2/posts?categories=2&orderby=id&order=asc`);\n setPosts(response.data);\n setFilteredPosts(response.data)\n } catch (error) {\n console.error('Error fetching posts', error);\n }\n };\n\n fetchPosts();\n }, [])\n\n if (!posts) {\n return <Loading />\n }\n return (\n <div>\n <Title title=\"Learning Centre\" className={classes.title} />\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", mb: 5 }}>\n <Box >\n <span style={{ fontWeight: \"700\" }} >Description: </span>\n Get the help you need with our extensive collection of support guides.\n </Box>\n <Box >\n <TextField\n type=\"text\"\n placeholder=\"Search\"\n value={query}\n onChange={handleSearch}\n size=\"small\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon sx={{ color: \"rgba(0,0,0,0.2)\" }} />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n </Box>\n\n\n <Grid container spacing={2}>\n {\n !filteredPosts.length ? <Box>No reference found</Box> :\n <TableContainer component={Paper} sx={{ width: \"50%\" }}>\n <Table sx={{}} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell>Ref</TableCell>\n <TableCell align=\"center\">Name</TableCell>\n <TableCell align=\"center\">Media Type</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredPosts.map((row, i) => (\n <TableRow\n key={row.name}\n >\n <TableCell width={10} component=\"th\" scope=\"row\">\n {i + 1}\n </TableCell>\n <TableCell align=\"left\">{row.title.rendered}</TableCell>\n <TableCell align=\"center\" sx={{ borderLeft: \"1px solid lightgrey\" }}>\n <IconButton>\n <Link to={`/learning_centre/${row.slug}`}><DescriptionIcon sx={{ color: \"grey\" }} /></Link>\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n\n </TableBody>\n </Table>\n </TableContainer>\n }\n </Grid>\n <Box mt={10} mb={5}>\n <Typography style={{ fontWeight: \"700\" }}>Legend:</Typography>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <IconButton> <DescriptionIcon /> </IconButton>\n <Typography >Quick Guide Reference</Typography>\n </Box>\n </Box>\n </div>\n );\n};\n\nexport default LearningCentre;\n\n\n// const fileDetails = [\n// {\n// \"title\": \"QRG - 0. Setting up Users v2.0\",\n// \"format\": \"PDF\",\n// },\n// {\n// \"title\": \"QRG - 1. Create_edit_delete a project v2.0\",\n// \"format\": \"PDF\",\n// },\n// {\n// \"title\": \"QRG - 2. Complete a Change Risk Assessment v2.0\",\n// \"format\": \"PDF\",\n// },\n// {\n// \"title\": \"QRG - 3. Complete a Change Business Readiness Assessment v2.0\",\n// \"format\": \"PDF\",\n// },\n// {\n// \"title\": \"QRG - 4. Complete a Change Business Governance Assessment v2.0\",\n// \"format\": \"PDF\",\n// },\n// {\n// \"title\": \"QRG - 5. Add_edit_delete SME requirement v2.0\",\n// \"format\": \"PDF\",\n// },\n// {\n// \"title\": \"QRG - 6. Complete a GoNo-Go Criteria v2.0\",\n// \"format\": \"PDF\",\n// },\n// {\n// \"title\": \"QRG - 7. Complete a Project CloseOut v2.0\",\n// \"format\": \"PDF\",\n// },\n// ]"],"sourceRoot":""}