{"version":3,"sources":["helpers/history.js","store/actions.js","config.js","components/HelpModal.js","style/images/aesop-logo.svg","components/ProjectsAddProjectCommentModal.js","HelperFunctions.js","components/ProjectsNewMaterialModal.js","components/AdminMaterialsPage.js","components/ProjectInformationBrief.js","components/ProjectScores.js","components/GlobalVars.js","components/ChartDonutSingleVal.js","components/AdminCalcsPage.js","components/ChartFilledSingleCircleGHG.js","components/ProjectSummaryCharts.js","components/ProjectsAddMaterialCommentModal.js","components/TableGetMaterialsByStore.js","components/StoreNavBar.js","components/ProjectPhasePage.js","components/StoreLifecycleInfo.jsx","components/ProjectSummaryPage.js","components/AdminStoresPage.js","AccessControl.js","components/AdminUsersPage.js","components/Login.js","components/Header.js","components/ChartFilledSingleCircle.js","components/ChartsGlobalStores.js","components/HomePage.js","components/OverviewRegionTable.js","components/OverviewTopDesignersStoresTables.js","components/OverviewDonutChart.js","components/OverviewBarChart.js","components/OverviewFilters.js","components/OverviewTreemapChart.js","components/UserOverview.js","components/ProjectCreateNew.js","components/ProjectsAddMaterial.js","components/ProjectReviewPage.js","components/AllProjectsPage.js","components/TableCertifications.js","components/TableGetAllStores.js","components/tests/dynamicForm-useEffectLock.js","components/PageNotFound.js","components/StoreLifecycleModal.js","components/StoreContainerPage.js","components/App.js","reportWebVitals.js","store/index.js","index.js"],"names":["history","createBrowserHistory","setUser","createAction","setStoreId","setMaterialId","setEditMode","setBackendUrl","setUserDisplayName","setUserId","setUserLoggedIn","setStoreLifecycleModalInfo","config","version","isDebugMode","backendUrl","backendRequestConfig","headers","accept","HelpModal","props","_jsxs","Modal","_objectSpread","size","centered","children","_jsx","Header","closeButton","Title","Body","Tab","Container","id","defaultActiveKey","Row","Col","md","Nav","variant","className","Item","Link","eventKey","style","maxHeight","minHeight","overflowY","Content","Pane","Table","responsive","ProjectsAddProjectCommentModal","store","onSuccess","_useState","useState","_useState2","_slicedToArray","finalComments","setFinalComments","_useState3","_useState4","status","setStatus","user","useSelector","state","Form","autoComplete","onSubmit","e","preventDefault","updatedStore","reviewComment","reviewerId","storeStatus","Store","Status","REVIEWED","reviewRequired","updateStore","onHide","err","Group","Label","Control","required","name","as","rows","placeholder","value","onChange","target","Button","type","onClick","marginTop","onlyUnique","index","self","indexOf","ensureString","maybeStr","String","formatScore","score","isNaN","Number","toFixed","console","error","formatGhge","formatPercentage","perc","formatRelImprov","ratio","formatUnit","unit","replace","formatUnitForDisplay","calcTotalGhge","matInst","totGhge","materialQuantity","embodiedGHGE","totGhgeFormatted","rawMaterial","formatted","display","concat","calcInfo","certDbButton","href","download","subCategories","units","subCategoryMappings","map","scm","flat","filter","sort","n","location","title","primaryTransport","endOfLifeAssessment","certification","materialDataList","material","Material","category","Category","SubCategories","functionalUnit","materialDataDefault","subCategory","itemType","materialDescription","productCertification","supplierName","supplierLocation","manufacturerName","manufacturerLocation","primaryTransportMethod","ProjectsNewMaterialModal","_ref","show","materialInstance","epicMaterials","storeId","isEditMode","validated","setValidated","filteredMaterialDataList","setFilteredMaterialDataList","userId","dbCustomMaterials","userLoggedIn","dbMat","dataSource","newMaterialInstance","scorecardType","creatorId","parseInt","initialMaterialData","_useState5","_useState6","materialData","setMaterialData","updateMaterialDataField","fieldName","fieldVal","updatedMaterialData","filterMaterialListBySubCategory","dbCustomMaterialsFiltered","item","subCategoriesList","filtered","find","isActive","objA","objB","a","toLowerCase","b","useEffect","log","materialId","epicMat","updatedFields","updateMaterialDataFields","checked","materialTypeId","materialDataForCalc","totGhgeInfo","spacesBeforeGhge","materialName","spaceCount","Math","max","length","Array","join","fromCharCode","noValidate","event","form","currentTarget","checkValidity","stopPropagation","updateMaterialInstance","updatedMatInst","createMaterialInstance","responseData","column","Select","disabled","m","fontFamily","min","step","color","isActiveFieldInfo","defaultFormMaterial","massPerFunctionalUnit","moreInformationUrl","loadAllMaterials","setMaterialListFn","axios","get","then","response","materialsDbList","data","mat","split","catch","deleteMaterialInstance","materialInstanceId","onError","delete","cleanMaterialDataForDb","storeScorecardType","clean","materialStatus","createdDate","circularityAssessment","post","put","getMaterialInstancesForStore","url","matInstList","AddNewMaterialModal","updateEpicMaterial","createEpicMaterial","subCategoryIsChecked","setSubCategoryIsChecked","formMaterial","setFormMaterial","subCategoryIsCheckedUpdated","forEach","sc","fieldValue","updatedFormMaterial","onChangeSubCategory","isChecked","subCategoryName","updateSubCategoryFieldIsChecked","updateFormMaterialField","Object","keys","replaceAll","trim","xs","Check","undefined","AdminMaterialsPage","_useState7","_useState8","materialList","setMaterialList","_useState9","_useState10","showAddNewMaterialModal","setShowAddNewMaterialModal","_useState11","_useState12","addNewMaterialModalIsEditMode","setAddNewMaterialModalIsEditMode","_useState13","_useState14","materialToEdit","setMaterialToEdit","_useState15","_useState16","dataSourceFilterSelected","setDataSourceFilterSelected","useParams","materials","materialIdNum","editMaterialUsingModal","setSubCategoriesForDb","epicMaterial","epicMaterialDbRow","handleActionClick","actionName","updateMaterial","renderMaterialRowActions","Dropdown","Toggle","Menu","sourceFilter","label","striped","hover","ProjectInformationBrief","storeDetails","setStoreDetails","selectProjectCommentModal","setSelectProjectCommentModal","archEmail","setArchEmail","pmEmail","setPmEmail","loadStore","architect","projectManager","storeName","region","getScorecardTypeTitle","country","locationType","totalSqm","streetAddress","city","currency","roicCapex","retailSqm","ProjectScores","projectScoreProp","projectScore","globalAverage","setGlobalAverage","setProjectRegion","setProjectScore","setProjectDesigner","regionalAverage","setRegionalAverage","designerAverage","setDesignerAverage","round","totalScore","architectId","gotRegion","gotDesignerId","regionalCheck","regionalScores","regional","averageScore","averageStoreScore","_Fragment","span","offset","borderless","scaleValues","scaleColoursBG","scaleColours","scaleColoursFive","scaleColoursFiveText","scaleColoursSeven","scaleColoursSevenText","scaleColoursThree","scaleColoursThreeText","circularityAssessmentDets","key","ChartJS","register","ArcElement","Tooltip","Legend","ChartDataLabels","ChartDonutSingleVal","percentage","delay","rotateNegative","colourArray","dataArray","labels","datasets","backgroundColor","borderColor","borderWidth","options","circumference","maintainAspectRatio","cutout","animation","easing","duration","mode","plugins","text","position","legend","tooltip","enabled","datalabels","Doughnut","loadAllCalcParams","setCalcParamList","setCalcParams","calcParams","updatedCalcParamsNewValue","c","currentValue","AdminCalcsPage","calcParamList","calcParamsNewValue","setCalcParamsNewValue","onClickSavedCalcParamValue","calcParam","updatedVal","updatedCalcParam","updateCalcParam","description","defaultValue","onChangeCalcParamNewValue","ChartFilledSingleCircle","ghgValue","topText","bottomText","scaleValuesGHGstore","setScaleValuesGHGstore","scaleColour","setScaleColour","scaleText","setScaleText","_emParams$find","_emParams$find2","_emParams$find3","prefix","emParams","updatedScaleValues","low","medium","high","height","width","ProjectSummaryCharts","projectScores","setProjectScores","setProjectGhg","setProjectGhgInverted","setProjectGhgTxt","_useState17","_useState18","_useState19","_useState20","_useState21","_useState22","GHGEmissions","storeMaterials","cat","catName","countCat","entries","_ref2","i","_ref3","ChartFilledSingleCircleGHG","ProjectsAddMaterialCommentModal","userList","setUserList","loadUsers","users","apply","_toConsumableArray","getAuthor","findIndex","email","commentData","content","handleMaterialCommentSubmit","AccessControl","isReviewer","selectMaterialCommentModal","comments","dayjs","commentDate","format","materialInstanceCanComment","TableGetMaterialsByStore","materialsList","setMaterialsList","selectedMaterialData","setSelectedMaterialData","selectedMaterialComments","setSelectedMaterialComments","materialModal","setMaterialModal","handleClickSubmit","matId","getQuantityColor","ghgeTotAll","g","ghgeTotMin","ghgeDiff","rgbA","rgbB","r1","substring","g1","b1","r2","g2","b2","r","fontSize","padding","marginLeft","updateStoreLifecycleModalInfo","textLines","buttonTitleOk","onOk","buttonTitleCancel","StoreNavBar","setStore","pageName","setPageName","useHistory","dropdowns","visible","DRAFT","storeCanMarkAsDraft","AWAITING_REVIEW","storeCanSubmitForReview","storeCanMarkAsReviewed","ScorecardType","CONCEPT","storeCanProgressToAsBuilt","isAdmin","AS_BUILT","storeCanProgressToDecommission","kind","storeCanChangeDesigner","storeCanDownloadData","getDropdowns","dispatch","useDispatch","btns","action","storeCanView","storeCanEdit","storeCanViewReviewInfo","showModal","fromSc","toSc","fill","btn","active","push","makeStorePath","handleOnClick","dd","NavDropdown","Divider","hidden","body","encodeURIComponent","window","document","getElementById","click","designerId","designerIdClean","setDesigner","copyStoreMaterialsFromScorecardType","DECOMMISSIONED","fontWeight","getEndOLifeScenarioScore","endOLifeScenarioCalcParams","loadMaterialInstancesForScorecardType","setMaterialInstancesByScorecard","matList","mibsc","updatedMibsc","ProjectPhasePage","materialInstancesByScorecard","materialInfoDecomList","setMaterialInfoDecomList","setEndOLifeScenarioCalcParams","isTableEditable","lookupName","generateMaterialInfoDecomList","matInfoMap","readMatInst","matInstForSt","infoId","matInfo","instance","relativeImprovement","eolScenarioAsBuilt","eolScenarioDecom","scoreAsBuilt","calcRelImprov","parentMaterialInstanceId","values","arrayAvg","arr","reduce","arraySum","calcAverageTotalScore","scores","eol","eolScenario","avgTotalScoreAsBuilt","avgTotalScoreDecom","aveRelImprov","listWithScores","calcAverageRelImprovScore","renderEolCell","onChangeEolDecom","newEol","matInstId","matInfoDecomList","matInfoDecomListUpdated","matInfoItem","matInstItem","matInstItemUpdated","matInfoItemUpdated","updateMatInstEolField","matInstConcept","parentId","scenario","val","renderRelImprovCell","cursor","StoreLifecycleInfo","renderDecommissioningInfo","scorecardInfoListInitial","scorecardTypes","st","scorecardTypeTitle","materialInstanceCount","ghgeEmissions","storeTotalScore","scorecardInfoList","setScorecardInfoList","updateScorecardInfoListItem","currentScorecardInfoList","si","loadAllScorecardsInfo","sci","getStoreScoreForScorecardType","count","getMaterialInstanceCount","matInstForStList","sti","nextScorcardTypeInfo","getScorecardTypeInfoNext","nextScorcardTypeMaterialInstanceCount","s","makeStorePathView","makeStorePathMaterials","ProjectSummaryPage","DELETED","getStatusTitle","statusList","indexNext","getDesignerId","designerIdConcept","DesignerIdAsBuilt","DesignerIdDecom","getCurrentDesignerId","designerUserId","storeDataClean","scrollToTop","scrollTo","top","behavior","loadAllStores","setStoreList","stores","cleanStoreDataForDb","storeData","openingDate","Date","AdminStoresPage","storeList","usersAll","setUsersAll","setUsers","showDeleteConfirmModal","setShowDeleteConfirmModal","nameOfStoreToDelete","setNameOfStoreToDelete","showAdminToastMsg","setShowAdminToastMsg","adminToastMsg","setAdminToastMsg","currentStore","setCurrentStore","loadAllStoresAndSetState","DbObj","ofDb","u","role","UserRole","Admin","findUserById","handleStoreActionClick","path","updatedStores","_objStatus","DbObjStatus","CHANGED","renderStoreRowActions","handleDeleteConfirmModelClose","showToastMsg","msg","Toast","onClose","src","alt","Footer","userCreator","userDesignerId","userDesigner","to","DB","displayName","uStore","handleStoreCreatorChange","Viewer","Designer","Reviewer","_classCallCheck","_createClass","storeCanReview","isDesigner","isOwner","isDesignerOrAdmin","isDesignerOrReviewerOrAdmin","isReviewerOrAdmin","isCurrentDesigner","SAVING","SAVED","dbObj","localObj","toDb","authUser","password","gotUsers","AdminUsersPage","selectedUser","setSelectedUser","editUserModalIsVisible","setEditUserModalIsVisible","loadUsersAndSetState","_users","updatedUsers","saveUser","newOrUpdatedUser","updateUser","createUser","newUser","updatedUser","deleteUser","deletedUser","splice","renderAction","userValidation","flexDirection","columnGap","isValid","ResetPasswordModal","handleClose","handleSave","userBeingEdited","setUserBeingEdited","showPasswordField","setShowPasswordField","user1","controlId","autocorrect","spellcheck","autocomplete","readonly","onfocus","autoFocus","userToSave","flatMap","includes","validateUser","colspan","paddingBottom","handleNewUserClicked","clearLocalStorage","localStorage","removeItem","LoginForm","persistent","setPersistent","errorMsg","setErrorMsg","setEmail","setPassword","loggedInLocal","getItem","loggedInSession","sessionStorage","JSON","parse","handleLogin","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","setItem","stringify","message","stop","_x","arguments","Floating","htmlFor","_ref4","_React$useState","React","_React$useState2","modalShow","setModalShow","onClickLink","adminPageLinks","Offcanvas","Navbar","bg","expand","fluid","Brand","logo","activeKey","placement","Text","reload","colour","ChartsGlobalStores","parentPage","globalHighest","setGlobalHighest","globalAverageGHGEmissions","setGlobalAverageGHGEmissions","highestVal","globalLowest","HomePageContent","btnColWidth","storeCanCreate","HomePage","OverviewRegionTable","ANZStats","setANZstats","EuropeStats","setEuropeStats","EmeaStats","setEmeaStats","AsiaStats","setAsiaStats","AmericasStats","setAmericasStats","noStores","parseFloat","OverviewTopDesignersTable","topDesigners","setTopDesigners","topStores","setTopStores","tempDesigners","designer","tempStores","OverviewDonutChart","materialCounts","setMaterialCounts","materialCountTotal","setMaterialCountTotal","endOfLifeCounters","fr","pr","rp","ftrad","atbrr","tbs","nr","htmlLegend","containerID","formatter","CategoryScale","LinearScale","BarElement","OverviewBarChart","sourcingCounts","setSourcingCounts","sourcingCountsTotal","setSourcingCountsTotal","manufacturerSourcingCounters","globally","regionally","locally","stack","barPercentage","categoryPercentage","minWidth","layout","scales","x","y","OverviewFilters","Treemap","canvas","useRef","treeData","setTreeData","tempMaterials","rawMaterialCounters","treeObject","retm","reum","recm","prpvg","vgm","chart","current","tree","groups","ctx","raw","v","dataLabel","getColour","spacing","callbacks","treeValue","treeIndex","dataset","dataIndex","_data","_idx","getLabel","destroy","ref","TreemapController","TreemapElement","OverviewTreemapChart","renderMaterialScores","UserOverview","materialsLow","setMaterialsLow","materialsHigh","setMaterialsHigh","setuserProjects","setUserMaterials","userScoreAverage","setUserScoreAverage","userScoreHigh","setUserScoreHigh","userGHGAverage","setUserGHGAverage","tempHigh","highestRatedMaterials","tempLow","lowestRatedMaterials","slice","highestStoreScore","averageVal","ghgAverageVal","averageGHGEmissions","OverviewTopDesignersStoresTables","countryList","countryListRaw","code","cityList","cityListRaw","regionList","countries","marketingMediaType","currencyList","getCityListBasedOnCountry","random","findCountryFromName","countryName","getCountryListBasedOnRegionName","regionName","jsDateTimeToDateStr","dt","moment","ProjectCreateNew","editMode","storeDetailsStateDefault","setUsersArchitect","setUsersReviewer","storeDetailsState","setStoreDetailsState","countryListFiltered","setCountryListFiltered","getCityListBasedOnCountryName","cityListFiltered","setCityListFiltered","setCountryListBasedOnRegionName","setCityListBasedOnCountryName","usersArchitectTmp","usersReviewerTmp","l","setCityListBasedOnCountry","cl","calcBohSqm","isFinite","bohSqm","inputValue","storeDetailsStateUpdated","_defineProperty","saveProjectData","createStore","storeIdNew","handleSubmit","ready","renderForm","selected","leaseTermInYears","contractorId","custom","signedCoc","signedNda","treatmentSpace","pos","mpos","tapNumber","bathroom","otherSpace","susInitGreenspace","susInitRainwater","susInitSolarPV","susInitGreywater","susInitBattery","susInitVentilation","susInitComposting","CategoryMaterialsList","materialInstances","handleMaterialInstActionClick","Accordion","ProjectsAddMaterial","materialInstToEdit","setMaterialInstToEdit","selectMaterialModal","setSelectMaterialModal","currentStoreMaterials","setCurrentStoreMaterials","setEpicMaterials","getStoreScore","loadMaterialInstances","showMaterialModal","materialInst","storeCanAddMaterial","subCat","ProjectReviewPage","displayNameFromUserId","designerIdAsBuilt","designerIdDecom","SortTable","columns","list","_useTable","useTable","useSortBy","getTableProps","getTableBodyProps","headerGroups","prepareRow","firstPageRows","headerGroup","getHeaderGroupProps","getHeaderProps","getSortByToggleProps","isSorted","isSortedDesc","render","row","original","getRowProps","cells","cell","cellIndex","getCellProps","year","toString","getButtonTextAllStoresPage","ProjectsOverview","projectList","setProjectList","csvProjects","setCsvProjects","useMemo","accessor","CSVLink","filename","TableCertifications","certsList","setCertsList","cert","ecoLabel","materialCategory","prompt","link","TableGetAllStores","scoreCardType","storeIdRead","lookups","setLookups","lookupParent","lookupParents","setLookupParents","lookupParentsSelected","setLookupParentsSelected","epicData","setEpicData","epicCategoryList","setEpicCategoryList","epicCategorySelected","setEpicCategorySelected","epicTypeList","setEpicTypeList","epicTypeSelected","setEpicTypeSelected","epicMaterialList","setEpicMaterialList","_useState23","_useState24","epicMaterialSelected","setEpicMaterialSelected","_useState25","_useState26","epicUnitList","setEpicUnitList","_useState27","_useState28","epicUnitSelected","setEpicUnitSelected","_useState29","_useState30","useEffectCount","setUseEffectCount","lookupTable","resetMaterialsData","parent","categoryLookup","originId","roadTransportKms","railTransportKms","airTransportKms","oceanTransportKms","tempCatList","Set","tempTypeList","tempMaterialList","tempUnitList","materialsLookups","checkTypes","checkMaterials","filterCategory","filterType","checkMaterial","filterMaterials","checks","saveMaterialData","finally","PageNotFound","StoreLifecycleModal","info","setCreatorId","onButtonClick","line","StoreContainerPage","csvProject","setCsvProject","projectFileName","setProjectFilename","csvMaterialsCurrent","setCsvMaterialsCurrent","csvMaterialsAll","setCsvMaterialsAll","storeLifecycleModalInfo","useLocation","useRouteMatch","tempReparsed","parts","pathname","pageNameNew","Spinner","App","Router","Switch","Route","exact","component","AllProjectsPage","DynamicForm","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","reducer","createReducer","userDisplayName","builder","addCase","payload","configureStore","middleware","getDefaultMiddleware","logger","ReactDOM","StrictMode"],"mappings":"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GuD,KAAM,UAQV25B,GAAe,CACpB,CAAEl9B,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CAAEA,GAAI,OACN,CA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","file":"static/js/main.377b5bc3.chunk.js","sourcesContent":["import { createBrowserHistory } from \"history\";\r\n\r\nexport const history = createBrowserHistory();","import { createAction } from '@reduxjs/toolkit';\r\n\r\nexport const setUser = createAction('SET_USER');\r\nexport const setStoreId = createAction('SET_STORE_ID');\r\nexport const setMaterialId = createAction('SET_MATERIAL_ID');\r\n\r\nexport const setEditMode = createAction('SET_EDIT_MODE');\r\n\r\nexport const setBackendUrl = createAction('SET_BACKEND_URL');\r\n\r\n\r\n\r\nexport const setUserDisplayName = createAction('SET_USER_DISPLAY_NAME');\r\nexport const setUserId = createAction('SET_USER_ID');\r\nexport const setUserLoggedIn = createAction('SET_USER_LOGGED_IN');\r\n\r\nexport const setEpicMaterialsList = createAction('SET_EPIC_MATERIALS_LIST')\r\n\r\nexport const setStoreLifecycleModalInfo = createAction('SET_STORE_LIFECYCLE_MODAL_INFO')\r\n\r\n","// PRODUCTION\r\n// Config and shared variables for app\r\n\r\nexport const config = {\r\n\tversion: \"v1.8.2\",\r\n\t\r\n\tisDebugMode: false,\r\n\t// backendUrl: \"https://arup-aesop-backend-dev.azurewebsites.net\",\r\n\tbackendUrl: \"https://arup-aesop-backend-prod.azurewebsites.net\",\r\n\r\n\tbackendRequestConfig: {\r\n\t\theaders: {\r\n\t\t\taccept: \"application/json\"\r\n\t\t}\r\n\t}\r\n}","import React from \"react\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport Nav from 'react-bootstrap/Nav';\r\nimport Table from 'react-bootstrap/Table';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\n\r\nfunction HelpModal(props) {\r\n\t//const [show, setShow] = useState(false);\r\n\r\n\t//const handleClose = () => setShow(false);\r\n\t//const handleShow = () => setShow(true);\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tHelp \r\n\t\t\t \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tSourcing \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tRaw Materials \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tCircularity \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tCertifications \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tScorecard Rating \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tSourcing \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tWe encourage the use of locally sourced items, where possible. Items that have been manufactured overseas e.g. furniture, lighting, fittings may still be perceived as 'highly rated' if: \r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\tThe manufacturer offers second life programs or a recycling program \r\n\t\t\t\t\t\t\t\t\t\t\tThe item is 100% recoverable e.g. 100% Recyclable or Reusable \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tLocally Items that have been sourced locally within the city/providence \r\n\t\t\t\t\t\t\t\t\t\tRegionally Items that have been sourced within the region \r\n\t\t\t\t\t\t\t\t\t\tInternationally Items that have been sourced internationally\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tRaw Materials \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tThis section is used to capture information about where the material/item originated whether new, recycled, reused or retained.\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tMaterial grade \r\n\t\t\t\t\t\t\t\t\t\t\t\tDescription \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tVirgin Grade \r\n\t\t\t\t\t\t\t\t\t\t\t\tRefers to items that are new \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tPart Recycled, part virgin grade \r\n\t\t\t\t\t\t\t\t\t\t\t\tRefer to items that have some components that are recycled material and some virgin grade e.g. an item that is newly manufactured using recycled components \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tRecycled Material \r\n\t\t\t\t\t\t\t\t\t\t\t\tRefers to items that are made of 100% recycled material e.g. aluminium \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tReused Material \r\n\t\t\t\t\t\t\t\t\t\t\t\tRefers to material/items that have been reclaimed from other locations e.g. timber \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tRecycled Material \r\n\t\t\t\t\t\t\t\t\t\t\t\tRefers to material/items that was already present in the current location e.g. plasterboard walls or ceiling \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tCircularity \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tThe recoverability of an item/material is required to determine the decommission rating of a location prior to the store build.\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tMaterial grade \r\n\t\t\t\t\t\t\t\t\t\t\t\tDescription \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tNot Recyclable \r\n\t\t\t\t\t\t\t\t\t\t\t\tThe item is unable to be reused, repurposed or recycled \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tPart Recyclable \r\n\t\t\t\t\t\t\t\t\t\t\t\tThe item can be partially recycled and partially discarded \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tFully Recyclable \r\n\t\t\t\t\t\t\t\t\t\t\t\tThe item can be recycled as a whole. This may include an item that is disassembled/separated with all components sent for recycling \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tAble to be reused/repurposed \r\n\t\t\t\t\t\t\t\t\t\t\t\tThe item is reused or repurposed into another Aesop location (stores, counters or offices) \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tRecycling Program \r\n\t\t\t\t\t\t\t\t\t\t\t\tThe item can be provided to a recycling program and remade into a new product \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tTakeback Scheme \r\n\t\t\t\t\t\t\t\t\t\t\t\tThe item can be returned to the manufacturer to responsibly recycled or reused to make new products \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tCertifications \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tCertifications are to be used to assist with procuring items from a manufacturer that is socially and environmentally responsible eg. Has the manufacturer considered the lifecycle of their product? Including ethical sourcing.\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tThere are many certifications that can be found globally, and others that are region or country specific. A product certifications database is available to explore in order to aid in the search for more sustainable materials. The database also aims to highlight the most valuable types of product certification and call out others that might be green-washed.\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tScorecard Rating \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t[scorecard description and weighting needed] \r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tRating \r\n\t\t\t\t\t\t\t\t\t\t\t\tRange \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tLow Rating \r\n\t\t\t\t\t\t\t\t\t\t\t\t0-49 \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tMedium Rating \r\n\t\t\t\t\t\t\t\t\t\t\t\t50-69 \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tHigh Rating \r\n\t\t\t\t\t\t\t\t\t\t\t\t70+ \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\r\n{/* \t\t\t\r\n\r\n\t\t\t */}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default HelpModal;\r\n","export default __webpack_public_path__ + \"static/media/aesop-logo.bc45b302.svg\";","import React, { useState } from \"react\";\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Form from 'react-bootstrap/Form';\r\nimport './../index.css';\r\nimport { Store, updateStore } from \"./AdminStoresPage\";\r\nimport { useSelector } from \"react-redux\"\r\n\r\nfunction ProjectsAddProjectCommentModal(props) {\r\n\tconst { store, onSuccess } = props\r\n\tconst [finalComments, setFinalComments] = useState(\"\")\r\n\tconst [status, setStatus] = useState(\"\")\r\n\tconst user = useSelector((state) => state.user)\r\n\r\n\tconst handleProjectCommentSubmit = (e) => {\r\n\t\te.preventDefault()\r\n\r\n\t\tconst updatedStore = {\r\n\t\t\t...store,\r\n\t\t\treviewComment: finalComments,\r\n\t\t\treviewerId: user.id,\r\n\t\t\tstoreStatus: Store.Status.REVIEWED,\r\n\t\t\treviewRequired: 0\r\n\t\t}\r\n\r\n\t\tupdateStore(updatedStore, () => {\r\n\t\t\tprops.onHide()\r\n\t\t\tsetFinalComments(\"\")\r\n\t\t\tonSuccess && onSuccess(updatedStore)\r\n\t\t}, err => {\r\n\t\t\tsetStatus(err)\r\n\t\t})\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tComplete Store Review \r\n\t\t\t \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tFinal Comments\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\t setFinalComments(e.target.value) }\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tSubmit\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{status}
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t \r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default ProjectsAddProjectCommentModal;","/** To get a unique list of array items */\r\nexport const onlyUnique = (value, index, self) => self.indexOf(value) === index\r\n\r\n/** String comparer function for sorting a list of objects */\r\nexport const sortByFieldAsc = fieldName => (objA, objB) => {\r\n\tlet a = objA[fieldName].toLowerCase()\r\n\tlet b = objB[fieldName].toLowerCase()\r\n\r\n\tif (a < b) {\r\n\t\treturn -1\r\n\t} else if (a > b) {\r\n\t\treturn 1\r\n\t} else {\r\n\t\treturn 0\r\n\t}\r\n}\r\n\r\n/** Make sure a value is a string, if undefined then return empty string */\r\nexport const ensureString = (maybeStr) => {\r\n\tif (maybeStr === 0) {\r\n\t\treturn \"0\"\r\n\t} else if (maybeStr) {\r\n\t\treturn String(maybeStr)\r\n\t} else {\r\n\t\treturn \"\"\r\n\t}\r\n}\r\n\r\nexport const formatScore = (score) => {\r\n\tif (score === 0) {\r\n\t\treturn \"0\"\r\n\t} else if (!score) {\r\n\t\treturn \"\"\r\n\t} else if (isNaN(score) === false) {\r\n\t\treturn Number(score).toFixed(0)\r\n\t} else {\r\n\t\tconsole.error(\"Could not understand score =\", score)\r\n\t\treturn \"\"\r\n\t}\r\n}\r\n\r\nexport const formatGhge = formatScore\r\n\r\nexport const formatPercentage = (perc) => {\r\n\tif (!perc) {\r\n\t\treturn \"0\"\r\n\t} else if (perc === 0) {\r\n\t\treturn 0\r\n\t} else if (isNaN(perc) === false) {\r\n\t\t// Math.round(perc * 100) / 100\r\n\t\treturn Number(perc).toFixed(1)\r\n\t} else {\r\n\t\tconsole.error(\"Could not understand perc =\", perc)\r\n\t\treturn \"\"\r\n\t}\r\n}\r\n\r\n/** Format relative improvement score from decommission scorecard */\r\nexport const formatRelImprov = (ratio) => {\r\n\treturn formatPercentage(ratio)\r\n}\r\n\r\n/** Make superscripts look good */\r\nexport const formatUnit = (unit) => {\r\n\tconst formatted =\r\n\t\tunit\r\n\t\t.replace(\"^2\", \"²\")\r\n\t\t.replace(\"^3\", \"³\")\r\n\t\r\n\treturn formatted\r\n}\r\n\r\n/** Make superscripts look good but show nothing when unit is \"number\" */\r\nexport const formatUnitForDisplay = (unit) => {\r\n\tif (unit === \"number\") {\r\n\t\treturn \"\"\r\n\t} else {\r\n\t\treturn formatUnit(unit)\r\n\t}\r\n}\r\n\r\n/** Calculate the total GHGE in kg and provide some additional info */\r\nexport const calcTotalGhge = (matInst) => {\r\n\tconst totGhge = matInst.materialQuantity * matInst.embodiedGHGE\r\n\tconst totGhgeFormatted = formatGhge(totGhge)\r\n\r\n\tif (matInst.rawMaterial === \"Retained\" || matInst.rawMaterial === \"Reused\") {\r\n\t\treturn {\r\n\t\t\tvalue: 0,\r\n\t\t\tformatted: formatGhge(0),\r\n\t\t\tdisplay: `${totGhgeFormatted} kgCO2e`,\r\n\t\t\tcalcInfo: `Retained/reused materials have total GHGE = 0\\nOriginal GHGE = ${totGhgeFormatted} kgCO2e`\r\n\t\t}\r\n\t} else {\r\n\t\treturn {\r\n\t\t\tvalue: totGhge,\r\n\t\t\tformatted: totGhgeFormatted,\r\n\t\t\tdisplay: `${totGhgeFormatted} kgCO2e`,\r\n\t\t\tcalcInfo: `= Quantity * Embodied GHGE per unit\\n= ${matInst.materialQuantity} * ${matInst.embodiedGHGE}`\r\n\t\t}\r\n\t}\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Form from 'react-bootstrap/Form';\r\nimport './../index.css';\r\n// import subCategoryMappingsOld from '../data/2023 AESOP - Sub list definition - scorecards_clean.json'\r\nimport subCategoryMappings from '../data/20230203 Materials - Epic and Artemis Checks.json'\r\nimport { calcTotalGhge, ensureString, formatUnit, onlyUnique } from '../HelperFunctions'\r\nimport { sortByFieldAsc } from '../HelperFunctions'\r\nimport { createMaterialInstance, updateMaterialInstance } from \"./AdminMaterialsPage\";\r\n\r\nexport const certDbButton = (\r\n\t\r\n\t\tCertification Database \r\n\t \r\n)\r\n\r\n// This field is set on the backend, see lookups.go\r\nconst categories = [\r\n\t{ name: \"Core structure & finish\" },\r\n\t{ name: \"Module units\" },\r\n\t{ name: \"Furniture & fittings\" },\r\n]\r\n\r\n// This is not the full list.\r\n// See artemis checks json file\r\nexport const subCategories =\r\n/* \tsubCategoryMappings\r\n\t.map(scm => scm.SubCategories)\r\n\t.flat()\r\n\t.filter(onlyUnique)\r\n\t.sort()\r\n\t.map(n => ({ name: n })) */\r\n[\r\n\t{ name: \"Flooring\" },\r\n\t{ name: \"Wall\" },\r\n\t{ name: \"Ceiling\" },\r\n\t{ name: \"Facade\" },\r\n\t{ name: \"POS\" },\r\n\t{ name: \"Product shelving\" },\r\n\t{ name: \"BOH\" },\r\n\t{ name: \"Basin\" },\r\n\t{ name: \"Furniture\" },\r\n\t{ name: \"Lighting\" },\r\n\t{ name: \"Fixtures\" },\r\n]\r\n\r\n// Not used?\r\nexport const categoryLookup = [\r\n\t{ name: \"Flooring\", parent: \"Core structure & finish\" },\r\n\t{ name: \"Wall\", parent: \"Core structure & finish\" },\r\n\t{ name: \"Ceiling\", parent: \"Core structure & finish\" },\r\n\t{ name: \"Facade\", parent: \"Core structure & finish\" },\r\n\t{ name: \"POS\", parent: \"Module units\" },\r\n\t{ name: \"Product shelving\", parent: \"Module units\" },\r\n\t{ name: \"BOH\", parent: \"Module units\" },\r\n\t{ name: \"Basin\", parent: \"Module units\" },\r\n\t{ name: \"Furniture\", parent: \"Furniture & fittings\" },\r\n\t{ name: \"Lighting\", parent: \"Furniture & fittings\" },\r\n\t{ name: \"Fixtures\", parent: \"Furniture & fittings\" },\r\n]\r\n\r\n// export const units = [\r\n// \t{ id: 1, name: \"kg\" },\r\n// \t{ id: 2, name: \"m\" },\r\n// \t{ id: 3, name: \"m^2\" },\r\n// \t{ id: 4, name: \"m^3\" },\r\n// \t{ id: 5, name: \"number\" },\r\n// ];\r\n\r\nexport const units =\r\n\tsubCategoryMappings\r\n\t\t.map(scm => scm[\"Functional unit\"])\r\n\t\t.flat()\r\n\t\t.filter(onlyUnique)\r\n\t\t.sort()\r\n\t\t.map(n => ({ id: n, name: n }))\r\n\r\nconst location = [\r\n\t{ id: 1, name: \"Locally\", title: \"Local (0 to 1,000km)\"},\r\n\t{ id: 2, name: \"Regionally\", title: \"Regional (1,000 to 10,000km)\"},\r\n\t{ id: 3, name: \"Globally\", title: \"Global (10,000km +)\"},\r\n]\r\n\r\nconst rawMaterial = [\r\n\t{ id: 1, name: \"Retained\" },\r\n\t{ id: 2, name: \"Reused\" },\r\n\t{ id: 3, name: \"Recycled\" },\r\n\t{ id: 4, name: \"Partly Recycled\" },\r\n\t{ id: 5, name: \"Virgin\" },\r\n];\r\n\r\nconst primaryTransport = [\r\n\t{ id: 1, name: \"Road\" },\r\n\t{ id: 2, name: \"Rail\" },\r\n\t{ id: 3, name: \"Air\" },\r\n\t{ id: 4, name: \"Sea\" },\r\n];\r\n\r\nexport const endOfLifeAssessment = [\r\n\t{ id: 1, name: \"Not recyclable\" },\r\n\t{ id: 2, name: \"Part recyclable\" },\r\n\t{ id: 3, name: \"Fully recyclable\" },\r\n\t{ id: 4, name: \"Recycling program\" },\r\n\t{ id: 5, name: \"Able to be reused/repurposed\" },\r\n\t{ id: 6, name: \"Finish to remain after decommission\" },\r\n\t{ id: 7, name: \"Takeback Scheme\" }\r\n];\r\n\r\nconst certification = [\r\n\t{ id: 1, name: \"Aluminum Stewardship Initiative\" },\r\n\t{ id: 2, name: \"Cradle to Cradle\" },\r\n\t{ id: 3, name: \"Declare\" },\r\n\t{ id: 4, name: \"Forest Stewardship Council (FSC) certification\" },\r\n\t{ id: 5, name: \"Global Green Tag\" },\r\n\t{ id: 6, name: \"Green Tick\" },\r\n\t{ id: 7, name: \"Not Certified\" },\r\n\t{ id: 8, name: \"Other\" },\r\n\t{ id: 9, name: \"Programme for the Endorsement of Forest Certification (PEFC)\" },\r\n\t{ id: 10, name: \"Smart Certified\" },\r\n\t{ id: 11, name: \"Retained\" }\r\n]\r\n\r\n// const materialDataList = subCategoryMappingsOld.map(scm => {\r\n// \treturn {\r\n// \t\tmaterial: scm.Material,\r\n// \t\tcategory: scm.Category,\r\n// \t\tsubCategories: scm.SubCategories\r\n// \t}\r\n// })\r\n\r\nexport const materialDataList = subCategoryMappings.map(scm => {\r\n\treturn {\r\n\t\tmaterial: scm.Material,\r\n\t\tcategory: scm.Category,\r\n\t\tsubCategories: scm.SubCategories,\r\n\t\tfunctionalUnit: scm[\"Functional unit\"]\r\n\t}\r\n})\r\n\r\nlet materialDataDefault = {\r\n\tsubCategory: \"\",\r\n\titemType: \"\",\r\n\tmaterialQuantity: \"\",\r\n\tunit: \"\",\r\n\tmaterialDescription: \"\",\r\n\trawMaterial: \"\",\r\n\tendOfLifeAssessment: \"\",\r\n\tproductCertification: \"\",\r\n\tsupplierName: \"\",\r\n\tsupplierLocation: \"\",\r\n\tmanufacturerName: \"\",\r\n\tmanufacturerLocation: \"\",\r\n\tprimaryTransportMethod: \"\",\r\n\r\n\t// materialTypeId: \"\",\r\n\t// materialStatus: \"\",\r\n\t// createdDate: \"\",\r\n\t// originId: \"\",\r\n\t// storeId: \"\",\r\n\t// category: \"\",\r\n\t// roadTransportKms: \"\",\r\n\t// railTransportKms: \"\",\r\n\t// airTransportKms: \"\",\r\n\t// oceanTransportKms: \"\",\r\n\t// creatorId: \"\",\r\n}\r\n\r\nfunction ProjectsNewMaterialModal({show, materialInstance, onHide, store, epicMaterials}) {\r\n\tconst storeId = Number(store.id)\r\n\tconst isEditMode = !!materialInstance\r\n\r\n\tconst [validated, setValidated] = useState(false);\r\n\tconst [filteredMaterialDataList, setFilteredMaterialDataList] = useState([])\r\n\r\n\tconst userId = useSelector((state) => state.userId)\r\n\tconst userLoggedIn = useSelector((state) => state.userLoggedIn)\r\n\tconst backendUrl = useSelector((state) => state.backendUrl)\r\n\t// const storeId = useSelector((state) => state.storeId)\r\n\t// const storeIdRead = storeId\r\n\r\n\tconst dbCustomMaterials = epicMaterials.filter(dbMat => dbMat.dataSource === \"Custom\")\r\n\t// console.log(\"dbCustomMaterials\", dbCustomMaterials)\r\n\r\n\tconst newMaterialInstance = {\r\n\t\t\t...materialDataDefault,\r\n\t\t\tstoreId: storeId,\r\n\t\t\tscorecardType: store.scorecardType,\r\n\t\t\tcreatorId: parseInt(userId),\r\n\t\t}\r\n\r\n\tconst initialMaterialData = isEditMode ? materialInstance : newMaterialInstance\r\n\t// console.log('materialInstance', materialInstance)\r\n\t// console.log('initialMaterialData', initialMaterialData)\r\n\r\n\tconst [materialData, setMaterialData] = useState(initialMaterialData)\r\n\r\n\t/**\r\n\t * Only call this once per cycle since it will not update the state immediately,\r\n\t * and it may end up only performing the last update!!\r\n\t */\r\n\tconst updateMaterialDataField = (fieldName, fieldVal) => {\r\n\t\t// console.log(\"updateMaterialDataField\", fieldName, \"=>\", fieldVal)\r\n\t\tlet updatedMaterialData = { ...materialData }\r\n\t\tupdatedMaterialData[fieldName] = fieldVal\r\n\t\tsetMaterialData(updatedMaterialData)\r\n\t}\r\n\r\n\tconst updateMaterialDataFields = (updatedFields) => {\r\n\t\tsetMaterialData({\r\n\t\t\t...materialData,\r\n\t\t\t...updatedFields\r\n\t\t})\r\n\t}\r\n\r\n\tconst filterMaterialListBySubCategory = (subCategory) => {\r\n\t\t// console.log(\"Filter by:\", subCategory)\r\n\r\n\t\tconst dbCustomMaterialsFiltered =\r\n\t\t\tdbCustomMaterials\r\n\t\t\t.filter(item => item.subCategoriesList && item.subCategoriesList.indexOf(subCategory) != -1) // filter by subcategory\r\n\r\n\t\tconst filtered =\r\n\t\t\tmaterialDataList\r\n\t\t\t\t.filter(item => item.subCategories && item.subCategories.indexOf(subCategory) != -1) // filter by subcategory\r\n\t\t\t\t.map(item => {\r\n\t\t\t\t\t// replace with db item\r\n\t\t\t\t\treturn epicMaterials.find(dbMat => dbMat.material === item.material)\r\n\t\t\t\t}) \r\n\t\t\t\t.filter(item => !!item) // filter undefined\r\n\t\t\t\t.filter(item => item.isActive) // filter by DB IsActiveField\r\n\t\t\t\t.concat(dbCustomMaterialsFiltered) // Add our custom materials\r\n\t\t\t\t.sort(sortByFieldAsc('material'))\r\n\r\n\t\tsetFilteredMaterialDataList(filtered)\r\n\t\t// console.log('filtered material list', filtered)\r\n\r\n\t\t// Don't use: overwrites already set materialData!\r\n\t\t// if the currently selected material (materialTypeId) is not in the filtered list, then clear it\r\n\t\t// if (!filtered.find(mat => mat.material === materialData.itemType)) {\r\n\t\t// \tupdateMaterialDataField(\"materialTypeId\", undefined)\r\n\t\t// }\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconsole.log('ProjectsNewMaterialModal.useEffect')\r\n\t\tconsole.log('materialInstance', materialInstance)\r\n\r\n\t\tif (materialInstance) {\r\n\t\t\tsetMaterialData(materialInstance)\r\n\t\t\tfilterMaterialListBySubCategory(materialInstance.subCategory)\r\n\t\t} else {\r\n\t\t\tsetMaterialData(newMaterialInstance)\r\n\t\t}\r\n\t}, [materialInstance])\r\n\r\n\tconst onChange = (e) => {\r\n\r\n\t\t// console.log(\"material check\")\r\n\t\tconst fieldName = e.target.name\r\n\t\t// console.log(fieldName, '=', e.target.value);\r\n\t\t// console.dir(fieldName);\r\n\r\n\t\tif (fieldName === \"subCategory\") {\r\n\t\t\tconst subCategory = e.target.value\r\n\t\t\tupdateMaterialDataField(fieldName, subCategory)\r\n\t\t\t//filteredMaterialDataList\r\n\r\n\t\t\t// console.log('dbCustomMaterials', dbCustomMaterials)\r\n\r\n\t\t\tfilterMaterialListBySubCategory(subCategory)\r\n\t\t\t\r\n\t\t\t//let testList = filteredMaterialDataList.filter(item => item.subCategories.indexOf(subCategory) != -1)\r\n\t\t\t//console.log(testList)\r\n\t\t} else if (fieldName === \"itemType\") {\r\n\t\t\t// Set the functional unit after the material (item type) is selected\r\n\t\t\t// find the material\r\n\t\t\tconst materialId = Number(e.target.value)\r\n\t\t\tconst material = filteredMaterialDataList.find(epicMat => epicMat.id === materialId)\r\n\r\n\t\t\tlet updatedFields = {}\r\n\t\t\tupdatedFields[\"materialTypeId\"] = materialId\r\n\t\t\tupdatedFields[\"itemType\"] = material.material\r\n\r\n\t\t\tif (material) {\r\n\t\t\t\tupdatedFields[\"unit\"] = material.functionalUnit\r\n\t\t\t}\r\n\r\n\t\t\tupdateMaterialDataFields(updatedFields)\r\n\t\t} else if (Number(e.target.value)) {\r\n\t\t\t// console.log(\"numeric field\");\r\n\t\t\tupdateMaterialDataField(fieldName, Number(e.target.value));\r\n\t\t\tif (fieldName == \"primaryTransport\") {\r\n\t\t\t\t// console.log(\"primarytransport\")\r\n\t\t\t\t// console.log(e.target.value);\r\n\t\t\t}\r\n\t\t} else if (e.target.type == \"checkbox\") {\r\n\t\t\t// console.log(e.target.type);\r\n\t\t\t// console.log(e.target.checked);\r\n\t\t\tupdateMaterialDataField(fieldName, e.target.checked);\r\n\t\t} else if (e.target.type == \"radio\") {\r\n\t\t\t// console.log(e.target.type);\r\n\t\t\tupdateMaterialDataField(fieldName, e.target.value);\r\n\t\t} else {\r\n\t\t\t// console.log(\"non-numeric field\");\r\n\t\t\tupdateMaterialDataField(fieldName, e.target.value);\r\n\t\t}\r\n\t\t\r\n\t\t// console.log('materialData', materialData)\r\n\t}\r\n\t\r\n\t// Create a new material instance\r\n\tconst saveMaterialData = () => {\r\n\t\tcreateMaterialInstance(materialData, store.scorecardType, (responseData => {\r\n\t\t\tonHide()\r\n\t\t\tsetMaterialData(newMaterialInstance) // clear the form\r\n\t\t}))\r\n\t}\r\n\r\n\t// Update existing material instance\r\n\tconst updateMaterialData = () => {\r\n\t\tupdateMaterialInstance(materialData, store.scorecardType, (updatedMatInst => {\r\n\t\t\tonHide()\r\n\t\t\tsetMaterialData(newMaterialInstance) // clear the form\r\n\t\t}))\r\n\t}\r\n\r\n\tconst handleSubmit = (event) => {\r\n\t\tconst form = event.currentTarget;\r\n\t\tif (form.checkValidity() === false) {\r\n\t\t\t// console.log(\"false\");\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\tsetValidated(true);\r\n\t\t} else if (form.checkValidity() === true) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\t// console.log(\"true\");\r\n\t\t\t\r\n\t\t\tif (isEditMode) {\r\n\t\t\t\tupdateMaterialData()\r\n\t\t\t} else {\r\n\t\t\t\tsaveMaterialData()\r\n\t\t\t}\r\n\r\n\t\t\tsetValidated(false);\r\n\t\t}\r\n\t};\r\n\r\n\t// console.log('materialData.render', materialData);\r\n\r\n\t// We need the EmbodiedGHGE from the epic material\r\n\tconst materialId = Number(materialData.materialTypeId)\r\n\tconst material = filteredMaterialDataList.find(epicMat => epicMat.id === materialId)\r\n\tconst materialDataForCalc = material && {\r\n\t\t...materialData,\r\n\t\tembodiedGHGE: material.embodiedGHGE\r\n\t}\r\n\tconst totGhgeInfo = material ? calcTotalGhge(materialDataForCalc) : {}\r\n\r\n\tconst materialNameCharWidth = 55\r\n\r\n\t/**\r\n\t * Render some spaces after the material name.\r\n\t * This is not exact since we are not using a monospace font\r\n\t **/\r\n\tconst spacesBeforeGhge = (materialName) => {\r\n\t\tconst spaceCount = Math.max(materialNameCharWidth - materialName.length, 4)\r\n\t\treturn new Array(spaceCount).join(String.fromCharCode(160))\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{isEditMode ? \"Edit Material: \" + materialData.itemType : \"Create New Material\"} \r\n\t\t\t \r\n\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\tCategory\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{categories.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCategory\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{subCategories.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t{/* This is epicmaterial.material */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tMaterial\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{filteredMaterialDataList.length > 0 ? \"Please Select\" : \"Select a Sub-Category first\"} \r\n\t\t\t\t\t\t\t\t{filteredMaterialDataList.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.material}{spacesBeforeGhge(m.material)}{m.embodiedGHGE} kgCO2e/{formatUnit(m.functionalUnit)} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tQuantity\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{formatUnit(materialData.unit)} \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{totGhgeInfo.formatted} kgCO2e \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t- \r\n\t\t\t\t\t\t\t\t{units.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{formatUnit(m.name)} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDescription\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tRaw Material\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{rawMaterial.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tEnd of Life Scenario\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{endOfLifeAssessment.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\tProduct Certification \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSelect Certification\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{certification.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t{certDbButton}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\tSourcing Distance \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSupplier\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSupplier Location\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{location.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.title} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tManufacturer\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tManufacturer Location\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{location.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.title} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tPrimary transport\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{primaryTransport.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n{/* \t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tRoad Transport (km)\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tRail Transport (km)\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tAir Transport (km)\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tOcean Transport (km)\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t {isEditMode ? \"Update Material\" : \"Add material\"}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{ setMaterialData(newMaterialInstance); onHide() }}\r\n\t\t\t\t\t\t\t\tclassName=\"pe-2 w-50\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\r\n\t\t\t \r\n\t\t\t{/*\r\n\t\t\t\r\n\t\t\t */}\r\n\r\n\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default ProjectsNewMaterialModal;","import React, { useEffect, useState } from \"react\";\r\nimport { useSelector } from 'react-redux';\r\nimport axios from 'axios';\r\nimport Header from \"./Header\";\r\nimport Button from 'react-bootstrap/Button';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Dropdown from 'react-bootstrap/Dropdown'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport Form from 'react-bootstrap/Form'\r\nimport Row from 'react-bootstrap/Row';\r\nimport Table from 'react-bootstrap/Table'\r\nimport Col from 'react-bootstrap/Col'\r\nimport { subCategories, units } from './ProjectsNewMaterialModal'\r\nimport { config } from '../config'\r\nimport { useParams } from 'react-router-dom'\r\nimport { ensureString, formatUnit } from \"../HelperFunctions\";\r\n\r\nconst isActiveFieldInfo = \"Whether the material is shown in the UI to be selected for a store\"\r\n\r\nexport const SUB_CATEGORY_SEPARATOR = '|' // for storing in a single DB field\r\n\r\nconst defaultFormMaterial = {\r\n\tdataSource: \"Custom\",\r\n\tmaterial: \"\",\r\n\tsubCategories: \"\",\r\n\tsubCategoriesList: [],\r\n\tfunctionalUnit: \"\",\r\n\tmassPerFunctionalUnit: 1,\r\n\t// embodiedGHGEPerUnit: \"\",\r\n\t// embodiedGHGEUnit: \"\",\r\n\t// GHGEUnitPerFunctionalUnit: \"\",\r\n\t// embodiedGHGE: \"\", // GHGE per functional unit\r\n\t// embodiedEnergy: \"\",\r\n\t// embodiedWater: \"\",\r\n\tisActive: true,\r\n\tmoreInformationUrl: \"\"\r\n}\r\n\r\nexport const loadAllMaterials = (setMaterialListFn) => {\r\n\taxios.get(`${config.backendUrl}/epicMaterials`)\r\n\t\t.then(function (response) {\r\n\t\t\t// split the subCategories field\r\n\t\t\tconst materialsDbList = (response.data || []).map(mat => {\r\n\t\t\t\tmat.subCategoriesList = (mat.subCategories || \"\").split(SUB_CATEGORY_SEPARATOR)\r\n\t\t\t\treturn mat\r\n\t\t\t})\r\n\t\t\tsetMaterialListFn(materialsDbList)\r\n\t\t})\r\n\t\t.catch(function (error) {\r\n\t\t\tconsole.log(error);\r\n\t\t})\r\n}\r\n\r\nexport const getMaterialInstanceCount = (storeId, scorecardType, onSuccess, onError) => {\r\n\taxios.get(`${config.backendUrl}/materialInstanceCount/${storeId}/${scorecardType}`)\r\n\t\t.then(function (response) {\r\n\t\t\tconst count = response.data\r\n\t\t\tonSuccess && onSuccess(count)\r\n\t\t})\r\n\t\t.catch(function (response) {\r\n\t\t\tconst error = response && response.data\r\n\t\t\tconsole.log(error);\r\n\t\t\tonError && onError(error)\r\n\t\t});\r\n}\r\n\r\nexport const deleteMaterialInstance = (materialInstanceId, onSuccess, onError) => {\r\n\taxios.delete(`${config.backendUrl}/materialInstances/${materialInstanceId}`)\r\n\t\t.then(function (response) {\r\n\t\t\tonSuccess && onSuccess(response.data)\r\n\t\t})\r\n\t\t.catch(response => {\r\n\t\t\tconsole.error('Error deleting materialInstance', response)\r\n\t\t\tonError && onError(response && response.data)\r\n\t\t})\r\n}\r\n\r\nconst cleanMaterialDataForDb = (materialData, storeScorecardType) => {\r\n\tconst clean = {...materialData}\r\n\tdelete clean[\"embodiedGHGE\"] // from the SQL join, so not actually in db table\r\n\r\n\t// Convert string fields to string in case they were entered as numbers,\r\n\t// which JS will convert to a number and then the go server will error.\r\n\tclean.scorecardType = ensureString(clean.scorecardType)\r\n\tclean.materialStatus = ensureString(clean.materialStatus)\r\n\tclean.unit = ensureString(clean.unit)\r\n\tclean.createdDate = ensureString(clean.createdDate)\r\n\tclean.supplierLocation = ensureString(clean.supplierLocation)\r\n\tclean.manufacturerLocation = ensureString(clean.manufacturerLocation)\r\n\tclean.supplierName = ensureString(clean.supplierName)\r\n\tclean.manufacturerName = ensureString(clean.manufacturerName)\r\n\tclean.rawMaterial = ensureString(clean.rawMaterial)\r\n\tclean.endOfLifeAssessment = ensureString(clean.endOfLifeAssessment)\r\n\tclean.category = ensureString(clean.category)\r\n\tclean.subCategory = ensureString(clean.subCategory)\r\n\tclean.itemType = ensureString(clean.itemType)\r\n\tclean.productCertification = ensureString(clean.productCertification)\r\n\tclean.materialDescription = ensureString(clean.materialDescription)\r\n\tclean.circularityAssessment = ensureString(clean.circularityAssessment)\r\n\tclean.primaryTransportMethod = ensureString(clean.primaryTransportMethod)\r\n\r\n\tclean.scorecardType = storeScorecardType\r\n\treturn clean\r\n}\r\n\r\nexport const createMaterialInstance = (matInst, storeScorecardType, onSuccess, onError) => {\r\n\taxios.post(`${config.backendUrl}/materialInstance`, cleanMaterialDataForDb(matInst, storeScorecardType))\r\n\t\t.then(function (response) {\r\n\t\t\tonSuccess && onSuccess(response.data)\r\n\t\t})\r\n\t\t.catch(response => {\r\n\t\t\tconsole.error('Error creating materialInstance', response)\r\n\t\t\tonError && onError(response && response.data)\r\n\t\t})\r\n}\r\n\r\nexport const updateMaterialInstance = (matInst, storeScorecardType, onSuccess, onError) => {\r\n\taxios.put(`${config.backendUrl}/materialInstances/${matInst.id}`, cleanMaterialDataForDb(matInst, storeScorecardType))\r\n\t\t.then(function (response) {\r\n\t\t\tonSuccess && onSuccess(response.data)\r\n\t\t})\r\n\t\t.catch(response => {\r\n\t\t\tconsole.error('Error updating materialInstance', response)\r\n\t\t\tonError && onError(response && response.data)\r\n\t\t})\r\n}\r\n\r\n/** Get all the material instances for a store. \r\n * If the scorecardType is not provided, store.scorecardType is \r\n * used to filter materials.\r\n */\r\nexport const getMaterialInstancesForStore = (storeId, scorecardType, onSuccess, onError) => {\r\n\tconst url =\r\n\t\tscorecardType\r\n\t\t? `${config.backendUrl}/materialInstancesByStore/${storeId}/${scorecardType}`\r\n\t\t: `${config.backendUrl}/materialInstancesByStore/${storeId}`\r\n\r\n\taxios.get(url)\r\n\t\t.then(function (response) {\r\n\t\t\tconst matInstList = response.data\r\n\t\t\tonSuccess && onSuccess(matInstList)\r\n\t\t})\r\n\t\t.catch(function (error) {\r\n\t\t\tconsole.log(error)\r\n\t\t\tonError && onError(error)\r\n\t\t});\r\n}\r\n\r\nconst AddNewMaterialModal = ({ show, onHide, isEditMode, material, updateEpicMaterial, createEpicMaterial }) => {\r\n\r\n\t// const [filteredItemTypes, setFilteredItemTypes] = useState(materialItemTypes);\r\n\tconst [subCategoryIsChecked, setSubCategoryIsChecked] = useState({});\r\n\tconst [validated, setValidated] = useState(false);\r\n\r\n\tconst updateSubCategoryFieldIsChecked = (subCategoryName, isChecked) => {\r\n\t\tvar subCategoryIsCheckedUpdated = { ...subCategoryIsChecked }\r\n\t\tsubCategoryIsCheckedUpdated[subCategoryName] = isChecked\r\n\t\tsetSubCategoryIsChecked(subCategoryIsCheckedUpdated)\r\n\t\t// console.log('subCategoryIsCheckedUpdated', subCategoryIsCheckedUpdated)\r\n\r\n\t\treturn subCategoryIsCheckedUpdated\r\n\t}\r\n\r\n\t// console.log('subCategoryIsChecked', subCategoryIsChecked)\r\n\r\n\tconst [formMaterial, setFormMaterial] = useState(defaultFormMaterial)\r\n\r\n\tuseEffect(() => {\r\n\t\tconsole.log('AddNewMaterialModal.useEffect', material)\r\n\t\tif (isEditMode === true && material) {\r\n\t\t\t// some old materials may not have all fields set, so set defaults\r\n\t\t\tconst m = {\r\n\t\t\t\t...defaultFormMaterial,\r\n\t\t\t\t...material\r\n\t\t\t}\r\n\t\t\tsetFormMaterial(m)\r\n\t\t\tvar subCategoryIsCheckedUpdated = {}\r\n\r\n\t\t\tconst subCats = material.subCategoriesList\r\n\t\t\t// console.log('subCats', subCats)\r\n\t\t\tsubCats.forEach(sc => subCategoryIsCheckedUpdated[sc] = true)\r\n\r\n\t\t\t// console.log('subCategoryIsCheckedUpdated', subCategoryIsCheckedUpdated)\r\n\t\t\tsetSubCategoryIsChecked(subCategoryIsCheckedUpdated)\r\n\t\t} else {\r\n\t\t\tsetSubCategoryIsChecked({})\r\n\t\t\tsetFormMaterial(defaultFormMaterial)\r\n\t\t}\r\n\t}, [isEditMode, material])\r\n\r\n\t/** ONLY CALL THIS ONCE PER RENDER CYCLE OR IN A ROW */\r\n\tconst updateFormMaterialField = (fieldName, fieldValue) => {\r\n\t\t// console.log('updateFormMaterialField', fieldName, fieldValue)\r\n\t\tconst updatedFormMaterial = { ...formMaterial }\r\n\t\tupdatedFormMaterial[fieldName] = fieldValue\r\n\t\t// console.log('updatedFormMaterial', updatedFormMaterial)\r\n\t\tsetFormMaterial(updatedFormMaterial)\r\n\t}\r\n\r\n\tconst onChange = (e) => {\r\n\t\tconst fieldName = e.target.name\r\n\t\tvar fieldValue = e.target.value\r\n\r\n\t\tconst updatedFormMaterial = { ...formMaterial }\r\n\r\n\t\tif (e.target.type === \"number\") {\r\n\t\t\tfieldValue = Number(fieldValue)\r\n\t\t} else if (fieldName === \"subCategories\") {\r\n\t\t\tconsole.log(\"subCategories val\", fieldValue)\r\n\t\t\t// } else if (e.target.type == \"switch\") {\r\n\t\t\t// \tif (fieldValue === \"on\") {\r\n\t\t\t// \t\tfieldValue = true\r\n\t\t\t// \t} else if (fieldValue === \"off\") {\r\n\t\t\t// \t\tfieldValue = false\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\t\t} else if (e.target.type === \"checkbox\") {\r\n\t\t\tfieldValue = e.target.checked;\r\n\t\t}\r\n\r\n\t\t// if (fieldName === \"subCategory\") {\r\n\t\t// \t// updateMaterialDataField(fieldName, e.target.value)\r\n\t\t// \t//filteredItemTypes\r\n\t\t// \tsetFilteredItemTypes(materialItemTypes.filter(item => item.subCategories && item.subCategories.indexOf(e.target.value) != -1) )\r\n\t\t// }\r\n\r\n\t\t// updateFormMaterialField(fieldName, fieldValue)\r\n\t\tupdatedFormMaterial[fieldName] = fieldValue\r\n\r\n\t\t// if (fieldName === \"embodiedGHGEPerUnit\" || fieldName === \"embodiedGHGEUnit\" || fieldName === \"GHGEUnitPerFunctionalUnit\") {\r\n\t\t// \t// formMaterial.embodiedGHGEUnit !== formMaterial.functionalUnit\r\n\t\t// \tupdatedFormMaterial[\"embodiedGHGE\"] = updatedFormMaterial.embodiedGHGEPerUnit && updatedFormMaterial.density && updatedFormMaterial.embodiedGHGEPerUnit * updatedFormMaterial.density\r\n\t\t// }\r\n\r\n\t\t// console.log('updatedFormMaterial', updatedFormMaterial)\r\n\t\tsetFormMaterial(updatedFormMaterial)\r\n\t}\r\n\r\n\tconst handleSubmit = (event) => {\r\n\t\tconst form = event.currentTarget;\r\n\t\tif (form.checkValidity() === false) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\tsetValidated(true);\r\n\t\t}\r\n\t\telse if (form.checkValidity() === true) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\tconsole.log(\"Creating DB material\", formMaterial)\r\n\t\t\tif (isEditMode) {\r\n\t\t\t\tupdateEpicMaterial(formMaterial)\r\n\t\t\t} else {\r\n\t\t\t\tcreateEpicMaterial(formMaterial)\r\n\t\t\t}\r\n\t\t\tsetValidated(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onChangeSubCategory = (subCategory, e) => {\r\n\t\t// var fieldValue = e.target.value\r\n\t\tconst isChecked = e.target.checked\r\n\t\t// console.log(\"onChangeSubCategory\", subCategory, isChecked)\r\n\r\n\t\tconst subCategoryIsCheckedUpdated = updateSubCategoryFieldIsChecked(subCategory.name, isChecked)\r\n\r\n\t\t// set the subcategories on the material\r\n\t\tlet subCatsList =\r\n\t\t\tObject.keys(subCategoryIsCheckedUpdated)\r\n\t\t\t\t.filter(sc => subCategoryIsCheckedUpdated[sc])\r\n\t\t\t\t.map(sc => sc.replaceAll(SUB_CATEGORY_SEPARATOR, '-'))\r\n\t\t\t\t.filter(sc => sc.trim() !== \"\")\r\n\r\n\t\t// let subCatsJoined =\r\n\t\t// \tsubCatsList\r\n\t\t// \t\t.join(SUB_CATEGORY_SEPARATOR)\r\n\r\n\t\t// console.log('subCatsList', subCatsList)\r\n\t\t// console.log('subCatsJoined', subCatsJoined)\r\n\t\t// updateFormMaterialField('subCategories', subCatsJoined) // this gets set when we save the material\r\n\t\tupdateFormMaterialField('subCategoriesList', subCatsList)\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{isEditMode ? \"Edit Database Material\" : \"New Database Material\"} \r\n\t\t\t \r\n\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tName\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSub-Category (make checkboxes)\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{subCategories.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t */}\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSub-Categories\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{subCategories.map((sc, index) =>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t onChangeSubCategory(sc, e)}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{sc.name}\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tItem Type (Material)\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t\t{filteredItemTypes.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{m.material} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t */}\r\n\r\n\t\t\t\t\t{/* Functional Unit */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tFunctional Unit\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tSelect unit \r\n\t\t\t\t\t\t\t\t{units.map((m) => (\r\n\t\t\t\t\t\t\t\t\t{formatUnit(m.name)} \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tGHGE per Functional Unit (A1 - A3)\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{`kgCO2e Per ${formatUnit(formMaterial.functionalUnit)}`}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t{formMaterial.functionalUnit !== \"kg\" ? (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tMass per Functional Unit\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{`kg/${formatUnit(formMaterial.functionalUnit)}`}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t): undefined}\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tIs Active\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tURL\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t {isEditMode ? \"Update Material\" : \"Add Material\"}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\r\n\t\t\t \r\n\t\t\t{/*\r\n\t\t\t\r\n\t\t\t */}\r\n\r\n\r\n\t\t \r\n\t)\r\n}\r\n\r\nexport const AdminMaterialsPage = (props) => {\r\n\tconst [materialList, setMaterialList] = useState([])\r\n\tconst [showAddNewMaterialModal, setShowAddNewMaterialModal] = useState(false)\r\n\tconst [addNewMaterialModalIsEditMode, setAddNewMaterialModalIsEditMode] = useState(false)\r\n\tconst [materialToEdit, setMaterialToEdit] = useState({})\r\n\tconst [dataSourceFilterSelected, setDataSourceFilterSelected] = useState(\"All\")\r\n\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst { materialId } = useParams()\r\n\r\n\tuseEffect(() => loadAllMaterials(materials => {\r\n\t\tsetMaterialList(materials)\r\n\r\n\t\t// Dev route: show the edit material form on load if the\r\n\t\t// url is: /admin/materials/:materialId/edit\r\n\t\tconst materialIdNum = Number(materialId)\r\n\t\tconst material = materialId && materials.find(m => m.id === materialIdNum)\r\n\r\n\t\tif (material) {\r\n\t\t\teditMaterialUsingModal(material)\r\n\t\t}\r\n\t}), [backendUrl])\r\n\r\n\tconst setSubCategoriesForDb = (epicMaterial) => {\r\n\t\tconst epicMaterialDbRow = { ...epicMaterial } // copy object\r\n\t\tepicMaterialDbRow.subCategories = epicMaterialDbRow.subCategoriesList.join(SUB_CATEGORY_SEPARATOR)\r\n\t\tdelete epicMaterialDbRow.subCategoriesList\r\n\t\treturn epicMaterialDbRow\r\n\t}\r\n\r\n\tconst updateEpicMaterial = (epicMaterial) => {\r\n\t\tconst epicMaterialDbRow = setSubCategoriesForDb(epicMaterial)\r\n\r\n\t\treturn axios.put(`${backendUrl}/epicMaterials/${epicMaterialDbRow.id}`, epicMaterialDbRow)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconsole.log('epicMaterial updated', response)\r\n\t\t\t\tloadAllMaterials(setMaterialList)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log('Error updating epicMaterial', error);\r\n\t\t\t})\r\n\t}\r\n\r\n\tconst updateEpicMaterialForModal = (epicMaterial) => {\r\n\t\tupdateEpicMaterial(epicMaterial).then(() => setShowAddNewMaterialModal(false))\r\n\t}\r\n\r\n\tconst createEpicMaterial = (epicMaterial) => {\r\n\t\tconst epicMaterialDbRow = setSubCategoriesForDb(epicMaterial)\r\n\r\n\t\taxios.post(`${backendUrl}/epicMaterial`, epicMaterialDbRow)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconsole.log('epicMaterial created', response)\r\n\t\t\t\t// var stateResponse = response.data.id;\r\n\t\t\t\tsetShowAddNewMaterialModal(false)\r\n\t\t\t\tloadAllMaterials(setMaterialList)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log('Error creating epicMaterial', error);\r\n\t\t\t})\r\n\t}\r\n\r\n\tconst deleteEpicMaterial = (epicMaterial) => {\r\n\t\taxios.delete(`${backendUrl}/epicMaterials/${epicMaterial.id}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tvar data = response.data\r\n\t\t\t\tconsole.log(\"epicMaterial delete response\", data)\r\n\t\t\t\t// showToastMsg(\"EpicMaterial deleted (\" + epicMaterial.material + \")\")\r\n\t\t\t\tloadAllMaterials(setMaterialList)\r\n\t\t\t})\r\n\t\t\t.catch(error => {\r\n\t\t\t\tconsole.log('Error deleting epicMaterial', error);\r\n\t\t\t\t// showToastMsg(\"Error deleting epicMaterial (\" + epicMaterial.material + \"). Please try again.\")\r\n\t\t\t})\r\n\t}\r\n\r\n\tconst editMaterialUsingModal = (mat) => {\r\n\t\tsetMaterialToEdit(mat)\r\n\t\tsetAddNewMaterialModalIsEditMode(true)\r\n\t\tsetShowAddNewMaterialModal(true)\r\n\t}\r\n\r\n\tconst handleActionClick = (mat, actionName) => {\r\n\t\tif (actionName === \"TOGGLE_IS_ACTIVE\") {\r\n\t\t\tvar updateMaterial = { ...mat }\r\n\t\t\tupdateMaterial.isActive = !updateMaterial.isActive\r\n\t\t\tupdateEpicMaterial(updateMaterial)\r\n\t\t} else if (actionName === \"EDIT\") {\r\n\t\t\teditMaterialUsingModal(mat)\r\n\t\t} else if (actionName === \"DELETE\") {\r\n\t\t\tdeleteEpicMaterial(mat)\r\n\t\t}\r\n\t}\r\n\r\n\tconst renderMaterialRowActions = (mat) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t{/* handleActionClick(mat, \"TOGGLE_IS_ACTIVE\")}>Toggle IsActive */}\r\n\t\t\t\t\t{mat.dataSource === \"Custom\" ? handleActionClick(mat, \"EDIT\")}>Edit : undefined}\r\n\t\t\t\t\t handleActionClick(mat, \"TOGGLE_IS_ACTIVE\")}>{mat.isActive ? \"Deactivate (Hide in UI)\" : \"Activate (Show in UI)\"} \r\n\t\t\t\t\t{config.isDebugMode && mat.dataSource === \"Custom\" && handleActionClick(mat, \"DELETE\")}>Delete }\r\n\t\t\t\t \r\n\t\t\t \r\n\t\t);\r\n\t}\r\n\r\n\tconst handleOnClickAddNewMaterial = () => {\r\n\t\tsetAddNewMaterialModalIsEditMode(false)\r\n\t\tsetMaterialToEdit({})\r\n\t\tsetShowAddNewMaterialModal(true)\r\n\t}\r\n\r\n\tconst sourceFilters = [\r\n\t\t{ id: 1, value: \"All\" },\r\n\t\t{ id: 2, value: \"EPIC\" },\r\n\t\t{ id: 3, value: \"Custom\" },\r\n\t]\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tMaterials \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tData Source Filter:\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t{sourceFilters.map(sourceFilter =>\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t setDataSourceFilterSelected(e.target.value)}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t\t\tAdd New Material \r\n\t\t\t
\r\n\r\n\t\t\t setShowAddNewMaterialModal(false)}\r\n\t\t\t\tisEditMode={addNewMaterialModalIsEditMode}\r\n\t\t\t\tcreateEpicMaterial={createEpicMaterial}\r\n\t\t\t\tupdateEpicMaterial={updateEpicMaterialForModal}\r\n\t\t\t\tmaterial={materialToEdit}\r\n\t\t\t/>\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t# \r\n\t\t\t\t\t\t\tName \r\n\t\t\t\t\t\t\t{/* Category */}\r\n\t\t\t\t\t\t\t{/* Type */}\r\n\t\t\t\t\t\t\tActive \r\n\t\t\t\t\t\t\tSource \r\n\t\t\t\t\t\t\tActions \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{materialList\r\n\t\t\t\t\t\t\t.filter(mat => {\r\n\t\t\t\t\t\t\t\tif (dataSourceFilterSelected === 'All') {\r\n\t\t\t\t\t\t\t\t\treturn true\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\treturn mat.dataSource === dataSourceFilterSelected\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.map((mat, index) =>\r\n\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{index + 1} \r\n\t\t\t\t\t\t\t\t\t{mat.material} \r\n\t\t\t\t\t\t\t\t\t{/* {mat.category} */}\r\n\t\t\t\t\t\t\t\t\t{/* {mat.type} */}\r\n\t\t\t\t\t\t\t\t\t{mat.isActive ? \"Yes\" : \"No\"} \r\n\t\t\t\t\t\t\t\t\t{mat.dataSource} \r\n\t\t\t\t\t\t\t\t\t{renderMaterialRowActions(mat)} \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t \r\n\t);\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Table from 'react-bootstrap/Table';\r\nimport Accordion from 'react-bootstrap/Accordion'\r\nimport ProjectsAddProjectCommentModal from \"./ProjectsAddProjectCommentModal\";\r\nimport './../index.css';\r\nimport { AccessControl } from \"../AccessControl\";\r\nimport { Store, loadStore } from \"./AdminStoresPage\";\r\nimport { getMaterialInstancesForStore } from \"./AdminMaterialsPage\";\r\n\r\nfunction ProjectInformationBrief({ storeId }) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\r\n\tconst [storeDetails, setStoreDetails] = useState({});\r\n\tconst [selectProjectCommentModal, setSelectProjectCommentModal] = useState(false);\r\n\r\n\tconst [archEmail, setArchEmail] = useState(null);\r\n\tconst [pmEmail, setPmEmail] = useState(null);\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\tloadStore(storeId, store => {\r\n\t\t\tsetStoreDetails(store);\r\n\r\n\t\t\tsetArchEmail(store.architect)\r\n\t\t\tsetPmEmail(store.projectManager)\r\n\t\t})\r\n\r\n\t}, []);\r\n\r\n\tfunction handleClickProjectSubmit() {\r\n\t\tsetSelectProjectCommentModal(true);\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tStore name \r\n\t\t\t\t\t\t\t{storeDetails.storeName} \r\n\t\t\t\t\t\t\tRegion \r\n\t\t\t\t\t\t\t{storeDetails.region} \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tScorecard Type \r\n\t\t\t\t\t\t\t{Store.getScorecardTypeTitle(storeDetails.scorecardType)} \r\n\t\t\t\t\t\t\tCountry \r\n\t\t\t\t\t\t\t{storeDetails.country} \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tLocation Type \r\n\t\t\t\t\t\t\t{storeDetails.locationType} \r\n\t\t\t\t\t\t\tTotal Sqm \r\n\t\t\t\t\t\t\t{storeDetails.totalSqm} \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tStreet Address \r\n\t\t\t\t\t\t\t{storeDetails.streetAddress} \r\n\t\t\t\t\t\t\tCity \r\n\t\t\t\t\t\t\t{storeDetails.city} \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tROIC CAPEX \r\n\t\t\t\t\t\t\t{storeDetails.currency} {storeDetails.roicCapex} \r\n\t\t\t\t\t\t\tRetail Sqm \r\n\t\t\t\t\t\t\t{storeDetails.retailSqm} \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tArchitect \r\n\t\t\t\t\t\t\t{archEmail} \r\n\t\t\t\t\t\t\tProject Manager \r\n\t\t\t\t\t\t\t{pmEmail} \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t{/* {AccessControl.isReviewer(user) &&\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tStatus \r\n\t\t\t\t\t\t\t\tReview required \r\n\t\t\t\t\t\t\t\tClick here to review this project \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tReview Comment \r\n\t\t\t\t\t\t\t{storeDetails.reviewComment} \r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t setSelectProjectCommentModal(false)}\r\n\t\t\t\tselectProjectCommentModal={selectProjectCommentModal}\r\n\t\t\t/>\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default ProjectInformationBrief;","import React, { useEffect, useState } from \"react\";\r\nimport { useSelector } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Table from 'react-bootstrap/Table';\r\nimport { formatScore } from '../HelperFunctions'\r\nimport { loadStore } from \"./AdminStoresPage\";\r\n\r\nfunction ProjectScores({ projectScore: projectScoreProp, storeId }) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [globalAverage, setGlobalAverage] = useState(0);\r\n\tconst [projectRegion, setProjectRegion] = useState(\"\");\r\n\tconst [projectScore, setProjectScore] = useState(0);\r\n\tconst [projectDesigner, setProjectDesigner] = useState(0);\r\n\tconst [regionalAverage, setRegionalAverage] = useState(\"\");\r\n\tconst [designerAverage, setDesignerAverage] = useState(\"\");\r\n\r\n\tuseEffect(() => {\r\n\t\t//get region for 'this' store\r\n\t\tloadStore(storeId, store => {\r\n\t\t\tsetProjectRegion(store.region);\r\n\t\t\tsetProjectScore(Math.round(store.totalScore));\r\n\t\t\tsetProjectDesigner(store.architectId);\r\n\r\n\t\t\tvar gotRegion = store.region;\r\n\t\t\tvar gotDesignerId = store.architectId;\r\n\t\t\t// console.log(\"gotRegion\");\r\n\t\t\t// console.log(gotRegion);\r\n\t\t\t// console.log(\"gotDesignerId\");\r\n\t\t\t// console.log(gotDesignerId);\r\n\r\n\t\t\tif (gotRegion) {\r\n\t\t\t\t//get global scores\r\n\t\t\t\taxios.get(`${backendUrl}/globalStoreScores`)\r\n\t\t\t\t\t.then(function (response) {\r\n\t\t\t\t\t\t//console.log(\"globalStoreScores\");\r\n\t\t\t\t\t\t// console.log(response.data.regionalScores)\r\n\r\n\t\t\t\t\t\tsetGlobalAverage(Math.round((response.data.globalAverage) * 100) / 100);\r\n\r\n\t\t\t\t\t\tvar regionalOnly = response.data.regionalScores;\r\n\t\t\t\t\t\tvar regionalCheck = regionalOnly.filter((regional) => regional.name === gotRegion)\r\n\t\t\t\t\t\tsetRegionalAverage(Math.round((regionalCheck[0].averageScore) * 100) / 100);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (error) {\r\n\t\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsetRegionalAverage(\"NA\");\r\n\t\t\t}\r\n\r\n\t\t\t//get designer scores\r\n\t\t\tif (gotDesignerId) {\r\n\t\t\t\taxios.get(`${backendUrl}/scoresByArchitect/${gotDesignerId}`)\r\n\t\t\t\t\t.then(function (response) {\r\n\t\t\t\t\t\t//console.log(\"designerscores\");\r\n\t\t\t\t\t\t//console.log(response.data);\r\n\r\n\t\t\t\t\t\tsetDesignerAverage(Math.round((response.data.averageStoreScore) * 100) / 100);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (error) {\r\n\t\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tsetDesignerAverage(\"NA\");\r\n\t\t\t}\r\n\t\t}, error => {\r\n\t\t\tconsole.log(error)\r\n\t\t})\r\n\r\n\t}, []);\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tGlobal average \r\n\t\t\t\t\t\t\t\t\t{formatScore(globalAverage)} \r\n\t\t\t\t\t\t\t\t\tRegional average \r\n\t\t\t\t\t\t\t\t\t{formatScore(regionalAverage)} \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tDesigner average \r\n\t\t\t\t\t\t\t\t\t{formatScore(designerAverage)} \r\n\t\t\t\t\t\t\t\t\tStore Circularity Score \r\n\t\t\t\t\t\t\t\t\t{/* {projectScore} */}\r\n\t\t\t\t\t\t\t\t\t{formatScore(projectScoreProp)} \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t \r\n\t\t>\r\n\t);\r\n}\r\n\r\nexport default ProjectScores;","const DEBUGMODE = true;\r\n\r\n//used on:\r\n//projectSummaryCharts\r\n//chartFilledSingleCircle\r\nconst scaleValues = {\r\n\tlow: 49,\r\n\tmedium: 70,\r\n\thigh: 100\r\n};\r\n\r\nconst scaleValuesGHGstore = {\r\n\tlow: 75,\r\n\tmedium: 120,\r\n\thigh: 150\r\n};\r\n\r\nconst scaleValuesGHGcounter = {\r\n\tlow: 70,\r\n\tmedium: 110,\r\n\thigh: 130\r\n};\r\n\r\nconst scaleLevels = {\r\n\tlow: \"Level A\",\r\n\tmedium: \"Level B\",\r\n\thigh: \"Level C\"\r\n};\r\n\r\nconst scaleColoursText = {\r\n\tlow: \"text-geranium\",\r\n\tmedium: \"text-sun\",\r\n\thigh: \"text-rind\"\r\n};\r\n\r\nconst scaleColoursBG = {\r\n\tlow: \"bg-geranium-300\",\r\n\tmedium: \"bg-sun-300\",\r\n\thigh: \"bg-rind-300\"\r\n};\r\n\r\nconst scaleColours = {\r\n\tlow: \"#efa698\",\r\n\tmedium: \"#e4c56e\",\r\n\thigh: \"#a4b489\"\r\n};\r\n\r\nconst scaleColoursInv = {\r\n\tlow: \"#efa698\",\r\n\tmedium: \"#e4c56e\",\r\n\thigh: \"#a4b489\"\r\n};\r\n\r\nconst scaleColoursFive = [\r\n\t\"#859b61\", //geranium-400 --- retained\r\n\t\"#e4c56e\", //sun-300 --- reused\r\n\t\"#D5B49E\", //resurrection-400 --- recycled\r\n\t\"#C6AA76\", //rejuvenate-500 --- part-recycled\r\n\t\"#ea8876\", //rind-400 --- virgin\r\n];\r\n\r\nconst scaleColoursFiveText = [\r\n\t\"text-geranium-400\", //geranium-400 --- retained\r\n\t\"text-sun-400\", //sun-300 --- reused\r\n\t\"text-resurrection-500\", //resurrection-400 --- recycled\r\n\t\"text-rejuvenate-500\", //rejuvenate-500 --- part-recycled\r\n\t\"text-rind-400\", //rind-400 --- virgin\r\n];\r\n\r\nconst scaleColoursSeven = [\r\n\t\"#859b61\", //geranium-400 --- Fully recyclable\r\n\t\"#809791\", //hwyl-400 --- Part recyclable\r\n\t\"#90b3bd\", //reverence-400 --- Recycling program\r\n\t\"#D5B49E\", //resurrection-500 --- Finish to remain after decommission\r\n\t\"#C6AA76\", //rejuvenate-500 --- Able to be reused/repurposed\r\n\t\"#e4c56e\", //sun-300 --- Takeback Scheme\r\n\t\"#ea8876\", //rind-400 --- Not recyclable\r\n];\r\n\r\nconst scaleColoursSevenText = [\r\n\t\"text-geranium-400\", //geranium-400 --- Fully recyclable\r\n\t\"text-hwyl-400\", //geranium-300 --- Part recyclable\r\n\t\"text-reverence-400\", //geranium-200 --- Recycling program\r\n\t\"text-resurrection-500\", //--- Finish to remain after decommission\r\n\t\"text-rejuvenate-500\", //rejuvenate-500 --- Able to be reused/repurposed\r\n\t\"text-sun-300\", //sun-300 --- Takeback Scheme\r\n\t\"text-rind-400\", //rind-400 --- Not recyclable\r\n];\r\n\r\nconst scaleColoursThree = [\r\n\t\"#859b61\", //geranium-400\r\n\t\"#D5B49E\", //resurrection-400\r\n\t\"#ea8876\", //rind-400\r\n];\r\n\r\nconst scaleColoursThreeText = [\r\n\t\"text-geranium-400\", //geranium-400\r\n\t\"text-resurrection-500\", //resurrection-400\r\n\t\"text-rind-400\", //rind-400\r\n];\r\n\r\n//used on:\r\n//projectSummaryCharts\r\nconst endOfLifeAssessmentDets = [\r\n\t{ id: 1, key: 'notRecyclable', name: \"Not recyclable\", value: \"0\" },\r\n\t{ id: 2, key: 'partRecyclable', name: \"Part recyclable\", value: \"0\" },\r\n\t{ id: 3, key: 'fullyRecyclable', name: \"Fully recyclable\", value: \"0\" },\r\n\t{ id: 4, key: 'recyclingProgram', name: \"Recycling program\", value: \"0\" },\r\n\t{ id: 5, key: 'reusable', name: \"Able to be reused/repurposed\", value: \"0\" },\r\n\t{ id: 6, key: 'toRemain', name: \"Finish to remain after decommission\", value: \"0\" },\r\n\t{ id: 7, key: 'takeBack', name: \"Takeback Scheme\", value: \"0\" }\r\n];\r\n\r\nconst circularityAssessmentDets = [\r\n\t{ key: 'notRecyclable', name: \"Not recyclable\", value: \"0\"},\r\n\t{ key: 'partRecyclable', name: \"Part recyclable\", value: \"0\"},\r\n\t{ key: 'finishToRemain', name: \"Finish to remain\", value: \"0\"},\r\n\t{ key: 'recyclable', name: \"Recyclable\", value: \"0\"},\r\n\t{ key: 'reusable', name: \"Reusable\", value: \"0\"},\r\n];\r\n\r\nconst singleDonutColour = \"#466067\";\r\n\r\nexport { DEBUGMODE, scaleValues, scaleValuesGHGstore, scaleValuesGHGcounter, scaleColoursBG, scaleColours, scaleLevels, scaleColoursText, scaleColoursFive, scaleColoursFiveText, scaleColoursSeven, scaleColoursSevenText, scaleColoursThree, scaleColoursThreeText, endOfLifeAssessmentDets, circularityAssessmentDets, singleDonutColour }","import React from 'react';\r\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, Title } from 'chart.js';\r\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\r\nimport { Doughnut } from 'react-chartjs-2';\r\nimport { singleDonutColour } from './GlobalVars'\r\nimport { scaleColours } from './GlobalVars'\r\n\r\nChartJS.register(ArcElement, Tooltip, Legend, Title, ChartDataLabels);\r\n\r\nconst ChartDonutSingleVal = ({ percentage, label, delay }) => {\r\n\tlet colour = singleDonutColour;\r\n\tlet rotateNegative = 0;\r\n\tlet colourArray = [\r\n\t\tcolour, \"#DDDDDD\"\r\n\t];\r\n\tlet dataArray = [percentage, (100 - percentage)];\r\n\r\n\tif (percentage < 0) {\r\n\t\tconsole.log(\"negative\");\r\n\t\tconsole.log(percentage);\r\n\t\tpercentage = (percentage * - 1)\r\n\t\tconsole.log(percentage);\r\n\t\trotateNegative = 360 - (((percentage)/100) * 360)\r\n\t\tconsole.log(rotateNegative)\r\n\r\n\t\tdataArray = [(100 - percentage),percentage];\r\n\t\tcolourArray = [\r\n\t\t\t\"#DDDDDD\", scaleColours.low\r\n\t\t];\r\n\t}\r\n\telse {\r\n\t\tconsole.log(\"positive\");\r\n\t\tdataArray = [percentage, (100 - percentage)];\r\n\t\t//percentage = ;\r\n\t\trotateNegative = 0;\r\n\t\tcolourArray = [\r\n\t\t\tscaleColours.high, \"#DDDDDD\"\r\n\t\t];\r\n\t}\r\n\r\n\tconst data = {\r\n\t\tlabels: [label, label],\r\n\t\tdatasets: [\r\n\t\t\t{\r\n\t\t\t\tlabel: '%',\r\n\t\t\t\tdata: dataArray,\r\n\t\t\t\tbackgroundColor: colourArray,\r\n\t\t\t\tborderColor: [\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t],\r\n\t\t\t\tborderWidth: 2,\r\n\t\t\t},\r\n\t\t],\r\n\t};\r\n\r\n\tconst options = {\r\n\t\tcircumference: 360,\r\n\t\tresponsive: false,\r\n\t\tmaintainAspectRatio: true,\r\n\t\tcutout: 50,\r\n\t\t//rotation: rotateNegative,\r\n\t\tanimation: {\r\n\t\t\teasing: \"easeInCubic\",\r\n\t\t\tduration: 3000,\r\n\t\t\tdelay: delay,\r\n\t\t\t//animateRotate: false\r\n\t\t},\r\n\t\thover: {\r\n\t\t\tmode: null\r\n\t\t},\r\n\t\tplugins: {\r\n\t\t\ttitle: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\ttext: label,\r\n\t\t\t\tposition: 'bottom'\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tenabled: false\r\n\t\t\t},\r\n\t\t\tdatalabels: false\r\n\r\n\t\t},\r\n\t};\r\n\r\n\treturn (\r\n\t\t \r\n\t);\r\n};\r\n\r\nexport default ChartDonutSingleVal;","import React, { useEffect, useState } from \"react\";\r\nimport { useSelector } from 'react-redux';\r\nimport axios from 'axios';\r\nimport Header from \"./Header\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Table from 'react-bootstrap/Table'\r\nimport Form from 'react-bootstrap/Form';\r\nimport Button from 'react-bootstrap/Button'\r\nimport { config } from \"../config\";\r\n\r\nimport Col from 'react-bootstrap/Col';\r\n\r\nimport ChartFilledSingleCircleGHG from \"./ChartFilledSingleCircleGHG\";\r\n\r\nexport const loadAllCalcParams = (setCalcParamList, setCalcParams) => {\r\n axios\r\n .get(`${config.backendUrl}/calcParams`)\r\n .then(response => response.data)\r\n .then(calcParams => {\r\n setCalcParamList(calcParams)\r\n\r\n // Set the initial values for the new value fields\r\n // const updatedCalcParamsNewValue = {...calcParamsNewValue}\r\n const updatedCalcParamsNewValue = {}\r\n calcParams.forEach(c => updatedCalcParamsNewValue[c.id] = c.currentValue)\r\n setCalcParams && setCalcParams(updatedCalcParamsNewValue)\r\n })\r\n}\r\n\r\n/**\r\n * Get calc lookup params from the server so that the\r\n * client and server can use the same values\r\n */\r\nexport const getCalcLookupData = (lookupName, onSuccess, onError) => {\r\n axios\r\n .get(`${config.backendUrl}//calcParams/lookups/${lookupName}`)\r\n .then(response => {\r\n onSuccess && onSuccess(response.data)\r\n })\r\n .catch(response => {\r\n console.error('Error getting calc lookup data', response)\r\n onError && onError(response && response.data)\r\n })\r\n}\r\n\r\nexport const AdminCalcsPage = (props) => {\r\n\r\n const [calcParamList, setCalcParamList] = useState([])\r\n const [calcParamsNewValue, setCalcParamsNewValue] = useState({})\r\n\r\n const backendUrl = useSelector((state) => state.backendUrl);\r\n\r\n const updateCalcParam = (calcParam) => {\r\n\t\taxios.put(`${backendUrl}/calcParams/${calcParam.id}`, calcParam)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconsole.log('calcParam saved', response)\r\n loadAllCalcParams(setCalcParamList, setCalcParamsNewValue)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log('Error saving calcParam', error);\r\n\t\t\t})\r\n\t}\r\n\r\n useEffect(() => {\r\n console.log('AdminCalcsPage.useEffect')\r\n loadAllCalcParams(setCalcParamList, setCalcParamsNewValue)\r\n }, [backendUrl])\r\n\r\n const onChangeCalcParamNewValue = (calcParam, e) => {\r\n const updatedVal = Number(e.target.value)\r\n // console.log('Updating calc param new value', calcParam.name, \"=>\", updatedVal)\r\n\r\n const updatedCalcParamsNewValue = { ...calcParamsNewValue }\r\n updatedCalcParamsNewValue[calcParam.id] = updatedVal\r\n\r\n setCalcParamsNewValue(updatedCalcParamsNewValue)\r\n }\r\n\r\n const onClickSavedCalcParamValue = (calcParam, e) => {\r\n const updatedVal = calcParamsNewValue[calcParam.id]\r\n console.log('Updating calc param', calcParam.name, \"=>\", updatedVal)\r\n\r\n const updatedCalcParam = { ...calcParam }\r\n updatedCalcParam.currentValue = updatedVal\r\n updateCalcParam(updatedCalcParam)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n Calculations \r\n
\r\n\r\n \r\n \r\n \r\n \r\n # \r\n Name \r\n {/* Description */}\r\n Default Value \r\n Current Value \r\n New Value \r\n Actions \r\n \r\n \r\n \r\n {calcParamList.map((calcParam, index) =>\r\n (\r\n \r\n {index + 1} \r\n \r\n {calcParam.name} \r\n \r\n {calcParam.description} \r\n \r\n {/* {calcParam.description} */}\r\n \r\n {calcParam.defaultValue} \r\n \r\n {calcParam.units} \r\n \r\n \r\n {calcParam.currentValue} \r\n \r\n {calcParam.units} \r\n \r\n \r\n onChangeCalcParamNewValue(calcParam, e)}>\r\n \r\n \r\n \r\n {/* {renderMaterialRowActions(mat)} */}\r\n \r\n {calcParam.currentValue !== calcParamsNewValue[calcParam.id] ?\r\n (\r\n onClickSavedCalcParamValue(calcParam, e)}>Save \r\n )\r\n : undefined}\r\n \r\n {/* {calcParam.currentValue} */}\r\n {/* {calcParamsNewValue[calcParam.id]} */}\r\n \r\n )\r\n )\r\n }\r\n \r\n
\r\n
\r\n \r\n );\r\n}","import React, { useState, useEffect } from \"react\";\r\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, Title } from 'chart.js';\r\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\r\nimport { Doughnut } from 'react-chartjs-2';\r\nimport { scaleColours, scaleValuesGHGstore } from './GlobalVars'\r\nimport { loadAllCalcParams } from \"./AdminCalcsPage\";\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\n\r\n\r\nChartJS.register(ArcElement, Tooltip, Legend, Title, ChartDataLabels);\r\n\r\nconst ChartFilledSingleCircle = ({ locationType, ghgValue, label, delay, topText, bottomText }) => {\r\n\tconst [scaleValuesGHGstore, setScaleValuesGHGstore] = useState({})\r\n\tconst [scaleColour, setScaleColour] = useState(\"#dddddd\")\r\n\tconst [scaleText, setScaleText] = useState(\"\")\r\n\r\n\tif (typeof ghgValue === \"string\") {\r\n\t\t// console.log(\"chart getting string\")\r\n\t\tghgValue = 1;\r\n\t}\r\n\telse {\r\n\t\tghgValue = parseInt(ghgValue)\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tloadAllCalcParams(calcParams => {\r\n\t\t\tconst prefix =\r\n\t\t\t\tlocationType === 'Counter'\r\n\t\t\t\t\t? 'RetailCounterEmissions'\r\n\t\t\t\t\t: locationType === 'Store'\r\n\t\t\t\t\t\t? 'RetailStoreEmissions'\r\n\t\t\t\t\t\t: undefined\r\n\r\n\t\t\tconst emParams = calcParams.filter(c => c.name.indexOf(prefix) === 0)\r\n\r\n\t\t\tlet updatedScaleValues = {\r\n\t\t\t\tlow: emParams.find(c => c.name.indexOf('Low') !== -1)?.currentValue,\r\n\t\t\t\tmedium: emParams.find(c => c.name.indexOf('Medium') !== -1)?.currentValue,\r\n\t\t\t\thigh: emParams.find(c => c.name.indexOf('High') !== -1)?.currentValue,\r\n\t\t\t}\r\n\r\n\t\t\tsetScaleValuesGHGstore(updatedScaleValues)\r\n\t\t\tconsole.log(\"got calc scales\");\r\n\r\n\t\t\tconsole.log(\"ghgValue\")\r\n\t\t\tconsole.log(ghgValue)\r\n\t\t\r\n\t\t\t//let colour = \"#dddddd\";\r\n\t\t\t//let ghgText = \"\";\r\n\t\t\r\n\t\t\t//inverted colour scale for GHG values\r\n\t\t\tif (ghgValue <= updatedScaleValues.low) {\r\n\t\t\t\t//colour = scaleColours.high;\r\n\t\t\t\tsetScaleColour(scaleColours.high)\r\n\t\t\t\tsetScaleText(\"Low\")\r\n\t\t\t\tconsole.log(scaleColour)\r\n\t\t\t}\r\n\t\t\telse if (ghgValue > updatedScaleValues.low && ghgValue < updatedScaleValues.medium) {\r\n\t\t\t\tsetScaleColour(scaleColours.medium)\r\n\t\t\t\tsetScaleText(\"Medium\")\r\n\t\t\t\tconsole.log(scaleColour)\r\n\t\t\t}\r\n\t\t\telse if (ghgValue >= updatedScaleValues.medium) {\r\n\t\t\t\tsetScaleColour(scaleColours.low)\r\n\t\t\t\tsetScaleText(\"High\")\r\n\t\t\t\tconsole.log(scaleColour)\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconsole.log(\"no colour set\")\r\n\t\t\t\tconsole.log(ghgValue, scaleValuesGHGstore)\r\n\t\t\t}\r\n\t\t})\r\n\t}, []);\r\n\r\n\r\n\r\n\tconst data = {\r\n\t\tlabels: [\r\n\t\t\tlabel,\r\n\t\t\tlabel\r\n\t\t],\r\n\t\tdatasets: [\r\n\t\t\t{\r\n\t\t\t\tlabel: '%',\r\n\t\t\t\tdata: [ghgValue],\r\n\t\t\t\tbackgroundColor: [\r\n\t\t\t\t\tscaleColour,\r\n\t\t\t\t\t\"#FFFFFF\"\r\n\t\t\t\t],\r\n\r\n\t\t\t\tborderWidth: 0,\r\n\t\t\t},\r\n\t\t],\r\n\t};\r\n\r\n\tconst options = {\r\n\t\theight: 150,\r\n\t\twidth: 150,\r\n\t\tcircumference: 360,\r\n\t\tresponsive: false,\r\n\t\tmaintainAspectRatio: true,\r\n\t\tcutout: 0,\r\n\t\tanimation: {\r\n\t\t\teasing: \"easeInCubic\",\r\n\t\t\tduration: 3000,\r\n\t\t\tdelay: delay\r\n\t\t},\r\n\t\thover: {\r\n\t\t\tmode: null\r\n\t\t},\r\n\t\tplugins: {\r\n\t\t\ttitle: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\ttext: label,\r\n\t\t\t\tposition: 'bottom'\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tenabled: false\r\n\t\t\t},\r\n\t\t\tdatalabels: false\r\n\r\n\t\t},\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{topText ? (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t
{topText} \r\n\t\t\t\t\t\t\t\t{ghgValue} \r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t{ghgValue} \r\n\t\t\t\t\t\t\t\t{scaleText} \r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t \r\n\t\t\t\t\t{bottomText || \"GHG Emissions\"} \r\n\t\t\t\t\t(kgCO2e per sqm)
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default ChartFilledSingleCircle;","import React, { useEffect, useState } from \"react\";\r\nimport { useSelector } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport ChartDonutSingleVal from \"./ChartDonutSingleVal\";\r\nimport ChartFilledSingleCircleGHG from \"./ChartFilledSingleCircleGHG\";\r\nimport { circularityAssessmentDets, scaleColoursCss, scaleColours, scaleValues, scaleValuesGHG } from './GlobalVars';\r\nimport './../index.css';\r\nimport { formatPercentage, formatGhge } from '../HelperFunctions'\r\nimport { loadStore } from \"./AdminStoresPage\";\r\nimport { config } from \"../config\";\r\n\r\nconst ProjectSummaryCharts = ({ store }) => {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst storeId = store.id;\r\n\tconst [projectScores, setProjectScores] = useState({});\r\n\tconst [projectGhg, setProjectGhg] = useState(\"\");\r\n\tconst [projectGhgInverted, setProjectGhgInverted] = useState(\"\");\r\n\tconst [projectGhgTxt, setProjectGhgTxt] = useState(\"\");\r\n\tconst [calcParams, setCalcParamList] = useState(\"\");\r\n\tconst [lowStore, setLowStore] = useState(\"\");\r\n\tconst [medStore, setMedStore] = useState(\"\");\r\n\tconst [highStore, setHighStore] = useState(\"\");\r\n\tconst [lowCounter, setLowCounter] = useState(\"\");\r\n\tconst [medCounter, setMedCounter] = useState(\"\");\r\n\tconst [highCounter, setHighCounter] = useState(\"\");\r\n\r\n\tuseEffect(() => {\r\n\t\tloadStore(storeId, store => {\r\n\t\t\tconsole.log(store.GHGEmissions)\r\n\t\t\tvar ghgValue = store.GHGEmissions;\r\n\t\t\tif (store.GHGEmissions) {\r\n\t\t\t\tsetProjectGhg(ghgValue)\r\n\t\t\t\tsetProjectGhgInverted(ghgValue)\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsetProjectGhg(\"NA\")\r\n\t\t\t\tsetProjectGhgTxt(\"\")\r\n\t\t\t\tsetProjectGhgInverted(1)\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\taxios.get(`${backendUrl}/materialInstancesByStore/${storeId}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\t//console.log(\"materialInstancesByStore\");\r\n\t\t\t\t//console.log(response.data);\r\n\t\t\t\tvar storeMaterials = response.data;\r\n\r\n\t\t\t\t{\r\n\t\t\t\t\tcircularityAssessmentDets.map((cat) => {\r\n\t\t\t\t\t\tvar index = circularityAssessmentDets.indexOf(cat);\r\n\t\t\t\t\t\tvar catName = cat.name;\r\n\t\t\t\t\t\tvar countCat = storeMaterials.filter((store) => store.circularityAssessment === catName).map(data => data);\r\n\t\t\t\t\t\t//console.log(catName + \" = \" + countCat.length);\r\n\t\t\t\t\t\tif (storeMaterials.length != 0) {\r\n\t\t\t\t\t\t\tvar percentage = (countCat.length / storeMaterials.length) * 100\r\n\t\t\t\t\t\t\tcircularityAssessmentDets[index].value = Math.round(percentage * 100) / 100;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tcircularityAssessmentDets[index].value = \"0\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//console.log(circularityAssessmentDets);\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\tsetProjectScores(circularityAssessmentDets);\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{Object.entries(projectScores).map(([key, cat], i) => (\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t{formatPercentage(cat.value)}% \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t{cat.name} \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t))}\r\n\r\n\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t{/*\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \t\t\r\n\t\t\t\t\t\t\t\t
{formatGhge(projectGhg)} \r\n\t\t\t\t\t\t\t\t{projectGhgTxt} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\tGHG Emissions \r\n\t\t\t\t\t\t\t(kgCO2e per sqm)
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
*/}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default ProjectSummaryCharts;","import React, { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Form from 'react-bootstrap/Form';\r\nimport Table from 'react-bootstrap/Table';\r\nimport dayjs from 'dayjs';\r\nimport './../index.css';\r\nimport { loadUsers } from './AdminUsersPage'\r\nimport { AccessControl } from \"../AccessControl\";\r\n\r\nfunction ProjectsAddMaterialCommentModal(props) {\r\n\tconst user = useSelector((state) => state.user);\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [userList, setUserList] = useState([]);\r\n\r\n\tuseEffect(() => {\r\n\t\tloadUsers(users => {\r\n\t\t\t// console.log(users)\r\n\t\t\tsetUserList(...userList, users)\r\n\t\t})\r\n\r\n\t}, []);\r\n\r\n\tconst getAuthor = (reviewerId) => {\r\n\t\tconst index = userList.findIndex(user => user.id === reviewerId);\r\n\t\tif (index > -1) {\r\n\t\t\treturn userList[index].email\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn 'not authored'\r\n\t\t}\r\n\t}\r\n\r\n\tlet commentData = {\r\n\t\tmaterialInstanceId: Number(props.materialId),\r\n\t\treviewerId: Number(props.userId),\r\n\t\tcontent: null,\r\n\t}\r\n\r\n\r\n\tconst onChange = (e) => {\r\n\t\tcommentData[e.target.name] = e.target.value;\r\n\t}\r\n\r\n\tconst handleMaterialCommentSubmit = (event) => {\r\n\t\tconst form = event.currentTarget;\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\t\taxios.post(`${backendUrl}/comment`, commentData)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconsole.log(response);\r\n\t\t\t})\r\n\t\t\t.then(() =>{\r\n\t\t\t\tprops.onHide();\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{AccessControl.isReviewer(user) ? \"Create new comment\" : \"View comments\"} \r\n\t\t\t \r\n\t\t\t{props.selectMaterialCommentModal && props.selectMaterialCommentModal.map((m) =>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tItem Type \r\n\t\t\t\t\t\t\t\t\t{m.itemType} \r\n\t\t\t\t\t\t\t\t\tDescription \r\n\t\t\t\t\t\t\t\t\t{m.materialDescription} \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tCategory \r\n\t\t\t\t\t\t\t\t\t{m.category} \r\n\t\t\t\t\t\t\t\t\tSub-category \r\n\t\t\t\t\t\t\t\t\t{m.subCategory} \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tCertification \r\n\t\t\t\t\t\t\t\t\t{m.productCertification} \r\n\t\t\t\t\t\t\t\t\tTotal Score \r\n\t\t\t\t\t\t\t\t\t{m.totalScore} \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{/* if there are no comments, show the message, if there are, render the table */}\r\n\t\t\t\t\t\t{props.comments.length === 0 &&
No comments have been made on this material yet...
}\r\n\t\t\t\t\t\t{props.comments.length > 0 &&\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tComment \r\n\t\t\t\t\t\t\t\t\t\tAuthor \r\n\t\t\t\t\t\t\t\t\t\tDate \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{props.comments.map((m) => (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{m.content} \r\n\t\t\t\t\t\t\t\t\t\t\t{getAuthor(m.reviewerId)} \r\n\t\t\t\t\t\t\t\t\t\t\t{dayjs(`${m.commentDate}`).format('HH:mm:ss YYYY-MM-DD')} \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t{AccessControl.materialInstanceCanComment(user) ? (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tNew Comment\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tSave\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : undefined}\r\n\t\t\t\t \r\n\t\t\t)}\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default ProjectsAddMaterialCommentModal;","import React, { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Table from 'react-bootstrap/Table';\r\nimport ProjectsAddMaterialCommentModal from \"./ProjectsAddMaterialCommentModal\";\r\nimport { scaleValues, scaleColours, scaleLevels, scaleColoursText, scaleColoursBG, endOfLifeAssessmentDets, singleDonutColour } from './GlobalVars';\r\nimport './../index.css';\r\nimport { calcTotalGhge, formatGhge, formatScore, formatUnitForDisplay } from '../HelperFunctions'\r\nimport { AccessControl } from \"../AccessControl\"\r\nimport { config } from \"../config\";\r\n\r\nconst TableGetMaterialsByStore = ({ storeId, userId }) => {\r\n\tconst user = useSelector((state) => state.user)\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [materialsList, setMaterialsList] = useState([]);\r\n\tconst [selectedMaterialData, setSelectedMaterialData] = useState(null);\r\n\tconst [selectedMaterialComments, setSelectedMaterialComments] = useState([]);\r\n\tconst [materialModal, setMaterialModal] = useState(false);\r\n\tconst [materialId, setMaterialId] = useState(null);\r\n\r\n\tuseEffect(() => {\r\n\t\taxios.get(`${backendUrl}/materialInstancesByStore/${storeId}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\t// console.log(response);\r\n\t\t\t\tsetMaterialsList(response.data)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\r\n\tfunction handleClickSubmit(e, matId) {\r\n\t\te.preventDefault()\r\n\r\n\t\taxios.get(`${backendUrl}/allMaterialComments/${matId}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconst setId = () => { setMaterialId(matId) }\r\n\t\t\t\tsetId();\r\n\t\t\t\tconsole.log(matId)\r\n\t\t\t\tsetSelectedMaterialData(materialsList.filter((material) => material.id == e.target.id).map(m => m))\r\n\t\t\t\tconsole.log(response);\r\n\t\t\t\tsetSelectedMaterialComments(response.data)\r\n\t\t\t})\r\n\t\t\t.then(() => {\r\n\t\t\t\tsetMaterialModal(true)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t})\r\n\t}\r\n\r\n\r\n\tfunction getQuantityColor(material) {\r\n\t\tif (materialsList) {\r\n\t\t\tconst ghgeTotAll = materialsList.map(calcTotalGhge).map(g => g.value)\r\n\t\t\tconst ghgeTotMin = Math.min(...ghgeTotAll)\r\n\t\t\tconst ghgeTotMax = Math.max(...ghgeTotAll)\r\n\t\t\tconst ghgeDiff = ghgeTotMax - ghgeTotMin\r\n\t\t\t\r\n\t\t\t//green - 164,180,137 - #a4b489 - hsl 0.23\t0.22\t0.62\r\n\t\t\t//red - 239,166,152 - #efa698\r\n\t\t\tvar totGhge = calcTotalGhge(material).value\r\n\t\t\tconst ratio = (totGhge - ghgeTotMin) / ghgeDiff\r\n\r\n\r\n\t\t\tconst rgbA = scaleColours.high,\r\n\t\t\t\t rgbB = scaleColours.low;\r\n\r\n\t\t\tconst r1 = parseInt(rgbA.substring(1, 3), 16);\r\n\t\t\tconst g1 = parseInt(rgbA.substring(3, 5), 16);\r\n\t\t\tconst b1 = parseInt(rgbA.substring(5, 7), 16);\r\n\r\n\t\t\tconst r2 = parseInt(rgbB.substring(1, 3), 16);\r\n\t\t\tconst g2 = parseInt(rgbB.substring(3, 5), 16);\r\n\t\t\tconst b2 = parseInt(rgbB.substring(5, 7), 16);\r\n\r\n\t\t\tconst r = Math.round(r1 + (r2 - r1) * ratio);\r\n\t\t\tconst g = Math.round(g1 + (g2 - g1) * ratio);\r\n\t\t\tconst b = Math.round(b1 + (b2 - b1) * ratio);\r\n\r\n\t\t\treturn `rgba(${r}, ${g}, ${b}, 1.0)`\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn `rgba(0, 0, 0, 0.0)`\r\n\t\t}\r\n\t}\r\n\r\n\tconst renderScorecardType = (scorecardType) => {\r\n\t\tif (config.isDebugMode) {\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t{scorecardType}\r\n\t\t\t\t \r\n\t\t\t)\r\n\t\t} else {\r\n\t\t\treturn undefined\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tName \r\n\t\t\t\t\t\tDescription \r\n\t\t\t\t\t\tCategory \r\n\t\t\t\t\t\tCertification \r\n\t\t\t\t\t\tEmbodied GHGE (kgCO2e) \r\n\t\t\t\t\t\tQuantity \r\n\t\t\t\t\t\tScore \r\n\t\t\t\t\t\tActions \r\n\t\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t{materialsList ? (materialsList.map((material) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{material.itemType}{renderScorecardType(material.scorecardType)} \r\n\t\t\t\t\t\t\t{material.materialDescription} \r\n\t\t\t\t\t\t\t{material.subCategory} \r\n\t\t\t\t\t\t\t{material.productCertification} \r\n\r\n\t\t\t\t\t\t\t{formatGhge(material.materialQuantity * material.embodiedGHGE)} \r\n\r\n\t\t\t\t\t\t\t{formatGhge(material.materialQuantity)} {formatUnitForDisplay(material.unit)} \r\n\r\n\t\t\t\t\t\t\t scaleValues.low && material.totalScore < scaleValues.medium ? 'text-center ' + scaleColoursBG.medium : \"\"}\r\n\t\t\t\t\t\t\t\t${material.totalScore >= scaleValues.medium ? 'text-center ' + scaleColoursBG.low : \"\"}`}>\r\n\t\t\t\t\t\t\t\t{formatScore(material.totalScore)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{AccessControl.materialInstanceCanComment(user) ? (\r\n\t\t\t\t\t\t\t\t\t handleClickSubmit(e, material.id)}>Comment \r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t// {AccessControl.materialInstanceCanViewComments(user) &&\r\n\t\t\t\t\t\t\t\t\t handleClickSubmit(e, material.id)}>View \r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t))) : \"\"}\r\n\t\t\t\t \r\n\t\t\t
\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t setMaterialModal(false)}\r\n\t\t\t\tselectMaterialCommentModal={selectedMaterialData}\r\n\t\t\t\tmaterialId={materialId}\r\n\t\t\t\tcomments={selectedMaterialComments}\r\n\t\t\t\tuserId={userId}\r\n\t\t\t/>\r\n\t\t \r\n\r\n\t);\r\n}\r\n\r\nexport default TableGetMaterialsByStore;\r\n","import React, { useState } from \"react\"\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory } from 'react-router-dom'\r\nimport Nav from 'react-bootstrap/Nav'\r\nimport NavDropdown from 'react-bootstrap/NavDropdown'\r\nimport { makeStorePath } from './ProjectSummaryPage'\r\nimport { Store, copyStoreMaterialsFromScorecardType, updateStore } from './AdminStoresPage'\r\nimport { AccessControl } from \"../AccessControl\"\r\nimport { config } from \"../config\"\r\nimport ProjectsAddProjectCommentModal from \"./ProjectsAddProjectCommentModal\"\r\nimport { setStoreLifecycleModalInfo } from \"../store/actions\"\r\n\r\nconst getDropdowns = (user, store) => {\r\n\treturn [\r\n\t\t{\r\n\t\t\tname: \"MARK_AS_DRAFT\",\r\n\t\t\ttitle: \"Mark as Draft\",\r\n\t\t\tvisible: store.storeStatus !== Store.Status.DRAFT && AccessControl.storeCanMarkAsDraft(user)\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tname: \"SUBMIT_FOR_REVIEW\",\r\n\t\t\ttitle: \"Submit for Review\",\r\n\t\t\tvisible: store.storeStatus !== Store.Status.AWAITING_REVIEW && AccessControl.storeCanSubmitForReview(user)\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tname: \"MARK_AS_REVIEWED\",\r\n\t\t\ttitle: \"Mark as Reviewed\",\r\n\t\t\tvisible: store.storeStatus === Store.Status.AWAITING_REVIEW && AccessControl.storeCanMarkAsReviewed(user)\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tname: \"INFORM_DESIGNER\",\r\n\t\t\ttitle: \"Inform Designer\",\r\n\t\t\tvisible: store.storeStatus === Store.Status.REVIEWED && AccessControl.storeCanMarkAsReviewed(user)\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tname: \"PROGRESS_TO_AS_BUILT\",\r\n\t\t\tvisible: store.scorecardType === Store.ScorecardType.CONCEPT && (AccessControl.storeCanProgressToAsBuilt(user, store) || AccessControl.isAdmin(user)),\r\n\t\t\tdisabled: true,\r\n\t\t\ttitle: \"Progress to As-built\"\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tname: \"PROGRESS_TO_AS_DECOMMISSIONED\",\r\n\t\t\tvisible: store.scorecardType === Store.ScorecardType.AS_BUILT && (AccessControl.storeCanProgressToDecommission(user, store) || AccessControl.isAdmin(user)),\r\n\t\t\tdisabled: true,\r\n\t\t\ttitle: \"Decommission Store\"\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tkind: 'DIVIDER',\r\n\t\t\tvisible: AccessControl.storeCanChangeDesigner(user)\r\n\t\t},\r\n\r\n\t\t// {\r\n\t\t// \tname: \"CHANGE_DESIGNER\",\r\n\t\t// \tvisible: AccessControl.storeCanChangeDesigner(user),\r\n\t\t// \tdisabled: true,\r\n\t\t// \ttitle: \"Change Designer\"\r\n\t\t// },\r\n\r\n\t\t{\r\n\t\t\tname: \"DOWNLOAD_STORE_INFO\",\r\n\t\t\ttitle: \"Download Store Data (CSV)\",\r\n\t\t\tvisible: AccessControl.storeCanDownloadData(user)\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tname: \"DOWNLOAD_STORE_MATERIALS_CURRENT\",\r\n\t\t\ttitle: \"Download Store Materials - Current (CSV)\",\r\n\t\t\tvisible: AccessControl.storeCanDownloadData(user)\r\n\t\t},\r\n\r\n\t\t{\r\n\t\t\tname: \"DOWNLOAD_STORE_MATERIALS_ALL\",\r\n\t\t\ttitle: \"Download Store Materials - All (CSV)\",\r\n\t\t\tvisible: AccessControl.isAdmin(user)\r\n\t\t},\r\n\t]\r\n}\r\n\r\nexport const updateStoreLifecycleModalInfo = (show, title, textLines, buttonTitleOk, onOk) => {\r\n\treturn setStoreLifecycleModalInfo({\r\n\t\tshow,\r\n\t\ttitle,\r\n\t\ttextLines,\r\n\t\tbuttonTitleOk,\r\n buttonTitleCancel: \"Cancel\",\r\n\t\tonOk\r\n\t})\r\n}\r\n\r\nexport const StoreNavBar = ({ store, setStore, pageName, setPageName }) => {\r\n\tconsole.log('StoreNavBar')\r\n\tconst user = useSelector((state) => state.user)\r\n\tconst history = useHistory()\r\n\tconst [selectProjectCommentModal, setSelectProjectCommentModal] = useState(false)\t\r\n\tconst dropdowns = getDropdowns(user, store)\r\n\r\n\tconst dispatch = useDispatch()\r\n\r\n\tconst storeId = store.id\r\n\r\n\tconst btns = [\r\n\t\t{ name: \"VIEW\", title: \"View\", action: \"view\", visible: AccessControl.storeCanView(user) },\r\n\t\t{ name: \"EDIT\", title: \"Edit\", action: \"edit\", visible: AccessControl.storeCanEdit(user, store) },\r\n\t\t{ name: \"MATERIALS\", title: \"Materials\", action: \"materials\", visible: AccessControl.storeCanView(user) },\r\n\t\t{ name: \"REVIEW\", title: \"Review\", action: \"review\", visible: AccessControl.storeCanViewReviewInfo(user) },\r\n\t\t{ name: \"LIFECYCLE\", title: \"Lifecycle\", action: \"lifecycle\", visible: AccessControl.storeCanViewReviewInfo(user) },\r\n\t]\r\n\r\n\tconst handleOnClick = btn => {\r\n\t\thistory.push(makeStorePath(btn.action, storeId))\r\n\t\t// setPageName(btn.action)\r\n\t}\r\n\r\n\tconst onProjectCommentModalSubmit = () => {\r\n\t\t// save the final comment to the store\r\n\t}\r\n\r\n\tconst onProjectCommentModalSuccess = (store) => {\r\n\t\t// Already done by modal. Nothing more to do.\r\n\t\t// store.storeStatus = Store.Status.REVIEWED\r\n\t\t// store.reviewRequired = 0\r\n\t\t// updateStore(store, setStore)\r\n\r\n\t\tsetStore(store)\r\n\t}\r\n\r\n\tconst showModal = (fromSc, toSc, onOk) => {\r\n\t\tdispatch(updateStoreLifecycleModalInfo(true, `Confirm Progress to ${toSc}`, [\r\n\t\t\t`The store will now be updated for the ${toSc} stage of the store lifecycle.`,\r\n\t\t\t`- The scorecard type will be set to ${toSc}.`,\r\n\t\t\t`- The store's ${fromSc} materials will be frozen, and copied to the ${toSc} store.`,\r\n\t\t\t`- Material updates made to the ${toSc} store will not affect the ${fromSc} store materials.`,\r\n\t\t\t` `,\r\n\t\t\t`The designer for the ${toSc} store may be set below`,\r\n\t\t\t`- If the designer is changed, the previous designer will have read-only access to the store.`,\r\n\t\t\t`- The previous designer will not be abled to edit the store or materials.`,\r\n\t\t\t` `,\r\n\t\t\t` `,\r\n\t\t\t`Please confirm whether to apply these updates.`\r\n\t\t], \"Confirm\", (creatorId) => {\r\n\t\t\tconsole.log(\"ok clicked\", creatorId)\r\n\t\t\tonOk && onOk(creatorId)\r\n\t\t}))\r\n\t}\r\n\r\n\tconst handleActionClick = (action) => {\r\n\t\t// console.log('store.id', store.id)\r\n\t\t// console.log('store.storeStatus', store.storeStatus)\r\n\r\n\t\tif (action === \"MARK_AS_DRAFT\") {\r\n\t\t\tstore.storeStatus = Store.Status.DRAFT\r\n\t\t\tstore.reviewRequired = 0\r\n\t\t\tupdateStore(store, setStore)\r\n\t\t} else if (action === \"SUBMIT_FOR_REVIEW\") {\r\n\t\t\tstore.storeStatus = Store.Status.AWAITING_REVIEW\r\n\t\t\tstore.reviewRequired = 1\r\n\t\t\tupdateStore(store, setStore)\r\n\t\t} else if (action === \"MARK_AS_REVIEWED\") {\r\n\t\t\tsetSelectProjectCommentModal(true)\r\n\t\t} else if (action === \"INFORM_DESIGNER\") {\r\n\t\t\tconst bodyText = \"Hi designer\\n\\nYour store review has been completed.\\n\"\r\n\t\t\tconst body = encodeURIComponent(bodyText)\r\n\t\t\twindow.location.href = `mailto:designer@aesop.com?subject=Review%20Complete&body=${body}`\r\n\t\t} else if (action === \"DOWNLOAD_STORE_INFO\") {\r\n\t\t\tconst btn = document.getElementById(\"download-store-info-csv\")\r\n\t\t\tbtn.click()\r\n\t\t} else if (action === \"DOWNLOAD_STORE_MATERIALS_CURRENT\") {\r\n\t\t\tconst btn = document.getElementById(\"download-store-materials-csv-current\")\r\n\t\t\tbtn.click()\r\n\t\t} else if (action === \"DOWNLOAD_STORE_MATERIALS_ALL\") {\r\n\t\t\tconst btn = document.getElementById(\"download-store-materials-csv-all\")\r\n\t\t\tbtn.click()\r\n\t\t} else if (action === \"PROGRESS_TO_AS_BUILT\") {\r\n\t\t\tshowModal(\"Concept\", \"As-Built\", (designerId) => {\r\n\t\t\t\tconst designerIdClean = Number(designerId)\r\n\t\t\t\tvar updatedStore = { ...store }\r\n\t\t\t\tupdatedStore = Store.setDesigner(Store.ScorecardType.AS_BUILT, designerIdClean, updatedStore)\r\n\t\t\t\tupdatedStore.scorecardType = Store.ScorecardType.AS_BUILT\r\n\r\n\t\t\t\tupdateStore(updatedStore, (store) => {\r\n\t\t\t\t\tsetStore(store)\r\n\t\t\t\t\tcopyStoreMaterialsFromScorecardType(storeId, Store.ScorecardType.CONCEPT, () => {\r\n\t\t\t\t\t\thistory.push(makeStorePath(\"lifecycle\", storeId))\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t} else if (action === \"PROGRESS_TO_AS_DECOMMISSIONED\") {\r\n\t\t\tshowModal(\"As-Built\", \"Decommissioned\", (designerId) => {\r\n\t\t\t\tconst designerIdClean = Number(designerId)\r\n\t\t\t\tvar updatedStore = { ...store }\r\n\t\t\t\tupdatedStore = Store.setDesigner(Store.ScorecardType.DECOMMISSIONED, designerIdClean, updatedStore)\r\n\t\t\t\tupdatedStore.scorecardType = Store.ScorecardType.DECOMMISSIONED\r\n\r\n\t\t\t\tupdateStore(updatedStore, (store) => {\r\n\t\t\t\t\tsetStore(store)\r\n\t\t\t\t\tcopyStoreMaterialsFromScorecardType(storeId, Store.ScorecardType.AS_BUILT, () => {\r\n\t\t\t\t\t\thistory.push(makeStorePath(\"lifecycle\", storeId))\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{/* {store.storeName} */}\r\n\t\t\t\r\n\t\t\t\t setSelectProjectCommentModal(false)}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{btns\r\n\t\t\t\t\t.filter(btn => btn.visible)\r\n\t\t\t\t\t.map(btn => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t handleOnClick(btn)}\r\n\t\t\t\t\t\t\t>{btn.title} \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t)\r\n\t\t\t\t})}\r\n\r\n\t\t\t\t{dropdowns.filter(dd => dd.visible).length > 0 &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{dropdowns.map((dd, index) => {\r\n\t\t\t\t\t\t\tif (dd.kind === 'DIVIDER') {\r\n\t\t\t\t\t\t\t\treturn \r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t handleActionClick(dd.name)}>\r\n\t\t\t\t\t\t\t\t\t\t{dd.title}\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t }\r\n\r\n\t\t\t\t{ config.isDebugMode ? {store.storeStatus}
: undefined }\r\n\t\t\t \r\n\t\t>\r\n\t)\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport { Store, copyStoreMaterialsFromScorecardType, getStoreScoreForScorecardType, loadStore, scorecardTypes } from \"./AdminStoresPage\";\r\nimport Table from 'react-bootstrap/Table'\r\nimport { createMaterialInstance, deleteMaterialInstance, getMaterialInstanceCount, getMaterialInstancesForStore, updateMaterialInstance } from \"./AdminMaterialsPage\";\r\nimport { formatGhge, formatRelImprov, formatScore } from \"../HelperFunctions\";\r\nimport { getCalcLookupData } from \"./AdminCalcsPage\";\r\nimport { config } from \"../config\";\r\nimport Form from 'react-bootstrap/Form'\r\nimport { endOfLifeAssessment } from \"./ProjectsNewMaterialModal\";\r\nimport { Col } from \"react-bootstrap\";\r\nimport { StoreLifecycleInfo } from \"./StoreLifecycleInfo\"\r\nimport { scaleColoursBG } from './GlobalVars'\r\nimport ChartDonutSingleVal from \"./ChartDonutSingleVal\";\r\n\r\nconst getEndOLifeScenarioScore = (endOLifeScenarioCalcParams, scorecardType) => {\r\n\tif (!endOLifeScenarioCalcParams || Object.keys(endOLifeScenarioCalcParams).length === 0) {\r\n\t\treturn undefined\r\n\t}\r\n\r\n\treturn endOLifeScenarioCalcParams[scorecardType]\r\n}\r\n\r\nconst calcRelImprov = (matInfo, endOLifeScenarioCalcParams) => {\r\n\tlet eolScenarioAsBuilt = matInfo.endOfLifeAssessment[Store.ScorecardType.AS_BUILT]\r\n\tlet eolScenarioDecom = matInfo.endOfLifeAssessment[Store.ScorecardType.DECOMMISSIONED]\r\n\r\n\tif (!eolScenarioAsBuilt || !eolScenarioDecom) {\r\n\t\treturn undefined\r\n\t}\r\n\r\n\tlet scoreAsBuilt = getEndOLifeScenarioScore(endOLifeScenarioCalcParams, eolScenarioAsBuilt)\r\n\tlet scoreDecom = getEndOLifeScenarioScore(endOLifeScenarioCalcParams, eolScenarioDecom)\r\n\r\n\t// console.log('calcRelImprov', scoreAsBuilt, scoreDecom, scoreAsBuilt - scoreDecom, endOLifeScenarioCalcParams)\r\n\r\n\treturn (scoreDecom - scoreAsBuilt) // / 100 // make it a ratio\r\n}\r\n\r\nexport const loadMaterialInstancesForScorecardType = (storeId, scorecardType, setMaterialInstancesByScorecard) => {\r\n\tgetMaterialInstancesForStore(storeId, scorecardType, matList => {\r\n\t\tsetMaterialInstancesByScorecard(mibsc => {\r\n\t\t\tconst updatedMibsc = { ...mibsc }\r\n\t\t\tupdatedMibsc[scorecardType] = matList\r\n\t\t\treturn updatedMibsc\r\n\t\t})\r\n\t})\r\n}\r\n\r\nfunction ProjectPhasePage({ store, setStore, user }) {\r\n\r\n\tconst [materialInstancesByScorecard, setMaterialInstancesByScorecard] = useState({})\r\n\tconst [materialInfoDecomList, setMaterialInfoDecomList] = useState([])\r\n\tconst [endOLifeScenarioCalcParams, setEndOLifeScenarioCalcParams] = useState({})\r\n\tconst [isTableEditable, setIsTableEditable] = useState(true)\r\n\r\n\tconst storeId = store.id\r\n\r\n\t// Run once\r\n\tuseEffect(() => {\r\n\t\t// console.log('ProjectPhasePage.getCalcLookupData', storeId)\r\n\t\tgetCalcLookupData(\"EndOfLifeSustainability\", setEndOLifeScenarioCalcParams)\r\n\t}, [])\r\n\r\n\tuseEffect(() => {\r\n\t\t// console.log('ProjectPhasePage.useEffect for materialInfoDecomList', Object.keys(materialInstancesByScorecard).length, Object.keys(endOLifeScenarioCalcParams).length)\r\n\t\tsetMaterialInfoDecomList(generateMaterialInfoDecomList())\r\n\t}, [endOLifeScenarioCalcParams, materialInstancesByScorecard])\r\n\r\n\tconst generateMaterialInfoDecomList = () => {\r\n\t\t// console.log(\"generateMaterialInfoDecomList\", Object.keys(materialInstancesByScorecard).length)\r\n\r\n\t\tconst matInfoMap = {}\r\n\r\n\t\t/** Read the material instances into the local state for the given scorecardType */\r\n\t\tconst readMatInst = (scorecardType, matInstForSt, infoId) => {\r\n\t\t\t// console.log(\"generateMaterialInfoDecomList st\", st, matInstForSt.length)\r\n\t\t\t// const matInfo = matInstList.find(m => m.materialTypeId === matInstForSt.materialTypeId)\r\n\r\n\t\t\tlet matInfo = matInfoMap[infoId]\r\n\t\t\t// TODO: MATCH BY parentMaterialInstanceId???\r\n\r\n\t\t\tif (!matInfo) {\r\n\t\t\t\tmatInfo =\r\n\t\t\t\t{\r\n\t\t\t\t\tid: infoId,\r\n\t\t\t\t\tinstance: {}, // materialInst per scorecardType\r\n\t\t\t\t\t// new material info object\r\n\t\t\t\t\tmaterialTypeId: matInstForSt.materialTypeId,\r\n\t\t\t\t\titemType: matInstForSt.itemType,\r\n\t\t\t\t\tendOfLifeAssessment: {}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmatInfo.instance[scorecardType] = matInstForSt\r\n\t\t\tmatInfo.endOfLifeAssessment[scorecardType] = matInstForSt.endOfLifeAssessment\r\n\t\t\tmatInfo.relativeImprovement = calcRelImprov(matInfo, endOLifeScenarioCalcParams)\r\n\r\n\t\t\tmatInfoMap[infoId] = matInfo\r\n\t\t}\r\n\r\n\t\t/// Read for all scorecardTypes in turn and match by given id\r\n\t\t// for (const st in materialInstancesByScorecard) {\r\n\t\t// \tconst matInstForStList = materialInstancesByScorecard[st]\r\n\r\n\t\t// \tfor (var i in matInstForStList) {\r\n\t\t// \t\tconst matInstForSt = matInstForStList[i]\r\n\r\n\t\t// \t\tconst infoId = matInstForSt.materialTypeId\r\n\t\t// \t\t// !matInstForSt.parentMaterialInstanceId || matInstForSt.parentMaterialInstanceId === 0\r\n\t\t// \t\t// ? matInstForSt.id // this is the top level parent\r\n\t\t// \t\t// : matInstForSt.parentMaterialInstanceId // this is a child\r\n\r\n\t\t// \t\treadMatInst(st, matInstForSt, infoId)\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tmaterialInstancesByScorecard[Store.ScorecardType.AS_BUILT] && materialInstancesByScorecard[Store.ScorecardType.AS_BUILT].forEach(mat => readMatInst(Store.ScorecardType.AS_BUILT, mat, mat.id))\r\n\t\tmaterialInstancesByScorecard[Store.ScorecardType.DECOMMISSIONED] && materialInstancesByScorecard[Store.ScorecardType.DECOMMISSIONED].forEach(mat => readMatInst(Store.ScorecardType.DECOMMISSIONED, mat, mat.parentMaterialInstanceId))\r\n\r\n\t\t// console.log(\"matInfoMap\", matInfoMap)\r\n\r\n\t\treturn Object.values(matInfoMap)\r\n\t}\r\n\r\n\tconst arraySum = (arr) => {\r\n\t\tif (arr.length === 0) {\r\n\t\t\treturn undefined\r\n\t\t} else if (arr.length === 1) {\r\n\t\t\treturn arr[0]\r\n\t\t} else {\r\n\t\t\treturn arr.reduce((a, b) => a + b)\r\n\t\t}\r\n\t}\r\n\r\n\tconst arrayAvg = (arr) => {\r\n\t\tif (arr.length === 0) {\r\n\t\t\treturn undefined\r\n\t\t} else if (arr.length === 1) {\r\n\t\t\treturn arr[0]\r\n\t\t} else {\r\n\t\t\treturn arraySum(arr) / arr.length\r\n\t\t}\r\n\t}\r\n\r\n\tconst calcAverageTotalScore = (materialInfoDecomList, scorecardType) => {\r\n\t\tconst scores =\r\n\t\t\tmaterialInfoDecomList\r\n\t\t\t\t.map(matInfo => matInfo.endOfLifeAssessment[scorecardType])\r\n\t\t\t\t.filter(eol => !!eol)\r\n\t\t\t\t.map(eolScenario => getEndOLifeScenarioScore(endOLifeScenarioCalcParams, eolScenario))\r\n\r\n\t\t// console.log('calcAverageTotalScore', scorecardType, materialInfoDecomList.length, scores.length)\r\n\r\n\t\treturn arrayAvg(scores)\r\n\t}\r\n\r\n\t// Average relative improvement\r\n\tconst calcAverageRelImprovScore = (materialInfoDecomList) => {\r\n\t\tlet listWithScores = materialInfoDecomList.filter(matInfo => matInfo.relativeImprovement)\r\n\t\t// console.log(\"calcAverageRelImprovScore\", listWithScores.length)\r\n\t\treturn arrayAvg(listWithScores.map(matInfo => matInfo.relativeImprovement))\r\n\t}\r\n\r\n\tconst avgTotalScoreAsBuilt = calcAverageTotalScore(materialInfoDecomList, Store.ScorecardType.AS_BUILT)\r\n\tconst avgTotalScoreDecom = calcAverageTotalScore(materialInfoDecomList, Store.ScorecardType.DECOMMISSIONED)\r\n\tconst aveRelImprov = calcAverageRelImprovScore(materialInfoDecomList)\r\n\r\n\t// console.log(\"materialInfoDecomList\", materialInfoDecomList)\r\n\r\n\t// update the local data first, then fire a DB update request\r\n\tconst updateMatInstEolField = (scorecardType, matInstId, newEol) => {\r\n\t\tsetMaterialInfoDecomList(matInfoDecomList => {\r\n\t\t\tconst matInfoDecomListUpdated = [...matInfoDecomList]\r\n\r\n\t\t\tmatInfoDecomListUpdated.map(matInfoItem => {\r\n\t\t\t\t// console.log(\"matInfoItem\", matInfoItem)\r\n\t\t\t\tconst matInstItem = matInfoItem.instance[scorecardType]\r\n\r\n\t\t\t\tif (matInstItem && matInstItem.id === matInstId) {\r\n\t\t\t\t\t// console.log(\"found mat inst\", matInstItem)\r\n\r\n\t\t\t\t\t// just update it immediately\r\n\t\t\t\t\tconst matInstItemUpdated = { ...matInstItem }\r\n\t\t\t\t\tmatInstItemUpdated.endOfLifeAssessment = newEol\r\n\t\t\t\t\tupdateMaterialInstance(matInstItemUpdated, scorecardType, () => {\r\n\t\t\t\t\t\tloadMaterialInstancesForScorecardType(storeId, scorecardType, setMaterialInstancesByScorecard)\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\tconst matInfoItemUpdated = { ...matInfoItem }\r\n\t\t\t\t\tmatInfoItemUpdated.endOfLifeAssessment[scorecardType] = newEol\r\n\r\n\t\t\t\t\treturn matInfoItemUpdated\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn matInfoItem\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\treturn matInfoDecomListUpdated\r\n\t\t})\r\n\t}\r\n\r\n\tconst renderEolCell = (matInfo, scorecardType) => {\r\n\r\n\t\tif (isTableEditable && scorecardType === Store.ScorecardType.DECOMMISSIONED) {\r\n\r\n\t\t\tconst onChangeEolDecom = (e) => {\r\n\t\t\t\tconst newEol = e.target.value\r\n\t\t\t\t// console.log(\"onChangeEolDecom\", newEol, scorecardType, matInfo)\r\n\t\t\t\tlet matInst = matInfo.instance[scorecardType]\r\n\r\n\t\t\t\tif (!matInst) {\r\n\t\t\t\t\t// There's no material instance for this scorecardType,\r\n\t\t\t\t\t// so create a new material\r\n\t\t\t\t\tconst matInstConcept = matInfo.instance[Store.ScorecardType.AS_BUILT]\r\n\r\n\t\t\t\t\tif (!matInstConcept) {\r\n\t\t\t\t\t\t// This should never happen as we always have an As-built material \r\n\t\t\t\t\t\t// in this table that we are working in\r\n\t\t\t\t\t\tconsole.error(\"Could not find CONCEPT scorecardType material instance\")\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst parentId = matInstConcept.id\r\n\t\t\t\t\t\tmatInst = { ...matInstConcept }\r\n\t\t\t\t\t\tmatInst.scorecardType = scorecardType // Store.ScorecardType.DECOMMISSIONED\r\n\t\t\t\t\t\tmatInst.parentMaterialInstanceId = matInst.id\r\n\t\t\t\t\t\tdelete matInst.id // we want to create a new instance\r\n\t\t\t\t\t\tmatInst.endOfLifeAssessment = newEol\r\n\r\n\t\t\t\t\t\t// console.log(\"Creating missing material instance\", matInst, scorecardType)\r\n\r\n\t\t\t\t\t\t// add it to the local state so that the next update will cause it to be used\r\n\t\t\t\t\t\t// and write to the DB\r\n\t\t\t\t\t\tsetMaterialInfoDecomList(matInfoDecomList => {\r\n\t\t\t\t\t\t\tconst matInfoDecomListUpdated = [...matInfoDecomList]\r\n\r\n\t\t\t\t\t\t\tmatInfoDecomListUpdated.map(matInfoItem => {\r\n\t\t\t\t\t\t\t\tif (matInfoItem.id === parentId) {\r\n\t\t\t\t\t\t\t\t\tconst matInfoItemUpdated = { ...matInfoItem }\r\n\t\t\t\t\t\t\t\t\tmatInfoItemUpdated.instance[scorecardType] = matInst\r\n\t\t\t\t\t\t\t\t\tmatInfoItemUpdated.endOfLifeAssessment[scorecardType] = newEol\r\n\r\n\t\t\t\t\t\t\t\t\treturn matInfoItemUpdated\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\treturn matInfoItem\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\treturn matInfoDecomListUpdated\r\n\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t// Create the instance in the DB\r\n\t\t\t\t\t\tcreateMaterialInstance(matInst, scorecardType, () => {\r\n\t\t\t\t\t\t\tloadMaterialInstancesForScorecardType(storeId, scorecardType, setMaterialInstancesByScorecard)\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst matInstId = matInst.id\r\n\t\t\t\t\tupdateMatInstEolField(scorecardType, matInstId, newEol)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t onChangeEolDecom(e)}>\r\n\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t{endOfLifeAssessment.map((m) => (\r\n\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t \r\n\t\t\t\t\t{/* {matInfo.endOfLifeAssessment[scorecardType]} */}\r\n\t\t\t\t \r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\tconst scenario = getEndOLifeScenarioScore(endOLifeScenarioCalcParams, matInfo.endOfLifeAssessment[scorecardType])\r\n\t\tconst val = matInfo.endOfLifeAssessment[scorecardType]\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{val}\r\n\t\t\t \r\n\t\t)\r\n\t}\r\n\r\n\tconst renderRelImprovCell = (matInfo) => {\r\n\t\treturn (\r\n\t\t\t -33 && matInfo.relativeImprovement < 33 ? 'text-center ' + scaleColoursBG.medium : \"\"}\r\n\t\t\t${matInfo.relativeImprovement >= 33 ? 'text-center ' + scaleColoursBG.low : \"\"}\r\n\t\t\t`}>\r\n\t\t\t\t\r\n\t\t\t\t\t{/* {\r\n\t\t\t\t\tmatInfo.relativeImprovement && formatRelImprov(matInfo.relativeImprovement)\r\n\t\t\t\t} */}\r\n\r\n{/* \t\t\t\t\t{matInfo.relativeImprovement <= -33 ? : \"\"}\r\n\t\t\t\t\t{matInfo.relativeImprovement > -33 && matInfo.relativeImprovement < 33 ? : \"\"}\r\n\t\t\t\t\t{matInfo.relativeImprovement >= 33 ? : \"\"} */}\r\n\t\t\t\t\t{matInfo.relativeImprovement <= -33 ? \"Worse\" : \"\"}\r\n\t\t\t\t\t{matInfo.relativeImprovement > -33 && matInfo.relativeImprovement < 33 ? \"About the same\" : \"\"}\r\n\t\t\t\t\t{matInfo.relativeImprovement >= 33 ? \"Better\" : \"\"}\r\n\t\t\t\t \r\n\t\t\t \r\n\t\t)\r\n\t}\r\n\r\n\tconst renderDecommissioningInfo = () => {\r\n\r\n\t\tif (materialInfoDecomList.length === 0) {\r\n\t\t\treturn undefined\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\tDecommissioning Scorecard \r\n\t\t\t\t
\r\n\r\n\t\t\t\t{/* \r\n\t\t\t\t\t \r\n\t\t\t\t\t\tDecommissioning Scorecard \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tEdit Mode \r\n\t\t\t\t\t\t\t setIsTableEditable(e.target.checked === true)}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t
*/}\r\n\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t{formatRelImprov(avgTotalScoreAsBuilt)}% \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tAverage total score As-Built \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t{formatRelImprov(avgTotalScoreDecom)}% \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tAverage total score Decommissioned \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t{formatRelImprov(aveRelImprov)}% \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tAverage relative improvement \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tMaterial \r\n\t\t\t\t\t\t\t\t{/* Concept */}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tAs-Built \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\tEnd of life design scenario \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tDecommissioned \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\tActual end of life scenario \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tRelative Improvement \r\n\t\t\t\t\t\t\t\t{/* Actions */}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{materialInfoDecomList.map(matInfo => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{matInfo.itemType} \r\n\t\t\t\t\t\t\t\t\t\t\t{/* {matInfo.endOfLifeAssessment[Store.ScorecardType.CONCEPT]} */}\r\n\t\t\t\t\t\t\t\t\t\t\t{renderEolCell(matInfo, Store.ScorecardType.AS_BUILT)}\r\n\t\t\t\t\t\t\t\t\t\t\t{renderEolCell(matInfo, Store.ScorecardType.DECOMMISSIONED)}\r\n\t\t\t\t\t\t\t\t\t\t\t{renderRelImprovCell(matInfo)}\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t \r\n\r\n\t\t\t\t{/* \t\t\t\tAverage total score As-Built = {formatRelImprov(avgTotalScoreAsBuilt)}% \r\n\t\t\t\tAverage total score Decommissioned = {formatRelImprov(avgTotalScoreDecom)}% \r\n\t\t\t\tAverage relative improvement = {formatRelImprov(aveRelImprov)}% */}\r\n\t\t\t>\r\n\t\t)\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{/* {config.isDebugMode ? ( */}\r\n\t\t\t \r\n\t\t\t{/* ) : undefined } */}\r\n\t\t\t{renderDecommissioningInfo()}\r\n\t\t>\r\n\t)\r\n}\r\n\r\nexport default ProjectPhasePage;","import React, { useEffect, useState } from \"react\"\r\nimport Container from 'react-bootstrap/Container'\r\nimport Row from 'react-bootstrap/Row'\r\nimport { Store, copyStoreMaterialsFromScorecardType, getStoreScoreForScorecardType, loadStore, scorecardTypes } from \"./AdminStoresPage\"\r\nimport Table from 'react-bootstrap/Table'\r\nimport { createMaterialInstance, deleteMaterialInstance, getMaterialInstanceCount, getMaterialInstancesForStore, updateMaterialInstance } from \"./AdminMaterialsPage\"\r\nimport { formatGhge, formatRelImprov, formatScore } from \"../HelperFunctions\"\r\nimport { getCalcLookupData } from \"./AdminCalcsPage\"\r\nimport { config } from \"../config\"\r\nimport Form from 'react-bootstrap/Form'\r\nimport { endOfLifeAssessment } from \"./ProjectsNewMaterialModal\"\r\nimport { Col } from \"react-bootstrap\"\r\nimport { loadMaterialInstancesForScorecardType } from \"./ProjectPhasePage\"\r\n\r\nexport const StoreLifecycleInfo = ({ storeId, setStore, materialInstancesByScorecard, setMaterialInstancesByScorecard }) => {\r\n\tconst scorecardInfoListInitial = scorecardTypes.map(st => {\r\n\t\treturn {\r\n\t\t\tscorecardType: st.name,\r\n\t\t\tscorecardTypeTitle: st.title,\r\n\t\t\tmaterialInstanceCount: undefined,\r\n\t\t\tghgeEmissions: undefined,\r\n\t\t\tstoreTotalScore: undefined\r\n\t\t}\r\n\t})\r\n\t\r\n\tconst [scorecardInfoList, setScorecardInfoList] = useState(scorecardInfoListInitial)\r\n\r\n\tconst updateScorecardInfoListItem = (scorecardType, updatedFields) => {\r\n\t\tsetScorecardInfoList(currentScorecardInfoList => {\r\n\t\t\tconst updated = currentScorecardInfoList.map(si => {\r\n\t\t\t\tif (si.scorecardType === scorecardType) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t...si,\r\n\t\t\t\t\t\t...updatedFields\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn si\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t\r\n\t\t\treturn updated\r\n\t\t})\r\n\t}\r\n\r\n\tconst loadAllScorecardsInfo = () => {\r\n\t\t// get all the scores and material counts\r\n\t\tscorecardTypes.forEach(sci => {\r\n\t\t\t// console.log(\"scorecardType\", sci)\r\n\t\t\tconst scorecardType = sci.name\r\n\t\t\tgetStoreScoreForScorecardType(storeId, scorecardType, ({ totalScore, ghgeEmissions }) => \r\n\t\t\t\tupdateScorecardInfoListItem(scorecardType, { storeTotalScore: totalScore, ghgeEmissions }))\r\n\r\n\t\t\tgetMaterialInstanceCount(storeId, scorecardType, count => \r\n\t\t\t\tupdateScorecardInfoListItem(scorecardType, { materialInstanceCount: count }))\r\n\r\n\t\t\tloadMaterialInstancesForScorecardType(storeId, scorecardType, setMaterialInstancesByScorecard)\r\n\t\t})\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\t// console.log('ProjectPhasePage.useEffect', storeId)\r\n\r\n\t\tloadStore(storeId, setStore)\r\n\t\tloadAllScorecardsInfo()\r\n\t}, [ storeId ])\r\n\t\r\n\tconst handleClickSubmit = (action, e, scorecardType) => {\r\n\t\tif (action === \"COPY\") {\r\n\t\t\tconsole.log(\"TODO: copy materials from\", scorecardType)\r\n\t\t\tcopyStoreMaterialsFromScorecardType(storeId, scorecardType, () => {\r\n\t\t\t\tloadAllScorecardsInfo()\r\n\t\t\t})\r\n\t\t} else if (action === \"DELETE\") {\r\n\t\t\tconst matInstForStList = materialInstancesByScorecard[scorecardType]\r\n\t\t\tconsole.log(\"Deleting material instances\", scorecardType, matInstForStList)\r\n\t\t\tmatInstForStList.forEach(matInst => deleteMaterialInstance(matInst.id, () => {\r\n\t\t\t\tloadAllScorecardsInfo()\r\n\t\t\t}))\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\tStore Lifecycle Information \r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tScorecard Type \r\n\t\t\t\t\t\t\tMaterials \r\n\t\t\t\t\t\t\tEmbodied GHGE \r\n\t\t\t\t\t\t\tScore \r\n\t\t\t\t\t\t\t{config.isDebugMode && Actions }\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{scorecardInfoList.map(sti => {\r\n\t\t\t\t\t\t\t\tconst nextScorcardTypeInfo = Store.getScorecardTypeInfoNext(sti.scorecardType)\r\n\t\t\t\t\t\t\t\tconst nextScorcardTypeMaterialInstanceCount = nextScorcardTypeInfo && scorecardInfoList.find(s => s.scorecardType === nextScorcardTypeInfo.name).materialInstanceCount\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{sti.scorecardTypeTitle} \r\n\t\t\t\t\t\t\t\t\t\t{sti.materialInstanceCount} \r\n\t\t\t\t\t\t\t\t\t\t{formatGhge(sti.ghgeEmissions)} {sti.ghgeEmissions !== undefined ? kgCO2e : ''} \r\n\t\t\t\t\t\t\t\t\t\t{formatScore(sti.storeTotalScore)} \r\n\t\t\t\t\t\t\t\t\t\t{config.isDebugMode && (\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t{/* {nextScorcardTypeInfo && nextScorcardTypeInfo.title} = {nextScorcardTypeMaterialInstanceCount} */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{nextScorcardTypeInfo && nextScorcardTypeMaterialInstanceCount === 0 ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t handleClickSubmit(\"COPY\", e, sti.scorecardType)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCopy Materials to {nextScorcardTypeInfo.title}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t{config.isDebugMode ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t handleClickSubmit(\"DELETE\", e, sti.scorecardType)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tDelete Materials\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t )\r\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t \r\n\t\t>\r\n\t)\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Header from \"./Header\";\r\nimport ProjectInformationBrief from \"./ProjectInformationBrief\";\r\nimport ProjectScores from \"./ProjectScores\";\r\nimport ProjectSummaryCharts from \"./ProjectSummaryCharts\";\r\nimport TableGetMaterialsByStore from \"./TableGetMaterialsByStore\";\r\nimport ProjectSummaryMaterials from \"./ProjectSummaryMaterials\";\r\nimport { scaleValues, scaleColoursCss, scaleColours, endOfLifeAssessmentDets, singleDonutColour } from './GlobalVars'\r\nimport { Button } from \"react-bootstrap\";\r\nimport { useHistory, useLocation, useRouteMatch, useParams } from 'react-router-dom';\r\nimport { StoreNavBar } from './StoreNavBar'\r\nimport { loadStore } from \"./AdminStoresPage\";\r\nimport { AccessControl } from \"../AccessControl\";\r\nimport Table from 'react-bootstrap/Table'\r\nimport { StoreLifecycleInfo } from \"./StoreLifecycleInfo\";\r\n\r\nexport const storePathView = '/stores/:storeId/view'\r\nexport const storePathEdit = '/stores/:storeId/edit'\r\nexport const storePathMaterials = '/stores/:storeId/materials'\r\n\r\nexport const makeStorePathView = (storeId) => {\r\n\treturn storePathView.replace(':storeId', storeId)\r\n}\r\n\r\nexport const makeStorePathEdit = (storeId) => {\r\n\treturn storePathEdit.replace(':storeId', storeId)\r\n}\r\n\r\nexport const makeStorePathMaterials = (storeId) => {\r\n\treturn storePathMaterials.replace(':storeId', storeId)\r\n}\r\n\r\nexport const makeStorePath = (action, storeId) => {\r\n\treturn `/stores/${storeId}/${action}`\r\n}\r\n\r\nfunction ProjectSummaryPage({ store, setStore, user }) {\r\n\t\r\n\tconst dispatch = useDispatch();\r\n\tconst history = useHistory();\r\n\tconst storeId = store.id\r\n\tconst userId = user.id\r\n\r\n\tfunction editStore(storeId) {\r\n\t\tconst path = makeStorePathEdit(storeId)\r\n\t\thistory.push(path);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\tStore Details \r\n\t\t\t
\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\tStore Performance \r\n\t\t\t
\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\tCircularity Score \r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t
\r\n\r\n\t\t\t undefined} />\r\n\r\n\t\t\t\r\n\t\t\t\tMaterials \r\n\t\t\t
\r\n{/* \t\t\t\r\n\t\t\t\t \r\n\t\t\t
*/}\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t
\r\n\t\t>\r\n\t)\r\n}\r\n\r\nexport default ProjectSummaryPage;","import React, { useEffect, useState } from \"react\"\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory, Link } from 'react-router-dom'\r\nimport axios from 'axios'\r\nimport Header from \"./Header\"\r\nimport Container from 'react-bootstrap/Container'\r\nimport Dropdown from 'react-bootstrap/Dropdown'\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Toast from 'react-bootstrap/Toast';\r\nimport Form from 'react-bootstrap/Form';\r\nimport Row from 'react-bootstrap/Row'\r\n// import Col from 'react-bootstrap/Col'\r\nimport Button from 'react-bootstrap/Button'\r\nimport Table from 'react-bootstrap/Table'\r\n// import Accordion from 'react-bootstrap/Accordion'\r\nimport { makeStorePathView, makeStorePathEdit, makeStorePathMaterials } from './ProjectSummaryPage'\r\nimport { formatScore, formatGhge } from '../HelperFunctions'\r\nimport { config } from '../config'\r\nimport { DbObj, DbObjStatus, loadUsers } from \"./AdminUsersPage\"\r\nimport { UserRole } from \"../AccessControl\"\r\n\r\nexport const Store = {\r\n ScorecardType: {\r\n CONCEPT: 'CONCEPT',\r\n AS_BUILT: 'AS_BUILT',\r\n DECOMMISSIONED: 'DECOMMISSIONED',\r\n },\r\n Status: {\r\n DRAFT: 'DRAFT',\r\n AWAITING_REVIEW: 'AWAITING_REVIEW',\r\n REVIEWED: 'REVIEWED',\r\n DELETED: 'DELETED',\r\n },\r\n\r\n getStatusTitle: (status) => { \r\n const st = statusList.find(st => st.name === status)\r\n return st ? st.title : \"\"\r\n },\r\n\r\n /** Get the scorecardType title from the name */\r\n getScorecardTypeTitle: (scorecardType) => {\r\n const st = scorecardTypes.find(st => st.name === scorecardType)\r\n return st ? st.title : \"\"\r\n },\r\n\r\n /** Get the scorecardType next in the sequence */\r\n getScorecardTypeInfoNext: (scorecardType) => {\r\n const index = scorecardTypes.findIndex(st => st.name === scorecardType)\r\n const indexNext = index + 1\r\n\r\n if (index === -1 || indexNext >= scorecardTypes.length) {\r\n return undefined\r\n } else {\r\n return scorecardTypes[indexNext]\r\n }\r\n },\r\n\r\n /** Get the designer for the given scorecardType */\r\n getDesignerId: (scorecardType, store) => {\r\n\r\n if (scorecardType === Store.ScorecardType.CONCEPT) {\r\n\t\t\treturn store.designerIdConcept\r\n\t\t} else if (scorecardType === Store.ScorecardType.AS_BUILT) {\r\n\t\t\treturn store.DesignerIdAsBuilt\r\n\t\t} else if (scorecardType === Store.ScorecardType.DECOMMISSIONED) {\r\n\t\t\treturn store.DesignerIdDecom\r\n\t\t}\r\n\r\n return undefined\r\n },\r\n\r\n /** Get the designer for the current store scorecardType */\r\n getCurrentDesignerId: (store) => {\r\n // console.log('getCurrentDesignerId', store)\r\n return Store.getDesignerId(store.scorecardType, store)\r\n },\r\n\r\n /** Set the designer for a given scorecardType */\r\n setDesigner: (scorecardType, designerUserId, store) => {\r\n const storeDataClean = { ...store }\r\n\r\n if (scorecardType === Store.ScorecardType.CONCEPT) {\r\n\t\t\tstoreDataClean.designerIdConcept = designerUserId\r\n\t\t} else if (scorecardType === Store.ScorecardType.AS_BUILT) {\r\n\t\t\tstoreDataClean.DesignerIdAsBuilt = designerUserId\r\n\t\t} else if (scorecardType === Store.ScorecardType.DECOMMISSIONED) {\r\n\t\t\tstoreDataClean.DesignerIdDecom = designerUserId\r\n\t\t}\r\n\r\n return storeDataClean\r\n }\r\n}\r\n\r\nconst statusList = [\r\n\t{ title: \"Draft\", name: Store.Status.DRAFT },\r\n\t{ title: \"Awaiting Review\", name: Store.Status.AWAITING_REVIEW },\r\n\t{ title: \"Reviewed\", name: Store.Status.REVIEWED },\r\n\t{ title: \"Deleted\", name: Store.Status.DELETED },\r\n];\r\n\r\nexport const scorecardTypes = [\r\n\t{ id: 1, title: \"Concept\", name: Store.ScorecardType.CONCEPT },\r\n\t{ id: 2, title: \"As-Built\", name: Store.ScorecardType.AS_BUILT },\r\n\t{ id: 3, title: \"Decommissioned\", name: Store.ScorecardType.DECOMMISSIONED },\r\n];\r\n\r\nconst scrollToTop = () => {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: 'smooth' // for smoothly scrolling\r\n });\r\n}\r\n\r\nexport const loadAllStores = (setStoreList) => {\r\n axios\r\n .get(`${config.backendUrl}/stores`)\r\n .then(response => response.data)\r\n .then(stores => {\r\n setStoreList(stores)\r\n })\r\n}\r\n\r\nconst cleanStoreDataForDb = (storeData) => {\r\n const clean = {...storeData}\r\n delete clean[\"createdAt\"]\r\n clean.openingDate = new Date(clean.openingDate) // DATETIME db field\r\n return clean\r\n}\r\n\r\nexport const loadStore = (storeId, onSuccess, onError) => {\r\n axios.get(`${config.backendUrl}/stores/${storeId}`)\r\n .then(function (response) {\r\n onSuccess(response.data)\r\n })\r\n .catch(response => {\r\n console.log('Error loading store', storeId, response)\r\n onError && onError(response && response.data)\r\n }) \r\n}\r\n\r\nexport const createStore = (store, onSuccess) => {\r\n axios.post(`${config.backendUrl}/store`, cleanStoreDataForDb(store))\r\n .then(function (response) {\r\n // console.log(response);\r\n onSuccess(response.data)\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n })\r\n}\r\n\r\nexport const updateStore = (store, onSuccess, onError) => {\r\n // console.log('updateStore', store)\r\n axios.put(`${config.backendUrl}/stores/${store.id}`, cleanStoreDataForDb(store))\r\n .then(function (response) {\r\n // console.log(response)\r\n onSuccess(response.data)\r\n })\r\n .catch(function (response) {\r\n console.error('Error updating store', response && response.data)\r\n onError && onError(response && response.data)\r\n })\r\n}\r\n\r\nexport const getStoreScoreForScorecardType = (storeId, scorecardType, onSuccess, onError) => {\r\n axios.get(`${config.backendUrl}/stores/${storeId}/scores/${scorecardType}`)\r\n .then(function (response) {\r\n onSuccess(response.data)\r\n })\r\n .catch(response => {\r\n console.log('Error loading store', storeId, response)\r\n onError && onError(response && response.data)\r\n }) \r\n}\r\n\r\nexport const copyStoreMaterialsFromScorecardType = (storeId, scorecardType, onSuccess, onError) => {\r\n axios.get(`${config.backendUrl}/stores/${storeId}/copy-materials/${scorecardType}`)\r\n .then(function (response) {\r\n onSuccess(response.data)\r\n })\r\n .catch(response => {\r\n // show user the error message\r\n console.log('Error loading store', storeId, response)\r\n onError && onError(response && response.data)\r\n }) \r\n}\r\n\r\nexport const AdminStoresPage = (props) => {\r\n const [storeList, setStoreList] = useState([])\r\n\tconst [usersAll, setUsersAll] = useState([])\r\n\tconst [users, setUsers] = useState([])\r\n const [showDeleteConfirmModal, setShowDeleteConfirmModal] = useState(false)\r\n const [nameOfStoreToDelete, setNameOfStoreToDelete] = useState(\"\")\r\n const [showAdminToastMsg, setShowAdminToastMsg] = useState(false)\r\n const [adminToastMsg, setAdminToastMsg] = useState(\"\")\r\n const [currentStore, setCurrentStore] = useState(undefined)\r\n\r\n const history = useHistory()\r\n\r\n const loadAllStoresAndSetState = () => {\r\n loadAllStores(stores => {\r\n setStoreList(stores.map(DbObj.ofDb))\r\n })\r\n }\r\n\r\n const recalcStoreScore = (storeId) => {\r\n axios\r\n .get(`${config.backendUrl}/stores/recalc/${storeId}`)\r\n .then(response => loadAllStoresAndSetState())\r\n }\r\n\r\n useEffect(() => {\r\n loadAllStoresAndSetState()\r\n loadUsers(users => {\r\n setUsersAll(users)\r\n setUsers(users.filter(u => u.role !== UserRole.Admin))\r\n })\r\n }, [])\r\n\r\n const findUserById = userId => usersAll.find(user => user.id === userId)\r\n\r\n /** Update a store in the local state */\r\n const setStore = (updatedStore) => {\r\n const updatedStores = storeList.map(s => {\r\n if (s.id === updatedStore.id) {\r\n return { ...updatedStore }\r\n } else {\r\n return s\r\n }\r\n })\r\n\r\n console.log('updatedStores', updatedStores)\r\n setStoreList(updatedStores)\r\n }\r\n\r\n // const onStoreStatusChange = (e) => {\r\n // const newStatus = e.target.value\r\n // console.log(\"onStoreStatusChange\", e)\r\n // }\r\n\r\n const handleStoreActionClick = (store, actionName) => {\r\n if (actionName === \"VIEW\") {\r\n const path = makeStorePathView(store.id)\r\n history.push(path);\r\n scrollToTop()\r\n } else if (actionName === \"EDIT\") {\r\n // const path = makeStorePathEdit(store.id)\r\n // history.push(path);\r\n // scrollToTop()\r\n setStore({ ...store, _objStatus: DbObjStatus.CHANGED})\r\n } else if (actionName === \"ADD_MATERIALS\") {\r\n const path = makeStorePathMaterials(store.id)\r\n history.push(path);\r\n scrollToTop()\r\n } else if (actionName === \"DELETE\") {\r\n // Set storeStatus to \"DELETE\"\r\n } else if (actionName === \"DELETE_PERMANENTLY\") {\r\n setNameOfStoreToDelete(\"\")\r\n setCurrentStore(store)\r\n setShowDeleteConfirmModal(true)\r\n } else if (actionName === \"RECALC_SCORE\") {\r\n recalcStoreScore(store.id)\r\n }\r\n }\r\n \r\n const renderStoreRowActions = (store) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n handleStoreActionClick(store, \"VIEW\")}>View \r\n handleStoreActionClick(store, \"EDIT\")}>Edit \r\n handleStoreActionClick(store, \"ADD_MATERIALS\")}>Add Materials \r\n {/* handleStoreActionClick(store, \"DELETE\")}>Delete */}\r\n handleStoreActionClick(store, \"DELETE_PERMANENTLY\")}>Permanently Delete \r\n handleStoreActionClick(store, \"RECALC_SCORE\")}>Recalculate Score \r\n \r\n \r\n );\r\n }\r\n\r\n const handleDeleteConfirmModelClose = () => { setShowDeleteConfirmModal(false) }\r\n\r\n const showToastMsg = (msg) => {\r\n setAdminToastMsg(msg)\r\n setShowAdminToastMsg(true)\r\n }\r\n\r\n const handleDeleteConfirmModelDelete = () => {\r\n setShowDeleteConfirmModal(false)\r\n scrollToTop()\r\n\r\n // console.log(\"Deleting store with id\", currentStore.id, currentStore.storeName)\r\n\r\n axios.delete(`${config.backendUrl}/stores/${currentStore.id}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\t// var data = response.data\r\n\t\t\t\t// console.log(\"store delete response\", data)\r\n showToastMsg(\"Store deleted (\" + currentStore.storeName + \")\")\r\n setNameOfStoreToDelete(\"\")\r\n loadAllStoresAndSetState()\r\n\t\t\t})\r\n .catch(() => {\r\n showToastMsg(\"Error deleting store (\" + currentStore.storeName + \"). Please try again.\")\r\n })\r\n }\r\n\r\n const handleStoreCreatorChange = (e, store) => {\r\n const userId = e.target.value\r\n console.log('store creator changing to', userId)\r\n\r\n const uStore = {\r\n ...store,\r\n creatorId: Number(userId)\r\n }\r\n\r\n // TODO: show toast message\r\n updateStore(uStore, () => loadAllStoresAndSetState())\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n\r\n \r\n Stores \r\n
\r\n\r\n {/* Admin toast message */}\r\n setShowAdminToastMsg(false)}>\r\n \r\n \r\n Admin Notification \r\n {/* {adminToastMsg} */}\r\n \r\n {adminToastMsg} \r\n \r\n\r\n {/* Delete confirmation modal */}\r\n \r\n \r\n Confirm Store Delete \r\n \r\n \r\n \r\n Are you sure you want to delete this store?
\r\n {currentStore && currentStore.storeName} \r\n \r\n To confirm, please enter store name below
\r\n setNameOfStoreToDelete(e.target.value)} value={nameOfStoreToDelete}> \r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n Permanently Delete Store\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Name \r\n Creator \r\n Designer \r\n Country \r\n {/* Region */}\r\n Scorecard \r\n {/* Location Type */}\r\n {/* Review Required */}\r\n Status \r\n GHG \r\n Circularity Score \r\n Actions \r\n \r\n \r\n \r\n {storeList.map((store) => {\r\n const userCreator = findUserById(store.creatorId)\r\n const userDesignerId = Store.getCurrentDesignerId(store)\r\n const userDesigner = userDesignerId && findUserById(userDesignerId)\r\n\r\n return (\r\n \r\n {store.storeName} \r\n {store._objStatus === DbObjStatus.DB ? (\r\n {userCreator && userCreator.displayName} \r\n ) : (\r\n \r\n handleStoreCreatorChange(e, store)}>\r\n Select a user \r\n {users.map(u => (\r\n {u.displayName} \r\n ))}\r\n \r\n \r\n )}\r\n {userDesigner && userDesigner.displayName} \r\n {store.country} \r\n {/* {store.region} */}\r\n {store.scorecardType} \r\n {/* {store.locationType} */}\r\n {/* {store.reviewRequired ?\r\n :\r\n \r\n } */}\r\n {store.storeStatus} \r\n {formatGhge(store.GHGEmissions)} \r\n {formatScore(store.totalScore)} \r\n {/* \r\n \r\n {storeStatusItems.map(item => \r\n {item} \r\n )\r\n }\r\n \r\n */}\r\n \r\n {renderStoreRowActions(store)}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
\r\n
\r\n \r\n );\r\n}","import { Store } from \"./components/AdminStoresPage\"\r\n\r\nexport const UserRole = {\r\n\tAdmin: \"ADMIN\",\r\n\tViewer: \"VIEWER\",\r\n\tDesigner: \"DESIGNER\",\r\n\tReviewer: \"REVIEWER\",\r\n}\r\n\r\n/** To centralise logic for which sections of the app and which actions a user has access to */\r\nexport class AccessControl {\r\n\r\n\t// ----------------------------- Role based permissions ---------------------------------------------\r\n\r\n\tstatic isAdmin (user) {\r\n\t\treturn user.role === UserRole.Admin\r\n\t}\r\n\r\n\tstatic isDesigner (user) {\r\n\t\treturn user.role === UserRole.Designer\r\n\t}\r\n\r\n\tstatic isDesignerOrAdmin (user) {\r\n\t\treturn user.role === UserRole.Designer || user.role === UserRole.Admin\r\n\t}\r\n\r\n\tstatic isDesignerOrReviewerOrAdmin (user) {\r\n\t\treturn user.role === UserRole.Designer || user.role === UserRole.Reviewer || user.role === UserRole.Admin\r\n\t}\r\n\r\n\tstatic isReviewer (user) {\r\n\t\treturn user.role === UserRole.Reviewer\r\n\t}\r\n\r\n\tstatic isReviewerOrAdmin (user) {\r\n\t\treturn user.role === UserRole.Reviewer || user.role === UserRole.Admin\r\n\t}\r\n\r\n\t// ----------------------------- UI ---------------------------------------------\r\n\r\n\tstatic getButtonTextAllStoresPage (user, store) {\r\n\t\tif (AccessControl.storeCanReview(user) && store.storeStatus === Store.Status.AWAITING_REVIEW) {\r\n\t\t\treturn \"Review\"\r\n\t\t} else {\r\n\t\t\treturn \"View\"\r\n\t\t}\r\n\t}\r\n\r\n\t// ----------------------------- Action based permissions ---------------------------------------------\r\n\r\n\r\n\tstatic storeCanView (user) {\r\n\t\treturn true // everyone with an account can view the store\r\n\t}\r\n\r\n\tstatic storeCanCreate (user) {\r\n\t\treturn AccessControl.isDesigner(user)\r\n\t}\r\n\r\n\tstatic storeCanEdit (user, store) {\r\n\t\tconst isOwner =\tstore.creatorId === user.id\r\n\t\treturn AccessControl.isAdmin(user) || AccessControl.isDesigner(user) && isOwner\r\n\t}\r\n\r\n\tstatic storeCanAddMaterial (user, store) {\r\n\t\treturn AccessControl.storeCanEdit(user, store) && store.scorecardType !== Store.ScorecardType.DECOMMISSIONED\r\n\t}\r\n\r\n\tstatic storeCanSubmitForReview (user) {\r\n\t\treturn AccessControl.isDesignerOrAdmin(user)\r\n\t}\r\n\r\n\tstatic storeCanViewReviewInfo (user) {\r\n\t\treturn AccessControl.isDesignerOrReviewerOrAdmin(user)\r\n\t}\r\n\r\n\tstatic storeCanReview (user) {\r\n\t\treturn AccessControl.isReviewerOrAdmin(user)\r\n\t}\r\n\r\n\tstatic storeCanMarkAsDraft (user) {\r\n\t\treturn AccessControl.isDesignerOrAdmin(user)\r\n\t}\r\n\r\n\tstatic storeCanMarkAsReviewed (user) {\r\n\t\treturn AccessControl.isReviewerOrAdmin(user)\r\n\t}\r\n\r\n\tstatic storeCanProgressToAsBuilt (user, store) {\r\n\t\t// Only the concept designer can progress store\r\n\t\tconst isCurrentDesigner = Store.getDesignerId(Store.ScorecardType.CONCEPT, store) === user.id\r\n\t\treturn AccessControl.isAdmin(user) || (AccessControl.isDesigner(user) && isCurrentDesigner)\r\n\t}\r\n\r\n\tstatic storeCanProgressToDecommission (user, store) {\r\n\t\t// Only the as-built designer can progress store\r\n\t\tconst isCurrentDesigner = Store.getDesignerId(Store.ScorecardType.AS_BUILT, store) === user.id\r\n\t\treturn AccessControl.isAdmin(user) || (AccessControl.isDesigner(user) && isCurrentDesigner)\r\n\t}\r\n\r\n\tstatic storeCanChangeDesigner (user) {\r\n\t\treturn AccessControl.isDesigner(user)\r\n\t}\r\n\r\n\tstatic storeCanDownloadData (user) {\r\n\t\treturn AccessControl.isDesignerOrAdmin(user)\r\n\t}\r\n\t\r\n\t// static materialInstanceCanView (user) {\r\n\t// \treturn AccessControl.isDesignerOrAdmin(user)\r\n\t// }\r\n\r\n\tstatic materialInstanceCanComment (user) {\r\n\t\treturn AccessControl.isReviewer(user)\r\n\t}\r\n\r\n\tstatic materialInstanceCanViewComments (user) {\r\n\t\treturn AccessControl.isDesignerOrReviewerOrAdmin(user)\r\n\t}\r\n}","import React, { useEffect, useState } from \"react\"\r\nimport { useSelector } from 'react-redux'\r\nimport axios from 'axios'\r\nimport Header from \"./Header\"\r\nimport Container from 'react-bootstrap/Container'\r\nimport Row from 'react-bootstrap/Row'\r\nimport Col from 'react-bootstrap/Col'\r\nimport Table from 'react-bootstrap/Table'\r\nimport Button from 'react-bootstrap/Button'\r\nimport Dropdown from 'react-bootstrap/Dropdown'\r\nimport Form from 'react-bootstrap/Form'\r\nimport { config } from \"../config\"\r\nimport { UserRole } from \"../AccessControl\"\r\nimport { Modal } from \"react-bootstrap\"\r\n\r\nconst backendUrl = config.backendUrl\r\n\r\nexport const DbObjStatus =\r\n{\r\n\tDB: 'DB',\r\n\tCHANGED: 'CHANGED',\r\n\tSAVING: 'SAVING',\r\n\tSAVED: 'SAVED'\r\n}\r\n\r\nexport const DbObj =\r\n{\r\n\t/** Add the local state fields to the DB object */\r\n\tofDb: dbObj => {\r\n\t\tlet localObj = { ...dbObj }\r\n\t\tlocalObj._objStatus = DbObjStatus.DB\r\n\t\treturn localObj\r\n\t},\r\n\r\n\t/** Cleanup the local localObj object to store in the DB */\r\n\ttoDb: localObj => {\r\n\t\tlet dbObj = { ...localObj }\r\n\t\tdelete dbObj._objStatus\r\n\t\treturn dbObj\r\n\t}\r\n}\r\n\r\n/// try to authenticate login details\r\nexport const authUser = (email, password, onSuccess, onError) => {\r\n\taxios.post(`${backendUrl}/users/auth`, { email, password })\r\n\t\t.then(function (response) {\r\n\t\t\tconst user = response.data\r\n\t\t\tconsole.log('User login success', user)\r\n\t\t\tonSuccess(user)\r\n\t\t})\r\n\t\t.catch(function (error) {\r\n\t\t\tconsole.log('Error logging in', error)\r\n\r\n\t\t\tif (error && error.response && error.response.data) {\r\n\t\t\t\tonError(error.response.data)\r\n\t\t\t}\r\n\t\t})\r\n}\r\n\r\nconst createUser = (user, onSuccess) => {\r\n\taxios.post(`${backendUrl}/user`, DbObj.toDb(user))\r\n\t\t.then(function (response) {\r\n\t\t\tconsole.log('User created', response)\r\n\t\t\tonSuccess(response.data)\r\n\t\t})\r\n\t\t.catch(function (error) {\r\n\t\t\tconsole.log('Error creating User', error);\r\n\t\t})\r\n}\r\n\r\nconst deleteUser = (user, onSuccess) => {\r\n\taxios.delete(`${backendUrl}/users/${user.id}`)\r\n\t\t.then(function (response) {\r\n\t\t\t// var data = response.data\r\n\t\t\t// console.log(\"store delete response\", data)\r\n\t\t\tconsole.log(\"User deleted (\" + user.email + \")\")\r\n\t\t\tonSuccess(user)\r\n\t\t})\r\n\t\t.catch(() => {\r\n\t\t\tconsole.log(\"Error deleting user (\" + user.email + \"). Please try again.\")\r\n\t\t})\r\n}\r\n\r\nexport const loadUsers = (gotUsers) => {\r\n\taxios.get(`${config.backendUrl}/users`)\r\n\t\t.then(response => response.data)\r\n\t\t.then(users => {\r\n\t\t\t// console.log(users)\r\n\t\t\tgotUsers(users)\r\n\t\t})\r\n}\r\n\r\nexport const AdminUsersPage = (props) => {\r\n\r\n\tconst backendUrl = useSelector((state) => state.backendUrl)\r\n\tconst [users, setUsers] = useState([])\r\n\tconst [selectedUser, setSelectedUser] = useState([])\r\n\tconst [editUserModalIsVisible, setEditUserModalIsVisible] = useState(false)\r\n\r\n\tconst loadUsersAndSetState = () => {\r\n\t\tloadUsers(_users => {\r\n\t\t\tsetUsers(_users.map(DbObj.ofDb))\r\n\t\t\t// setSelectedUser(DbObj.ofDb(_users[0]))\r\n\t\t})\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconsole.log('AdminUsersPage.useEffect')\r\n\t\tloadUsersAndSetState()\r\n\t}, [backendUrl])\r\n\r\n\t/** Update a user in the local state */\r\n\tconst setUser = (user) => {\r\n\t\tconst updatedUsers = users.map(u => {\r\n\t\t\tif (u.id === user.id) {\r\n\t\t\t\treturn { ...user }\r\n\t\t\t} else {\r\n\t\t\t\treturn u\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tconsole.log('updatedUsers', updatedUsers)\r\n\t\tsetUsers(updatedUsers)\r\n\t}\r\n\r\n\tconst saveUser = (newOrUpdatedUser, onSuccess) => {\r\n\t\tif (newOrUpdatedUser.id) {\r\n\t\t\tupdateUser(newOrUpdatedUser, onSuccess)\r\n\t\t} else {\r\n\t\t\tcreateUser(newOrUpdatedUser, (newUser) => {\r\n\t\t\t\tloadUsersAndSetState()\r\n\t\t\t\tonSuccess && onSuccess(newUser)\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tconst updateUser = (user, onSuccess) => {\r\n\t\tconsole.log('updateUser', user)\r\n\r\n\t\treturn axios.put(`${backendUrl}/users/${user.id}`, DbObj.toDb(user))\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconst updatedUser = response.data\r\n\t\t\t\tconsole.log('user updated', updatedUser)\r\n\r\n\t\t\t\t// update the state for one user\r\n\t\t\t\tsetUser(DbObj.ofDb(updatedUser))\r\n\t\t\t\tonSuccess && onSuccess(updatedUser)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log('Error updating user', error);\r\n\t\t\t})\r\n\t}\r\n\r\n\tconst handleActionClick = (user, index, actionName) => {\r\n\t\t// console.log('handleActionClick', actionName, user)\r\n\r\n\t\tif (actionName === \"EDIT\") {\r\n\t\t\t// user._objStatus = DbObjStatus.CHANGED // No need to set since we are using modal now\r\n\t\t\tsetUser(user)\r\n\t\t\tsetSelectedUser(user)\r\n\t\t\tsetEditUserModalIsVisible(true)\r\n\t\t} else if (actionName === \"SAVE\") {\r\n\t\t\tsaveUser(user)\r\n\t\t} else if (actionName === \"CANCEL\") {\r\n\t\t\tuser._objStatus = DbObjStatus.DB\r\n\t\t\tsetUser(user)\r\n\t\t\tloadUsersAndSetState()\r\n\t\t} else if (actionName === \"DELETE\") {\r\n\t\t\tdeleteUser(user, (deletedUser) => {\r\n\t\t\t\tloadUsersAndSetState()\r\n\t\t\t})\r\n\t\t} else if (actionName === \"CLEAR\") {\r\n\t\t\tconst updatedUsers = [...users]\r\n\t\t\tupdatedUsers.splice(index, 1)\r\n\t\t\tsetUsers(updatedUsers)\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tconst renderAction = (user, index, userValidation) => {\r\n\t\tif (user._objStatus === DbObjStatus.DB) {\r\n\t\t\t// return handleActionClick(user, \"EDIT\")}>Edit \r\n\t\t\treturn undefined\r\n\t\t} else if (user._objStatus === DbObjStatus.CHANGED) {\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t handleActionClick(user, index, index, \"SAVE\")}>Save \r\n\t\t\t\t\t handleActionClick(user, index, \"CANCEL\")}>Cancel \r\n\t\t\t\t
\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n\r\n\tconst onChange = (user, e) => {\r\n\t\tconst fieldName = e.target.name\r\n\t\tconst fieldValue = e.target.value\r\n\t\tconsole.log(fieldName, '=', fieldValue)\r\n\r\n\t\t// if (fieldName === 'role') {\r\n\t\tuser._objStatus = DbObjStatus.CHANGED\r\n\t\tuser[fieldName] = fieldValue\r\n\t\t// }\r\n\r\n\t\tsetUser(user)\r\n\t}\r\n\r\n\tconst handleNewUserClicked = () => {\r\n\t\tconst newUser = {\r\n\t\t\t_objStatus: DbObjStatus.CHANGED,\r\n\t\t\tdisplayName: \"\",\r\n\t\t\temail: \"\",\r\n\t\t\trole: UserRole.Viewer\r\n\t\t}\r\n\r\n\t\t// const updatedUsers = [\r\n\t\t// \t...users,\r\n\t\t// \tnewUser\r\n\t\t// ]\r\n\t\t// setUsers(updatedUsers)\r\n\r\n\t\tsetSelectedUser(newUser)\r\n\t\tsetEditUserModalIsVisible(true)\r\n\t}\r\n\r\n\t/** Check if the user fields are valid for various conditions */\r\n\tconst validateUser = (user) => {\r\n\t\tconst allEmails =\r\n\t\t\tusers\r\n\t\t\t\t.filter(u => u.id !== user.id) // exclude current user\r\n\t\t\t\t.filter(u => !!u.id) // exclude new draft users\r\n\t\t\t\t.map(u => u.email.toLowerCase())\r\n\r\n\t\tif (allEmails.includes(user.email.toLowerCase())) {\r\n\t\t\treturn {\r\n\t\t\t\tisValid: false,\r\n\t\t\t\terror: `A user with email address ${user.email} already exists.`\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\tisValid: true\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst renderTableRow = (user, index) => {\r\n\t\tvar rows = [] // we may return multiple rows\r\n\r\n\t\tconst userValidation = validateUser(user)\r\n\r\n\t\trows.push(\r\n\t\t\t\r\n\t\t\t\t{index + 1} \r\n\t\t\t\t\r\n\t\t\t\t\t{user._objStatus === DbObjStatus.CHANGED ? (\r\n\t\t\t\t\t\t onChange(user, e)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) : {user.displayName} }\r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t{/* Don't allow changing admin email */}\r\n\t\t\t\t\t{user._objStatus === DbObjStatus.CHANGED && user.role !== 'ADMIN' ? (\r\n\t\t\t\t\t\t onChange(user, e)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) : {user.email} }\r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t{/* Don't allow changing admin role */}\r\n\t\t\t\t\t{user._objStatus === DbObjStatus.CHANGED && user.role !== 'ADMIN' ? (\r\n\t\t\t\t\t\t onChange(user, e)}>\r\n\t\t\t\t\t\t\t--- \r\n\t\t\t\t\t\t\tViewer \r\n\t\t\t\t\t\t\tDesigner \r\n\t\t\t\t\t\t\tReviewer \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t) : {user.role} }\r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t handleActionClick(user, index, \"EDIT\")}>Edit \r\n\t\t\t\t\t\t\t\t\t{/* {config.isDebugMode ? handleActionClick(user, index, \"DELETE\")}>Delete : undefined} */}\r\n\t\t\t\t\t\t\t\t\t{!user.id ? handleActionClick(user, index, \"CLEAR\")}>Clear : undefined}\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t{renderAction(user, index, userValidation)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t \r\n\t\t\t \r\n\t\t)\r\n\r\n\t\tif (userValidation.isValid === false) {\r\n\t\t\trows.push(\r\n\t\t\t\t\r\n\t\t\t\t\t{userValidation.error} \r\n\t\t\t\t \r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\treturn rows\r\n\t}\r\n\r\n\tconst ResetPasswordModal = ({ user, show, handleClose, handleSave }) => {\r\n\t\tconst [ userBeingEdited, setUserBeingEdited ] = useState(user)\r\n\t\tconst [ showPasswordField, setShowPasswordField ] = useState(!user.id)\r\n\r\n\t\tconst onChange = (e, fieldName) => {\r\n\t\t\t// const fieldName = e.target.name\r\n\t\t\tconst fieldValue = e.target.value\r\n\t\t\tconsole.log(\"onChange\", fieldName, fieldValue)\r\n\r\n\t\t\tsetUserBeingEdited(user1 => {\r\n\t\t\t\tconst updatedUser = { ...user1 }\r\n\t\t\t\tupdatedUser[fieldName] = fieldValue\r\n\t\t\t\treturn updatedUser\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tconst onSaveClick = () => {\r\n\t\t\tconst userToSave = { ...userBeingEdited }\r\n\r\n\t\t\tif (showPasswordField === false) {\r\n\t\t\t\tdelete userToSave.password\r\n\t\t\t}\r\n\r\n\t\t\thandleSave(userToSave)\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{user.id ? 'Edit User' : 'Create New User'} \r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tFull Name: \r\n\t\t\t\t\t\t\t onChange(e, \"displayName\")}\r\n\t\t\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tEmail Address: \r\n\t\t\t\t\t\t\t onChange(e, \"email\")}\r\n\t\t\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tEdit Password: \r\n\t\t\t\t\t\t\t setShowPasswordField(e.target.checked === true)}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t{showPasswordField === true ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPassword: \r\n\t\t\t\t\t\t\t\t onChange(e, \"password\")}\r\n\t\t\t\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t) : undefined }\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tClose\r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tSave\r\n\t\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t \r\n\t\t)\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\tUsers \r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t# \r\n\t\t\t\t\t\t\tName \r\n\t\t\t\t\t\t\tEmail \r\n\t\t\t\t\t\t\tRole \r\n\t\t\t\t\t\t\tActions \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{users.flatMap(renderTableRow)}\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\r\n\t\t\t\t handleNewUserClicked()}>Add New User \r\n\t\t\t
\r\n\t\t\t setEditUserModalIsVisible(false)}\r\n\t\t\t\thandleSave={updatedUser => saveUser(updatedUser, () => setEditUserModalIsVisible(false))}\r\n\t\t\t\t/>\r\n\t\t \r\n\t)\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch } from 'react-redux';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Form from 'react-bootstrap/Form';\r\nimport Button from 'react-bootstrap/Button';\r\nimport { authUser } from './AdminUsersPage'\r\n\r\nimport { setUser, setUserId, setUserLoggedIn } from '../store/actions';\r\n\r\n//https://www.freecodecamp.org/news/how-to-persist-a-logged-in-user-in-react/\r\n\r\nexport const clearLocalStorage = () => {\r\n\tlocalStorage.removeItem(\"user\")\r\n\tlocalStorage.removeItem(\"userId\")\r\n\tlocalStorage.removeItem(\"userPersistent\")\r\n\tlocalStorage.removeItem(\"userLoggedIn\")\r\n}\r\n\r\nexport const clearSessionStorage = () => {\r\n\tsessionStorage.removeItem(\"user\")\r\n\tsessionStorage.removeItem(\"userId\")\r\n\tsessionStorage.removeItem(\"userPersistent\")\r\n\tsessionStorage.removeItem(\"userLoggedIn\")\r\n}\r\n\r\nconst LoginForm = () => {\r\n\r\n\tconst dispatch = useDispatch();\r\n\r\n\tconst [persistent, setPersistent] = useState(\"\");\r\n\tconst [errorMsg, setErrorMsg] = useState(\" \")\r\n\tconst [email, setEmail] = useState(\"\");\r\n\tconst [password, setPassword] = useState(\"\");\r\n\r\n\tuseEffect(() => {\r\n\t\tconst loggedInLocal = localStorage.getItem(\"userId\"); // persisted across sessions\r\n\t\tconst loggedInSession = sessionStorage.getItem(\"userId\"); // only for current session\r\n\r\n\t\t// if (config.isDebugMode) {\r\n\t\t// \tconsole.log(\"Debug mode, so clearing local and session storage!\")\r\n\t\t// \tclearLocalStorage()\r\n\t\t// \tclearSessionStorage()\r\n\t\t\t\r\n\t\t// \t//warning deathloop below\r\n\t\t// \t//window.location.reload(false);\r\n\t\t// }\r\n\r\n\t\tif (loggedInLocal) {\r\n\t\t\t// check if the session was persisted, if so, copy to session storage\r\n\r\n\t\t\t// globally save the user data so the rest of the app knows it is logged in\r\n\t\t\tdispatch(setUser(JSON.parse(localStorage.getItem(\"user\"))))\r\n\t\t\tdispatch(setUserId(localStorage.getItem(\"userId\")));\r\n\t\t\tdispatch(setUserLoggedIn(localStorage.getItem(\"userLoggedIn\")));\r\n\t\t}\r\n\t\telse if (loggedInSession) {\r\n\t\t\tdispatch(setUser(JSON.parse(sessionStorage.getItem(\"user\"))))\r\n\t\t\tdispatch(setUserId(sessionStorage.getItem(\"userId\")));\r\n\t\t\tdispatch(setUserLoggedIn(sessionStorage.getItem(\"userLoggedIn\")));\r\n\r\n\t\t\t// console.log(\"foundUserSession\");\r\n\t\t\t// console.log(foundUser);\r\n\t\t}\r\n\t}, [ dispatch ]);\r\n\r\n\tconst handleLogin = async e => {\r\n\t\tsetErrorMsg(\"Logging in...\")\r\n\t\te.preventDefault()\r\n\r\n\t\tconst onSuccess = (user) => {\r\n\t\t\tsetPersistent(persistent)\r\n\r\n\t\t\tdispatch(setUser(user))\r\n\t\t\tdispatch(setUserId(user.id))\r\n\t\t\tdispatch(setUserLoggedIn(\"true\"))\r\n\r\n\t\t\t//set persistent login\r\n\t\t\tif (persistent) {\r\n\t\t\t\tlocalStorage.setItem(\"user\", JSON.stringify(user))\r\n\t\t\t\tlocalStorage.setItem(\"userId\", user.id)\r\n\t\t\t\tlocalStorage.setItem(\"userPersistent\", persistent)\r\n\t\t\t\tlocalStorage.setItem(\"userLoggedIn\", \"true\")\r\n\t\t\t} else {\r\n\t\t\t\tclearLocalStorage()\r\n\t\t\t}\r\n\r\n\t\t\t//set session login\r\n\t\t\tsessionStorage.setItem(\"user\", JSON.stringify(user))\r\n\t\t\tsessionStorage.setItem(\"userId\", user.id)\r\n\t\t\tsessionStorage.setItem(\"userPersistent\", persistent)\r\n\t\t\tsessionStorage.setItem(\"userLoggedIn\", \"true\")\r\n\t\t}\r\n\r\n\t\tconst onError = (data) => {\r\n\t\t\tconsole.log('data', data)\r\n\t\t\tsetErrorMsg(data.message)\r\n\t\t}\r\n\r\n\t\tauthUser(email, password, onSuccess, onError)\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t setEmail(target.value)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\tEmail \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t setPassword(target.value)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\tPassword \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tLogin\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t setPersistent(target.checked)}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t{errorMsg.indexOf('incorrect') !== -1 ? (\r\n\t\t\t\t\t\t\t\t{errorMsg}
\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t{errorMsg}
\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\r\n\t\t\t
\r\n\t\t \r\n\t)\r\n};\r\n\r\nexport default LoginForm;","import React from \"react\";\r\nimport { useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\n//import Nav from 'react-bootstrap/Navbar';\r\n//import Navbar from 'react-bootstrap/Navbar';\r\nimport { Navbar, Nav } from 'react-bootstrap';\r\nimport Offcanvas from 'react-bootstrap/Offcanvas'\r\nimport Container from 'react-bootstrap/Container';\r\nimport HelpModal from \"./HelpModal\";\r\nimport logo from './../style/images/aesop-logo.svg';\r\nimport { config } from \"../config\";\r\nimport { clearLocalStorage, clearSessionStorage } from \"./Login\";\r\nimport { AccessControl } from \"../AccessControl\";\r\n\r\nfunction Header(props) {\r\n\tconst user = useSelector((state) => state.user);\r\n\tconst userId = useSelector((state) => state.userId);\r\n\tconst [modalShow, setModalShow] = React.useState(false);\r\n\tconst history = useHistory();\r\n\r\n\t// We have to do this because the router is ... weird\r\n\tconst onClickLink = (path) => history.push(path)\r\n\r\n\tfunction handleLogout() {\r\n\t\tconsole.log(\"logging out\");\r\n\t\tclearLocalStorage()\r\n\t\tclearSessionStorage()\r\n\t\thistory.push('/');\r\n\t\twindow.location.reload(false);\r\n\t}\r\n\r\n\tvar adminPageLinks = undefined\r\n\r\n\tif (AccessControl.isAdmin(user)) {\r\n\r\n\t\tadminPageLinks = (\r\n\t\t\t<>\r\n\t\t\t\tAdmin \r\n\t\t\t\t onClickLink(\"/admin/users\")}>Users \r\n\t\t\t\t onClickLink(\"/admin/stores\")}>Stores \r\n\t\t\t\t onClickLink(\"/admin/materials\")}>Materials \r\n\t\t\t\t onClickLink(\"/admin/calcs\")}>Calculations \r\n\t\t\t\t \r\n\t\t\t>\r\n\t\t)\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t onClickLink(\"/\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t onClickLink(\"/\")}>Artemis | Sustainability Scorecard{config.isDebugMode && {user.role} } \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t onClickLink(\"/\")}>Sustainability Scorecard \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tMenu \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t onClickLink(\"/\")}>Home \r\n\t\t\t\t\t\t\t\t\t onClickLink(\"/overview\")}>Your Overview \r\n\t\t\t\t\t\t\t\t\t onClickLink(\"/stores\")}>All Projects \r\n\t\t\t\t\t\t\t\t\t setModalShow(true)}>Help \r\n\r\n\t\t\t\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t\t\t\t{adminPageLinks}\r\n\r\n\t\t\t\t\t\t\t\t\t{(userId) ?\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tUser: {user.displayName} \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\tLogout \r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t: \"\"\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t{/* \t\tDesigner \r\n\t\t\t\t\t\t\t\t\t/designer \r\n\t\t\t\t\t\t\t\t\t/designer/create \r\n\t\t\t\t\t\t\t\t\t/designer/projects \r\n\t\t\t\t\t\t\t\t\t/designer/project/material \r\n\t\t\t\t\t\t\t\t\t/designer/project/summary \r\n\t\t\t\t\t\t\t\t\tReviewer \r\n\t\t\t\t\t\t\t\t\t/reviewer \r\n\t\t\t\t\t\t\t\t\t/reviewer/project \r\n\t\t\t\t\t\t\t\t\t/reviewer/project/summary \r\n\t\t\t\t\t\t\t\t\tLeadership \r\n\t\t\t\t\t\t\t\t\tleadership \r\n\t\t\t\t\t\t\t\t\tContractor \r\n\t\t\t\t\t\t\t\t\tcontractor \r\n\t\t\t\t\t\t\t\t\tTests \r\n\t\t\t\t\t\t\t\t\tTableCertifications \r\n\t\t\t\t\t\t\t\t\tTableGetAllStores \r\n\t\t\t\t\t\t\t\t\tTableGetMaterialsByStore \r\n\t\t\t\t\t\t\t\t\tLogin \r\n\t\t\t\t\t\t\t\t\tprogressBar */}\r\n\r\n\t\t\t\t\t\t\t\t\t{config.version}
\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tconfig.isDebugMode ? (\r\n\t\t\t\t\t\t\t\t\t\t\tUser Role: {user.role}
\r\n\t\t\t\t\t\t\t\t\t\t) : undefined\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t setModalShow(false)}\r\n\t\t\t\t/>\r\n\t\t\t \r\n\t\t>\r\n\t);\r\n}\r\n\r\nexport default Header;","import React from 'react';\r\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, Title } from 'chart.js';\r\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\r\nimport { Doughnut } from 'react-chartjs-2';\r\nimport { scaleColours, scaleValues } from './GlobalVars'\r\n\r\nChartJS.register(ArcElement, Tooltip, Legend, Title, ChartDataLabels);\r\n\r\nconst ChartFilledSingleCircle = ({ percentage, label, delay }) => {\r\n\tconsole.log(\"percentage check\")\r\n\tconsole.log(percentage)\r\n\tif (typeof percentage === \"string\") {\r\n\t\t// console.log(\"chart getting string\")\r\n\t\tpercentage = 1;\r\n\t}\r\n\telse {\r\n\t\tpercentage = parseInt(percentage)\r\n\t}\r\n\r\n\tlet colour = \"#dddddd\";\r\n\r\n\tif (percentage <= scaleValues.low) {\r\n\t\tconsole.log(\"percentage is low\")\r\n\t\tcolour = scaleColours.low;\r\n\t\tconsole.log(colour)\r\n\t}\r\n\telse if (percentage > scaleValues.low && percentage < scaleValues.medium) {\r\n\t\tcolour = scaleColours.medium;\r\n\t\tconsole.log(colour)\r\n\t}\r\n\telse if (percentage >= scaleValues.medium) {\r\n\t\tcolour = scaleColours.high;\r\n\t\tconsole.log(colour)\r\n\t}\r\n\telse {\r\n\r\n\t}\r\n\r\n\tconst data = {\r\n\t\tlabels: [\r\n\t\t\tlabel,\r\n\t\t\tlabel\r\n\t\t],\r\n\t\tdatasets: [\r\n\t\t\t{\r\n\t\t\t\tlabel: '%',\r\n\t\t\t\tdata: [percentage],\r\n\t\t\t\tbackgroundColor: [\r\n\t\t\t\t\tcolour,\r\n\t\t\t\t\t\"#FFFFFF\"\r\n\t\t\t\t],\r\n\r\n\t\t\t\tborderWidth: 0,\r\n\t\t\t},\r\n\t\t],\r\n\t};\r\n\r\n\tconst options = {\r\n\t\theight: 150,\r\n\t\twidth: 150,\r\n\t\tcircumference: 360,\r\n\t\tresponsive: false,\r\n\t\tmaintainAspectRatio: true,\r\n\t\tcutout: 0,\r\n\t\tanimation: {\r\n\t\t\teasing: \"easeInCubic\",\r\n\t\t\tduration: 3000,\r\n\t\t\tdelay: delay\r\n\t\t},\r\n\t\thover: {\r\n\t\t\tmode: null\r\n\t\t},\r\n\t\tplugins: {\r\n\t\t\ttitle: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\ttext: label,\r\n\t\t\t\tposition: 'bottom'\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t},\r\n\t\t\ttooltip: {\r\n\t\t\t\tenabled: false\r\n\t\t\t},\r\n\t\t\tdatalabels: false\r\n\r\n\t\t},\r\n\t};\r\n\r\n\treturn (\r\n\t\t \r\n\t);\r\n};\r\n\r\nexport default ChartFilledSingleCircle;","import React, { useEffect, useState } from \"react\";\r\nimport { useSelector } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport ChartFilledSingleCircle from \"./ChartFilledSingleCircle\";\r\nimport ChartFilledSingleCircleGHG from \"./ChartFilledSingleCircleGHG\";\r\n\r\nimport './../index.css';\r\nimport { config } from \"../config\";\r\n\r\nconst ChartsGlobalStores = ({ parentPage }) => {\r\n\tconst [globalHighest, setGlobalHighest] = useState({});\r\n\t// const [globalLowest, setGlobalLowest] = useState({});\r\n\t// const [globalLowestBuffered, setGlobalLowestBuffered] = useState({});\r\n\tconst [globalAverage, setGlobalAverage] = useState(0);\r\n\tconst [globalAverageGHGEmissions, setGlobalAverageGHGEmissions] = useState(0);\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\t//get global scores\r\n\t\taxios.get(`${config.backendUrl}/globalStoreScores`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\t//not used, state broken\r\n\t\t\t\t//setGlobalStoreScores(response.data);\r\n\r\n\t\t\t\t//prep av value\r\n\t\t\t\t//old rounding to 2 dec. places\r\n\t\t\t\t//setGlobalAverage(Math.round((response.data.globalAverage) * 100) / 100);\r\n\t\t\t\t//setGlobalAverageGHGEmissions(Math.round((response.data.globalAverageGHGEmissions) * 100) / 100);\r\n\t\t\t\tsetGlobalAverage(Math.round(response.data.globalAverage));\r\n\t\t\t\tsetGlobalAverageGHGEmissions(Math.round(response.data.globalAverageGHGEmissions));\r\n\r\n\t\t\t\t//prep highest val\r\n\t\t\t\tvar highestVal = response.data.globalHighest;\r\n\t\t\t\t//old rounding to 2 dec. places\r\n\t\t\t\t//highestVal.totalScore = Math.round((highestVal.totalScore) * 100) / 100;\r\n\t\t\t\t//new rounding to whole num\r\n\t\t\t\thighestVal.totalScore = Math.round(highestVal.totalScore);\r\n\t\t\t\tsetGlobalHighest(highestVal);\r\n\r\n\t\t\t\t//prep lowest val\r\n\t\t\t\tvar lowestVal = response.data.globalLowest;\r\n\t\t\t\tlowestVal.totalScore = Math.round((response.data.globalLowest.totalScore) * 100) / 100;\r\n\t\t\t\t// setGlobalLowest(lowestVal);\r\n\t\t\t\t// if (lowestVal.totalScore === 0) {\r\n\t\t\t\t// \tsetGlobalLowestBuffered(1)\r\n\t\t\t\t// }\r\n\t\t\t\t// else {\r\n\t\t\t\t// \tsetGlobalLowestBuffered(lowestVal)\r\n\t\t\t\t// }\r\n\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
Global Average \r\n\t\t\t\t\t\t\t\t\tCircularity Score \r\n\t\t\t\t\t\t\t\t{globalAverage} \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
Highest Global \r\n\t\t\t\t\t\t\t\t\tCircularity Score \r\n\t\t\t\t\t\t\t\t{globalHighest.totalScore} \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t{globalHighest.storeName}
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\r\n\t\t\t\t{/* Global average */}\r\n\t\t\t\t \r\n\t\t\t\t\tGHG Emissions Impact Average}\r\n\t\t\t\t\t\tbottomText=\" \"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default ChartsGlobalStores;","import React from \"react\"\r\nimport { useSelector } from 'react-redux'\r\nimport { useHistory } from 'react-router-dom'\r\nimport Container from 'react-bootstrap/Container'\r\nimport Row from 'react-bootstrap/Row'\r\nimport Col from 'react-bootstrap/Col'\r\nimport Button from 'react-bootstrap/Button'\r\nimport Header from \"./Header\";\r\nimport './../index.css';\r\nimport './../style/css/aesop.scss';\r\nimport ChartsGlobalStores from './ChartsGlobalStores';\r\nimport { AccessControl } from \"../AccessControl\"\r\n\r\nconst HomePageContent = () => {\r\n\tconst user = useSelector((state) => state.user)\r\n\r\n\tconst history = useHistory()\r\n\tfunction handleClickOverview() {\r\n\t\thistory.push('/overview')\r\n\t}\r\n\tfunction handleClickProjects() {\r\n\t\thistory.push('/stores')\r\n\t}\r\n\r\n\tfunction handleClickNewProject() {\r\n\t\thistory.push('/stores/new')\r\n\t}\r\n\r\n\tconst btnColWidth = AccessControl.storeCanCreate(user) ? 4 : 6\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\tView your overview \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\tView all projects \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t{(AccessControl.storeCanCreate(user)) ? (\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tCreate new project \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t): undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\tAbout this tool \r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\tThe Sustainability Scorecard (Artemis) aims to provide an insight into Store Design's environmental and social practices by collecting information on the materials used for the design of Aesop spaces.
\r\n\t\t\t\t\t\tThe scorecard produces two sustainability ratings.
\r\n\t\t\t\t\t\tThe circularity score is qualitative and focuses on the following topics:
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tRaw Materials type \r\n\t\t\t\t\t\t\tSourcing distance \r\n\t\t\t\t\t\t\tEnd of life scenario \r\n\t\t\t\t\t\t\tCertifications \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\tThe embodied carbon emission is a quantitative indicator. It allows to track and reduce the greenhouse gases emissions related to the material supply. It considers the following characteristics:
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tType of material \r\n\t\t\t\t\t\t\tTransportation mode and distance \r\n\t\t\t\t\t\t\tQuantity used \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\tThis indicator gives a carbon emission result in kilograms of CO2 per square meter, allowing to compare the sustainability performance between the designs and to align our emission reduction with the company’s targets.
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t \r\n\t\t>\r\n\t)\r\n}\r\n\r\nfunction HomePage(props) {\r\n\t// const dispatch = useDispatch()\r\n\r\n\t// const history = useHistory()\r\n\t// function handleClick(user) {\r\n\t// \tdispatch(setUser(user.name))\r\n\t// \tconsole.log(\"user:\", user)\r\n\t// \tconsole.log(\"user:\", user.role)\r\n\t// \thistory.push('/' + `${user.role}`)\r\n\t// }\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t{/* if there's a user show the message below */}\r\n\t\t\t\t \r\n\t\t\t
\r\n\t\t \r\n\t)\r\n}\r\n\r\nexport default HomePage","import React, { useEffect, useState } from \"react\";\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Table from 'react-bootstrap/Table';\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\nimport { formatScore, formatGhge } from '../HelperFunctions'\r\n\r\nfunction OverviewRegionTable(props) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [ANZStats, setANZstats] = useState({});\r\n\tconst [EuropeStats, setEuropeStats] = useState({});\r\n\tconst [EmeaStats, setEmeaStats] = useState({});\r\n\tconst [AsiaStats, setAsiaStats] = useState({});\r\n\tconst [AmericasStats, setAmericasStats] = useState({});\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\t//get global scores\r\n\t\taxios.get(`${backendUrl}/globalStoreScores`)\r\n\t\t\t.then(function (response) {\r\n\r\n\t\t\t\tsetANZstats(response.data.regionalScores[0])\r\n\t\t\t\tsetEuropeStats(response.data.regionalScores[1])\r\n\t\t\t\tsetEmeaStats(response.data.regionalScores[2])\r\n\t\t\t\tsetAsiaStats(response.data.regionalScores[3])\r\n\t\t\t\tsetAmericasStats(response.data.regionalScores[4])\r\n\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t}, []);\r\n\r\n\tconst region = [\r\n\t\t{\r\n\t\t\tid: 1, name: \"ANZ\", noStores: ANZStats.count,\r\n\t\t\t//averageScore: ANZStats.averageScore\r\n\t\t\taverageScore: parseFloat(Math.round((ANZStats.averageScore) * 100) / 100)\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 2, name: \"Europe\", noStores: EuropeStats.count,\r\n\t\t\t//averageScore: EuropeStats.averageScore\r\n\t\t\taverageScore: parseFloat(Math.round((EuropeStats.averageScore) * 100) / 100)\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 3, name: \"EMEA\", noStores: EmeaStats.count,\r\n\t\t\t//averageScore: EmeaStats.averageScore\r\n\t\t\taverageScore: parseFloat(Math.round((EmeaStats.averageScore) * 100) / 100)\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 4, name: \"Asia\", noStores: AsiaStats.count,\r\n\t\t\t//averageScore: AsiaStats.averageScore\r\n\t\t\taverageScore: parseFloat(Math.round((AsiaStats.averageScore) * 100) / 100)\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 5, name: \"Americas\", noStores: AmericasStats.count,\r\n\t\t\t//averageScore: AmericasStats.averageScore\r\n\t\t\taverageScore: parseFloat(Math.round((AmericasStats.averageScore) * 100) / 100)\r\n\t\t},\r\n\t];\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\tNo. stores \r\n\t\t\t\t\t\t\t\t\tAverage score \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{region.map((m) => (\r\n\t\t\t\t\t\t\t\t\t= 70 ? \"table-success\" : \"\"} ${m.averageScore >= 50 && m.averageScore <= 69 ? \"table-warning\" : \"\"} ${m.averageScore <= 49 ? \"table-danger\" : \"\"}`}>\r\n\t\t\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t\t\t\t{m.noStores} \r\n\t\t\t\t\t\t\t\t\t\t{formatScore(m.averageScore)} \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\r\n\t);\r\n}\r\n\r\nexport default OverviewRegionTable;","import React, { useEffect, useState } from \"react\";\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Table from 'react-bootstrap/Table';\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\nimport { formatScore } from '../HelperFunctions'\r\n\r\nfunction OverviewTopDesignersTable(props) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [topDesigners, setTopDesigners] = useState([]);\r\n\tconst [topStores, setTopStores] = useState([]);\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\t//get global scores\r\n\t\taxios.get(`${backendUrl}/topDesigners/5`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tvar tempDesigners = response.data;\r\n\r\n\t\t\t\twhile (tempDesigners.length < 5) {\r\n\t\t\t\t\ttempDesigners.push({designer : \"-\"})\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetTopDesigners(tempDesigners)\r\n\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t\taxios.get(`${backendUrl}/topStoreScores/5`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tvar tempStores = response.data;\r\n\t\t\t\t\r\n\t\t\t\twhile (tempStores.length < 5) {\r\n\t\t\t\t\ttempStores.push({storeName : \"-\"})\r\n\t\t\t\t};\r\n\t\t\t\tsetTopStores(tempStores)\r\n\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\tTop Designers \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tName \r\n\t\t\t\t\t\t\t\t\t\tDesigner Score \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{topDesigners ? (topDesigners.map((user) => (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{user.designer} \r\n\t\t\t\t\t\t\t\t\t\t\t{formatScore(user.averageScore)} \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t))) : \"\"}\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\tStores \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tName \r\n\t\t\t\t\t\t\t\t\t\tStore Score \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{topStores ? (topStores.map((store) => (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{store.storeName} \r\n\t\t\t\t\t\t\t\t\t\t\t{formatScore(store.totalScore)} \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t))) : \"\"}\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default OverviewTopDesignersTable;","import React, { useEffect, useState } from \"react\";\r\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, Title } from 'chart.js';\r\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\r\nimport { Doughnut } from 'react-chartjs-2';\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\nimport { scaleColoursSeven, scaleColours, scaleValues } from './GlobalVars'\r\n\r\nChartJS.register(ArcElement, Tooltip, Legend, Title, ChartDataLabels);\r\n\r\n\r\nfunction OverviewDonutChart() {\r\n\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [materialCounts, setMaterialCounts] = useState([]);\r\n\tconst [materialCountTotal, setMaterialCountTotal] = useState([]);\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\t//get global scores\r\n\t\taxios.get(`${backendUrl}/materialCounts`)\r\n\t\t\t.then(function (response) {\r\n\r\n\t\t\t\tconsole.log(\"material counts = \")\r\n\t\t\t\tconsole.log(response.data)\r\n\r\n\t\t\t\t// get counters\r\n\t\t\t\tsetMaterialCounts(response.data.endOfLifeCounters)\r\n\r\n\t\t\t\t// get total to calculate percentage for visualizer\r\n\t\t\t\tsetMaterialCountTotal(\r\n\t\t\t\t\tresponse.data.endOfLifeCounters.fr +\r\n\t\t\t\t\tresponse.data.endOfLifeCounters.pr +\r\n\t\t\t\t\tresponse.data.endOfLifeCounters.rp +\r\n\t\t\t\t\tresponse.data.endOfLifeCounters.ftrad +\r\n\t\t\t\t\tresponse.data.endOfLifeCounters.atbrr +\r\n\t\t\t\t\tresponse.data.endOfLifeCounters.tbs +\r\n\t\t\t\t\tresponse.data.endOfLifeCounters.nr\r\n\t\t\t\t)\r\n\t\t\t\tsetMaterialCountTotal(121)\r\n\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t\tconsole.log(materialCountTotal)\r\n\t\tconsole.log(\"materialCounts\")\r\n\t\tconsole.log(materialCounts)\r\n\t}, []);\r\n\r\n\r\n\tconst data = {\r\n\t\tlabels: [\r\n\t\t\t'Fully recyclable',\r\n\t\t\t'Part recyclable',\r\n\t\t\t'Recycling program',\r\n\t\t\t'Finish to remain after decommission',\r\n\t\t\t'Able to be reused/repurposed',\r\n\t\t\t'Takeback Scheme',\r\n\t\t\t'Not recyclable'\r\n\t\t],\r\n\t\tdatasets: [\r\n\t\t\t{\r\n\t\t\t\tlabel: '%',\r\n\t\t\t\tdata: [\r\n\t\t\t\t\tMath.round((materialCounts.fr / materialCountTotal) * 100),\r\n\t\t\t\t\tMath.round((materialCounts.pr / materialCountTotal) * 100),\r\n\t\t\t\t\tMath.round((materialCounts.rp / materialCountTotal) * 100),\r\n\t\t\t\t\tMath.round((materialCounts.ftrad / materialCountTotal) * 100),\r\n\t\t\t\t\tMath.round((materialCounts.atbrr / materialCountTotal) * 100),\r\n\t\t\t\t\tMath.round((materialCounts.tbs / materialCountTotal) * 100),\r\n\t\t\t\t\tMath.round((materialCounts.nr / materialCountTotal) * 100),\r\n\t\t\t\t],\r\n\r\n\t\t\t\tbackgroundColor: [\r\n\t\t\t\t\tscaleColoursSeven[0],\r\n\t\t\t\t\tscaleColoursSeven[1],\r\n\t\t\t\t\tscaleColoursSeven[2],\r\n\t\t\t\t\tscaleColoursSeven[3],\r\n\t\t\t\t\tscaleColoursSeven[4],\r\n\t\t\t\t\tscaleColoursSeven[5],\r\n\t\t\t\t\tscaleColoursSeven[6],\r\n\t\t\t\t],\r\n\t\t\t\tborderColor: [\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t\t'#FFFFFF',\r\n\t\t\t\t],\r\n\t\t\t\tborderWidth: 2,\r\n\t\t\t},\r\n\t\t],\r\n\t};\r\n\r\n\tconst options = {\r\n\t\tresponsive: true,\r\n\t\tplugins: {\r\n\t\t\thtmlLegend: {\r\n\t\t\t\t// ID of the container to put the legend in\r\n\t\t\t\tcontainerID: 'chartLegend',\r\n\t\t\t},\r\n\t\t\tlegend: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\tposition: 'bottom',\r\n\t\t\t},\r\n\t\t\tdatalabels: {\r\n\t\t\t\tlabels: {\r\n\t\t\t\t\tvalue: {\r\n\t\t\t\t\t\tcolor: 'black'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tformatter: (value) => {\r\n\t\t\t\t\tif (value > 0) {\r\n\t\t\t\t\t\treturn value + '%';\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\treturn null\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t},\r\n\t};\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t
\r\n\t\t>\r\n\t);\r\n}\r\n\r\nexport default OverviewDonutChart;","import React, { useEffect, useState } from \"react\";\r\nimport { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Tooltip, Legend, Title } from 'chart.js';\r\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\r\nimport { Bar } from 'react-chartjs-2';\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\nimport { scaleColoursThree, scaleColours, scaleValues } from './GlobalVars'\r\n\r\nChartJS.register(CategoryScale, LinearScale, BarElement, Tooltip, Legend, Title, ChartDataLabels);\r\n\r\nfunction OverviewBarChart() {\r\n\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [sourcingCounts, setSourcingCounts] = useState({});\r\n\tconst [sourcingCountsTotal, setSourcingCountsTotal] = useState(0);\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\t//get global scores\r\n\t\taxios.get(`${backendUrl}/materialCounts`)\r\n\t\t\t.then(function (response) {\r\n\r\n\t\t\t\t// get counters\r\n\t\t\t\tsetSourcingCounts(response.data.manufacturerSourcingCounters)\r\n\t\t\t\t// get total to calculate percentage for visualizer\r\n\t\t\t\tsetSourcingCountsTotal(response.data.manufacturerSourcingCounters.globally +\r\n\t\t\t\t\tresponse.data.manufacturerSourcingCounters.regionally +\r\n\t\t\t\t\tresponse.data.manufacturerSourcingCounters.locally)\r\n\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t}, []);\r\n\r\n\r\n\tconst labels = ['%'];\r\n\tconst data = {\r\n\t\tlabels,\r\n\t\tdatasets: [\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Globally\",\r\n\t\t\t\tdata: labels.map(() => Math.round((sourcingCounts.globally / sourcingCountsTotal) * 100)),\r\n\t\t\t\tbackgroundColor: scaleColoursThree[2],\r\n\t\t\t\tstack: 'Stack 0',\r\n\t\t\t\tborderColor: '#FFFFFF',\r\n\t\t\t\tborderWidth: 2,\r\n\t\t\t\tbarPercentage: 1.0,\r\n\t\t\t\tcategoryPercentage: 100,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Regionally\",\r\n\t\t\t\tdata: labels.map(() => Math.round((sourcingCounts.regionally / sourcingCountsTotal) * 100)),\r\n\t\t\t\tbackgroundColor: scaleColoursThree[1],\r\n\t\t\t\tstack: 'Stack 0',\r\n\t\t\t\tborderColor: '#FFFFFF',\r\n\t\t\t\tborderWidth: 2,\r\n\t\t\t\tbarPercentage: 1.0,\r\n\t\t\t\tcategoryPercentage: 100,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: \"Locally\",\r\n\t\t\t\tdata: labels.map(() => Math.round((sourcingCounts.locally / sourcingCountsTotal) * 100)),\r\n\t\t\t\tbackgroundColor: scaleColoursThree[0],\r\n\t\t\t\tstack: 'Stack 0',\r\n\t\t\t\tborderColor: '#FFFFFF',\r\n\t\t\t\tborderWidth: 2,\r\n\t\t\t\tbarPercentage: 1.0,\r\n\t\t\t\tcategoryPercentage: 100,\r\n\t\t\t},\r\n\t\t],\r\n\t};\r\n\r\n\tconst options = {\r\n\t\tresponsive: true,\r\n\t\tmaintainAspectRatio: false,\r\n\t\tlayout: {\r\n padding: 0\r\n },\r\n\t\tscales: {\r\n\t\t\tx: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\t//offset: false,\r\n\t\t\t},\r\n\t\t\ty: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\toffset: false,\r\n\t\t\t},\r\n\t\t\t\r\n\t\t},\r\n\t\tplugins: {\r\n\t\t\tlegend: {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\tposition: 'bottom',\r\n\t\t\t},\r\n\t\t\tdatalabels: {\r\n\t\t\t\tlabels: {\r\n\t\t\t\t\tvalue: {\r\n\t\t\t\t\t\tcolor: 'black'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tformatter: (value) => {\r\n\t\t\t\t\treturn value + '%';\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t},\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t \r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default OverviewBarChart;","import React from \"react\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Stack from 'react-bootstrap/Stack';\r\nimport Dropdown from 'react-bootstrap/Dropdown';\r\nimport DropdownButton from 'react-bootstrap/DropdownButton';\r\n\r\nfunction OverviewFilters(props) {\r\n\r\n const region = [\r\n { id: 1, name: \"Americas\" },\r\n { id: 2, name: \"Asia\" },\r\n { id: 3, name: \"Australia\" },\r\n { id: 4, name: \"Europe\" },\r\n ];\r\n\r\n const storeType = [\r\n { id: 1, name: \"Attached Store\" },\r\n { id: 2, name: \"Detached Store\" },\r\n { id: 3, name: \"Counter\" },\r\n { id: 4, name: \"Pop up\" },\r\n ];\r\n\r\n const size = [\r\n { id: 1, name: \"All\" },\r\n { id: 2, name: \"Small (<20m2)\" },\r\n { id: 3, name: \"Medium (<50m2)\" },\r\n { id: 4, name: \"Large (>50m2)\" },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Region \r\n \r\n {region.map((m) => (\r\n {m.name} \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n Store Type \r\n \r\n {storeType.map((m) => (\r\n {m.name} \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n City \r\n \r\n \r\n \r\n \r\n \r\n \r\n Size \r\n \r\n {size.map((m) => (\r\n {m.name} \r\n ))}\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default OverviewFilters;","import React, { useRef, useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport { Chart as ChartJS, LinearScale, Tooltip, Legend, Title } from 'chart.js';\r\n// import { Bar } from 'react-chartjs-2';\r\nimport { TreemapController, TreemapElement } from \"chartjs-chart-treemap\";\r\nimport { scaleColoursFive, scaleColours, scaleValues } from './GlobalVars'\r\nimport HelpModal from './HelpModal';\r\n\r\nChartJS.register(LinearScale, Tooltip, Legend, Title, TreemapController, TreemapElement);\r\n\r\nfunction Treemap(props) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst canvas = useRef(null);\r\n\tconst [treeData, setTreeData] = useState([]);\r\n\r\n\tuseEffect(() => {\r\n\t\t//get global scores\r\n\t\taxios.get(`${backendUrl}/materialCounts`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\t//console.log(response.data)\r\n\r\n\t\t\t\tvar tempMaterials = response.data.rawMaterialCounters;\r\n\r\n\t\t\t\tvar treeObject = [\r\n\t\t\t\t\t{ label: \"Retained\", value: tempMaterials.retm, colour: scaleColoursFive[0] },\r\n\t\t\t\t\t{ label: \"Reused\", value: tempMaterials.reum, colour: scaleColoursFive[1] },\r\n\t\t\t\t\t{ label: \"Recycled\", value: tempMaterials.recm, colour: scaleColoursFive[2] },\r\n\t\t\t\t\t{ label: \"Part recycled-Part virgin\", value: tempMaterials.prpvg, colour: scaleColoursFive[3] },\r\n\t\t\t\t\t{ label: \"Virgin Grade\", value: tempMaterials.vgm, colour: scaleColoursFive[4] },\r\n\t\t\t\t];\r\n\r\n\t\t\t\tsetTreeData(treeObject);\r\n\t\t\t\t//console.log(treeData)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\r\n\t\tconst getColour = (ctx) => {\r\n\t\t\tif (ctx.type !== 'data') {\r\n\t\t\t\treturn 'transparent';\r\n\t\t\t}\r\n\t\t\tconst value = ctx.raw.v;\r\n\t\t\tconst dataLabel = ctx.raw.g;\r\n\r\n\t\t\tvar findLabel = treeData.filter((data) => data.label.includes(dataLabel));\r\n\t\t\tvar labelColour = findLabel[0].colour;\r\n\r\n\t\t\treturn labelColour\r\n\t\t}\r\n\r\n\t\tconst getLabel = (ctx) => {\r\n\t\t\tconst treeValue = ctx.raw.v;\r\n\t\t\tvar treeIndex = ctx.dataset.data[ctx.dataIndex]._data._idx;\r\n\t\t\tvar treeLabel = treeData[treeIndex].label;\r\n\r\n\t\t\treturn treeLabel + \" : \" + treeValue\r\n\t\t}\r\n\r\n\t\tconst chart = new ChartJS(canvas.current, {\r\n\t\t\ttype: \"treemap\",\r\n\t\t\tdata: {\r\n\t\t\t\tdatasets: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttree: treeData,\r\n\t\t\t\t\t\tkey: 'value',\r\n\t\t\t\t\t\tgroups: ['label'],\r\n\t\t\t\t\t\tlabels: {\r\n\t\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t\t\tformatter: (ctx) => ctx.raw.g\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tbackgroundColor: (ctx) => getColour(ctx),\r\n\t\t\t\t\t\tspacing: 1.2\r\n\t\t\t\t\t},\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\toptions: {\r\n\t\t\t\tresponsive: true,\r\n\t\t\t\tmaintainAspectRatio: false,\r\n\t\t\t\tplugins: {\r\n\t\t\t\t\ttitle: {\r\n\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tlegend: {\r\n\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdatalabels: false,\r\n\t\t\t\t\ttooltip: {\r\n\t\t\t\t\t\tcallbacks: {\r\n\t\t\t\t\t\t\ttitle: function (item, data) {\r\n\t\t\t\t\t\t\t\treturn \"Material\";\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t// label(ctx) {\r\n\t\t\t\t\t\t\t// \t//console.log(ctx.raw)\r\n\t\t\t\t\t\t\t// \treturn ctx.raw.g\r\n\t\t\t\t\t\t\t// },\r\n\t\t\t\t\t\t\tlabel: (ctx) => getLabel(ctx),\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn () => chart.destroy();\r\n\t}, [canvas, props]);\r\n\treturn (\r\n\t\t\r\n\t\t\t \r\n\t\t
\r\n\t);\r\n}\r\n\r\nfunction OverviewTreemapChart() {\r\n\treturn (\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default OverviewTreemapChart;","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport axios from \"axios\";\r\nimport Header from \"./Header\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Table from 'react-bootstrap/Table';\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverviewRegionTable from \"./OverviewRegionTable\";\r\nimport OverviewTopDesignersStoresTables from \"./OverviewTopDesignersStoresTables\";\r\nimport OverviewDonutChart from \"./OverviewDonutChart\";\r\nimport OverviewBarChart from \"./OverviewBarChart\";\r\nimport OverviewFilters from \"./OverviewFilters\";\r\nimport OverviewTreemapChart from \"./OverviewTreemapChart\";\r\nimport ChartFilledSingleCircle from \"./ChartFilledSingleCircle\";\r\nimport ChartFilledSingleCircleGHG from \"./ChartFilledSingleCircleGHG\";\r\nimport ChartsGlobalStores from \"./ChartsGlobalStores\";\r\nimport { scaleColoursFiveText, scaleColoursSevenText, scaleColoursThreeText } from './GlobalVars'\r\nimport './../index.css';\r\nimport { formatScore } from '../HelperFunctions'\r\nimport { AccessControl } from \"../AccessControl\";\r\n\r\nconst renderMaterialScores = (materials) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tName \r\n\t\t\t\t\tEmbodied GHGE \r\n\t\t\t\t\tTotal Uses \r\n\t\t\t\t \r\n\t\t\t \r\n\t\t\t\r\n\t\t\t\t{materials ? (materials.map((material) => (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{material.material} \r\n\t\t\t\t\t\t{/* {material.subCategory} */}\r\n\t\t\t\t\t\t{material.embodiedGHGE} \r\n\t\t\t\t\t\t{material.count} \r\n\t\t\t\t\t \r\n\t\t\t\t))) :\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t}\r\n\t\t\t \r\n\t\t
\r\n\t)\r\n}\r\n\r\nfunction UserOverview(props) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst user = useSelector((state) => state.user)\r\n\tconst userId = useSelector((state) => state.userId)\r\n\r\n\tconst [materialsLow, setMaterialsLow] = useState(null);\r\n\tconst [materialsHigh, setMaterialsHigh] = useState(null);\r\n\tconst [userProjects, setuserProjects] = useState(null);\r\n\tconst [userMaterials, setUserMaterials] = useState(null);\r\n\tconst [userScoreAverage, setUserScoreAverage] = useState({});\r\n\tconst [userScoreHigh, setUserScoreHigh] = useState({});\r\n\tconst [userGHGAverage, setUserGHGAverage] = useState({});\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\t//get global material high/low\r\n\t\taxios.get(`${backendUrl}/materialScores/9`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tvar tempHigh = response.data.highestRatedMaterials\r\n\t\t\t\tvar tempLow = response.data.lowestRatedMaterials\r\n\t\t\t\t/* \t\t\t\twhile (tempHigh.length < 9) {\r\n\t\t\t\t\t\t\t\t\ttempHigh.push({itemType : \"-\"})\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\twhile (tempLow.length < 9) {\r\n\t\t\t\t\t\t\t\t\ttempHigh.push({itemType : \"-\"})\r\n\t\t\t\t\t\t\t\t}; */\r\n\r\n\t\t\t\tsetMaterialsHigh(tempHigh);\r\n\t\t\t\tsetMaterialsLow(tempLow);\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t\t//get user materials\r\n\t\taxios.get(`${backendUrl}/topMaterialsByArchitect/${userId}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tsetUserMaterials(response.data);\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t\t//get user stores\r\n\t\taxios.get(`${backendUrl}/storesByArchitectSummary/${userId}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tsetuserProjects(response.data.sort((a, b) => (a.totalScore < b.totalScore) ? 1 : -1).slice(0, 5));\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t\t//get user stores scores\r\n\t\taxios.get(`${backendUrl}/scoresByArchitect/${userId}`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\t//set user highest\r\n\t\t\t\tvar highestVal = {};\r\n\t\t\t\thighestVal.score = Math.round((response.data.highestStoreScore) * 100) / 100;\r\n\t\t\t\tsetUserScoreHigh(highestVal);\r\n\r\n\t\t\t\t//set user average\r\n\t\t\t\tvar averageVal = {};\r\n\t\t\t\taverageVal.score = Math.round((response.data.averageStoreScore) * 100) / 100;\r\n\t\t\t\tsetUserScoreAverage(averageVal);\r\n\r\n\t\t\t\t//set user GHG average\r\n\t\t\t\tvar ghgAverageVal = {};\r\n\t\t\t\tghgAverageVal.score = Math.round((response.data.averageGHGEmissions) * 100) / 100;\r\n\t\t\t\tsetUserGHGAverage(ghgAverageVal);\r\n\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t{AccessControl.isDesigner(user) &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tMy Performance \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t
My Average \r\n\t\t\t\t\t\t\t\t\t\t\t\tCircularity Score \r\n\t\t\t\t\t\t\t\t\t\t\t{formatScore(userScoreAverage.score)} \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t
My Highest \r\n\t\t\t\t\t\t\t\t\t\t\t\tCircularity Score \r\n\t\t\t\t\t\t\t\t\t\t\t{formatScore(userScoreHigh.score)} \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tMy GHG Emissions Impact Average}\r\n\t\t\t\t\t\t\t\t\tbottomText=\" \"\r\n\t\t\t\t\t\t\t\t/>\r\n{/* \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t
My GHG Emissions \r\n\t\t\t\t\t\t\t\t\t\t\t\tImpact Average \r\n\t\t\t\t\t\t\t\t\t\t\t{formatScore(userGHGAverage.score)} \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t(kgCO2e per sqm)
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
*/}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t \r\n\t\t\t\t}\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\tGlobal Sustainability \r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t{AccessControl.isReviewer(user) &&\r\n\t\t\t\t\t \r\n\t\t\t\t}\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tRaw Materials \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t Retained \r\n\t\t\t\t\t\t\t\t\t Reused \r\n\t\t\t\t\t\t\t\t\t Recycled \r\n\t\t\t\t\t\t\t\t\t Part recycled-Part virgin \r\n\t\t\t\t\t\t\t\t\t Virgin Grade \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tEnd of Life \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t Fully recyclable \r\n\t\t\t\t\t\t\t\t\t Part recyclable \r\n\t\t\t\t\t\t\t\t\t Recycling program \r\n\t\t\t\t\t\t\t\t\t Finish to remain after decommission \r\n\t\t\t\t\t\t\t\t\t Able to be reused/repurposed \r\n\t\t\t\t\t\t\t\t\t Takeback Scheme \r\n\t\t\t\t\t\t\t\t\t Not recyclable \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\tManufacturer Sourcing \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t Locally \r\n\t\t\t\t\t\t\t\t\t Regionally \r\n\t\t\t\t\t\t\t\t\t Globally \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\tHighest GHG Emission Impacts \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{renderMaterialScores(materialsHigh)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\tLowest GHG Emission Impacts \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{renderMaterialScores(materialsLow)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t \r\n\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default UserOverview;","import React, { useEffect, useState } from \"react\";\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport moment from 'moment'\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Form from 'react-bootstrap/Form';\r\nimport Header from \"./Header\";\r\nimport { makeStorePathMaterials } from \"./ProjectSummaryPage\";\r\nimport './../index.css';\r\nimport countryListRaw from '../data/countries.json'\r\nimport cityListRaw from '../data/cities.json'\r\nimport { onlyUnique } from \"../HelperFunctions\";\r\nimport { config } from '../config'\r\nimport { StoreNavBar } from './StoreNavBar'\r\nimport { loadUsers } from './AdminUsersPage'\r\nimport { createStore, loadStore, scorecardTypes, Store, updateStore } from \"./AdminStoresPage\";\r\nimport { AccessControl } from \"../AccessControl\"\r\n\r\n// Modify the country list to match Aesop naming\r\nconst countryList =\r\n\tcountryListRaw.map(c => {\r\n\t\tif (c.code === \"MO\") {\r\n\t\t\tc.name = \"Macau\"\r\n\t\t} else if (c.code === \"RU\") {\r\n\t\t\tc.name = \"Russia\"\r\n\t\t} else if (c.code === \"US\") {\r\n\t\t\tc.name = \"USA\"\r\n\t\t} else if (c.code === \"KR\") {\r\n\t\t\tc.name = \"South Korea\"\r\n\t\t} else if (c.code === \"TW\") {\r\n\t\t\tc.name = \"Taiwan\"\r\n\t\t} else if (c.code === \"VN\") {\r\n\t\t\tc.name = \"Vietnam\"\r\n\t\t}\r\n\r\n\t\treturn c\r\n\t})\r\n\r\n// create key field we need for react array component\r\nconst cityList =\r\n\tcityListRaw\r\n\t\t.map(c => {\r\n\t\t\tconst key = `${c.country}_${c.name.replace(/\\ /g, '_')}`\r\n\t\t\t\r\n\t\t\treturn {\r\n\t\t\t\t...c,\r\n\t\t\t\tkey\r\n\t\t\t}\r\n\t\t})\r\n\r\n// const region = [\r\n// \t{ id: 1, name: \"ANZ\" },\r\n// \t{ id: 2, name: \"Asia\" },\r\n// \t{ id: 3, name: \"Americas\" },\r\n// \t{ id: 4, name: \"Europe\" },\r\n// ];\r\n\r\nconst regionList = [\r\n\t{\r\n\t\tid: 1,\r\n\t\tname: \"ANZ\",\r\n\t\tcountries: [\r\n\t\t\t\"Australia\",\r\n\t\t\t\"New Zealand\",\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tid: 2,\r\n\t\tname: \"Europe\",\r\n\t\tcountries: [\r\n\t\t\t\"Austria\",\r\n\t\t\t\"Belgium\",\r\n\t\t\t\"Czech Republic\",\r\n\t\t\t\"Denmark\",\r\n\t\t\t\"France\",\r\n\t\t\t\"Finland\",\r\n\t\t\t\"Greece\",\r\n\t\t\t\"Germany\",\r\n\t\t\t\"Ireland\",\r\n\t\t\t\"Italy\",\r\n\t\t\t\"Netherlands\",\r\n\t\t\t\"Norway\",\r\n\t\t\t\"Poland\",\r\n\t\t\t\"Portugal\",\r\n\t\t\t\"Spain\",\r\n\t\t\t\"Sweden\",\r\n\t\t\t\"Switzerland\",\r\n\t\t\t\"Turkey\",\r\n\t\t\t\"United Kingdom\",\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tid: 3,\r\n\t\tname: \"EMEA\",\r\n\t\tcountries: [\r\n\t\t\t\"Israel\",\r\n\t\t\t\"Kuwait\",\r\n\t\t\t\"Qatar\",\r\n\t\t\t\"Russia\",\r\n\t\t\t\"Saudi Arabia\",\r\n\t\t\t\"United Arab Emirates\",\r\n\t\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tid: 4,\r\n\t\tname: \"Americas\",\r\n\t\tcountries: [\r\n\t\t\t\"Brazil\",\r\n\t\t\t\"Canada\",\r\n\t\t\t\"Chile\",\r\n\t\t\t\"Mexico\",\r\n\t\t\t\"USA\",\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tid: 5,\r\n\t\tname: \"Asia\",\r\n\t\tcountries: [\r\n\t\t\t\"China\",\r\n\t\t\t\"Hong Kong\",\r\n\t\t\t\"Indonesia\",\r\n\t\t\t\"Japan\",\r\n\t\t\t\"Macau\",\r\n\t\t\t\"Malaysia\",\r\n\t\t\t\"Philippines\",\r\n\t\t\t\"Singapore\",\r\n\t\t\t\"South Korea\",\r\n\t\t\t\"Taiwan\",\r\n\t\t\t\"Thailand\",\r\n\t\t\t\"Vietnam\",\r\n\t\t],\r\n\t}\r\n]\r\n\r\nconst locationType = [\r\n\t{ id: 1, name: \"Store\" },\r\n\t{ id: 2, name: \"Counter\" },\r\n];\r\n\r\nconst marketingMediaType = [\r\n\t{ id: 0, name: \"None\" },\r\n\t{ id: 1, name: \"Digital Screen\" },\r\n\t{ id: 2, name: \"Lightbox\" },\r\n\t{ id: 3, name: \"Other\" },\r\n];\r\n\r\n// const selectOption = [\r\n// \t{ id: 1, option: \"Yes\" },\r\n// \t{ id: 2, option: \"No\" },\r\n// ];\r\n\r\nconst currencyList = [\r\n\t{ id: \"AUD\" },\r\n\t{ id: \"EUR\" },\r\n\t{ id: \"GBP\" },\r\n\t{ id: \"USD\" },\r\n\t{ id: \"---\" },\r\n\t{ id: \"AED\" },\r\n\t{ id: \"AFN\" },\r\n\t{ id: \"ALL\" },\r\n\t{ id: \"AMD\" },\r\n\t{ id: \"ANG\" },\r\n\t{ id: \"AOA\" },\r\n\t{ id: \"ARS\" },\r\n\t{ id: \"AWG\" },\r\n\t{ id: \"AZN\" },\r\n\t{ id: \"BAM\" },\r\n\t{ id: \"BBD\" },\r\n\t{ id: \"BDT\" },\r\n\t{ id: \"BGN\" },\r\n\t{ id: \"BHD\" },\r\n\t{ id: \"BIF\" },\r\n\t{ id: \"BMD\" },\r\n\t{ id: \"BND\" },\r\n\t{ id: \"BOB\" },\r\n\t{ id: \"BOV\" },\r\n\t{ id: \"BRL\" },\r\n\t{ id: \"BSD\" },\r\n\t{ id: \"BTN\" },\r\n\t{ id: \"BWP\" },\r\n\t{ id: \"BYN\" },\r\n\t{ id: \"BZD\" },\r\n\t{ id: \"CAD\" },\r\n\t{ id: \"CDF\" },\r\n\t{ id: \"CHE\" },\r\n\t{ id: \"CHF\" },\r\n\t{ id: \"CHW\" },\r\n\t{ id: \"CLF\" },\r\n\t{ id: \"CLP\" },\r\n\t{ id: \"CNY\" },\r\n\t{ id: \"COP\" },\r\n\t{ id: \"COU\" },\r\n\t{ id: \"CRC\" },\r\n\t{ id: \"CUC\" },\r\n\t{ id: \"CUP\" },\r\n\t{ id: \"CVE\" },\r\n\t{ id: \"CZK\" },\r\n\t{ id: \"DJF\" },\r\n\t{ id: \"DKK\" },\r\n\t{ id: \"DOP\" },\r\n\t{ id: \"DZD\" },\r\n\t{ id: \"EGP\" },\r\n\t{ id: \"ERN\" },\r\n\t{ id: \"ETB\" },\r\n\t{ id: \"EUR\" },\r\n\t{ id: \"FJD\" },\r\n\t{ id: \"FKP\" },\r\n\t{ id: \"GBP\" },\r\n\t{ id: \"GEL\" },\r\n\t{ id: \"GHS\" },\r\n\t{ id: \"GIP\" },\r\n\t{ id: \"GMD\" },\r\n\t{ id: \"GNF\" },\r\n\t{ id: \"GTQ\" },\r\n\t{ id: \"GYD\" },\r\n\t{ id: \"HKD\" },\r\n\t{ id: \"HNL\" },\r\n\t{ id: \"HRK\" },\r\n\t{ id: \"HTG\" },\r\n\t{ id: \"HUF\" },\r\n\t{ id: \"IDR\" },\r\n\t{ id: \"ILS\" },\r\n\t{ id: \"INR\" },\r\n\t{ id: \"IQD\" },\r\n\t{ id: \"IRR\" },\r\n\t{ id: \"ISK\" },\r\n\t{ id: \"JMD\" },\r\n\t{ id: \"JOD\" },\r\n\t{ id: \"JPY\" },\r\n\t{ id: \"KES\" },\r\n\t{ id: \"KGS\" },\r\n\t{ id: \"KHR\" },\r\n\t{ id: \"KMF\" },\r\n\t{ id: \"KPW\" },\r\n\t{ id: \"KRW\" },\r\n\t{ id: \"KWD\" },\r\n\t{ id: \"KYD\" },\r\n\t{ id: \"KZT\" },\r\n\t{ id: \"LAK\" },\r\n\t{ id: \"LBP\" },\r\n\t{ id: \"LKR\" },\r\n\t{ id: \"LRD\" },\r\n\t{ id: \"LSL\" },\r\n\t{ id: \"LYD\" },\r\n\t{ id: \"MAD\" },\r\n\t{ id: \"MDL\" },\r\n\t{ id: \"MGA\" },\r\n\t{ id: \"MKD\" },\r\n\t{ id: \"MMK\" },\r\n\t{ id: \"MNT\" },\r\n\t{ id: \"MOP\" },\r\n\t{ id: \"MRU\" },\r\n\t{ id: \"MUR\" },\r\n\t{ id: \"MVR\" },\r\n\t{ id: \"MWK\" },\r\n\t{ id: \"MXN\" },\r\n\t{ id: \"MXV\" },\r\n\t{ id: \"MYR\" },\r\n\t{ id: \"MZN\" },\r\n\t{ id: \"NAD\" },\r\n\t{ id: \"NGN\" },\r\n\t{ id: \"NIO\" },\r\n\t{ id: \"NOK\" },\r\n\t{ id: \"NPR\" },\r\n\t{ id: \"NZD\" },\r\n\t{ id: \"OMR\" },\r\n\t{ id: \"PAB\" },\r\n\t{ id: \"PEN\" },\r\n\t{ id: \"PGK\" },\r\n\t{ id: \"PHP\" },\r\n\t{ id: \"PKR\" },\r\n\t{ id: \"PLN\" },\r\n\t{ id: \"PYG\" },\r\n\t{ id: \"QAR\" },\r\n\t{ id: \"RON\" },\r\n\t{ id: \"RSD\" },\r\n\t{ id: \"RUB\" },\r\n\t{ id: \"RWF\" },\r\n\t{ id: \"SAR\" },\r\n\t{ id: \"SBD\" },\r\n\t{ id: \"SCR\" },\r\n\t{ id: \"SDG\" },\r\n\t{ id: \"SEK\" },\r\n\t{ id: \"SGD\" },\r\n\t{ id: \"SHP\" },\r\n\t{ id: \"SLL\" },\r\n\t{ id: \"SOS\" },\r\n\t{ id: \"SRD\" },\r\n\t{ id: \"SSP\" },\r\n\t{ id: \"STN\" },\r\n\t{ id: \"SVC\" },\r\n\t{ id: \"SYP\" },\r\n\t{ id: \"SZL\" },\r\n\t{ id: \"THB\" },\r\n\t{ id: \"TJS\" },\r\n\t{ id: \"TMT\" },\r\n\t{ id: \"TND\" },\r\n\t{ id: \"TOP\" },\r\n\t{ id: \"TRY\" },\r\n\t{ id: \"TTD\" },\r\n\t{ id: \"TWD\" },\r\n\t{ id: \"TZS\" },\r\n\t{ id: \"UAH\" },\r\n\t{ id: \"UGX\" },\r\n\t{ id: \"USD\" },\r\n\t{ id: \"USN\" },\r\n\t{ id: \"UYI\" },\r\n\t{ id: \"UYU\" },\r\n\t{ id: \"UYW\" },\r\n\t{ id: \"UZS\" },\r\n\t{ id: \"VES\" },\r\n\t{ id: \"VND\" },\r\n\t{ id: \"VUV\" },\r\n\t{ id: \"WST\" },\r\n\t{ id: \"XAF\" },\r\n\t{ id: \"XCD\" },\r\n\t{ id: \"XDR\" },\r\n\t{ id: \"XOF\" },\r\n\t{ id: \"XPF\" },\r\n\t{ id: \"XSU\" },\r\n\t{ id: \"XUA\" },\r\n\t{ id: \"YER\" },\r\n\t{ id: \"ZAR\" },\r\n\t{ id: \"ZMW\" },\r\n\t{ id: \"ZWL\" },\r\n]\r\n\r\n//variable kept for input field debugging\r\nlet storeDetailsStateDebug = !config.isDebugMode ? {} : {\r\n\t// \"storeCode\": null,\r\n\t\"storeName\": `Store ${Math.round(Math.random()*1000)}`,\r\n\t\"scorecardType\": Store.ScorecardType.CONCEPT,\r\n\t\"locationType\": \"Store\",\r\n\t\"streetAddress\": \"1 Sample Street\",\r\n\t\"region\": \"ANZ\",\r\n\t\"country\": \"Australia\",\r\n\t\"city\": \"Melbourne\",\r\n\t\"roicCapex\": 1,\r\n\t\"currency\": \"AUD\",\r\n\t\"leaseTermInYears\": 1,\r\n\t// \"projectManagerId\": null,\r\n\t\"projectManager\": \"PM\",\r\n\t// \"architectId\": null,\r\n\t\"architect\": \"Arch\",\r\n\t// \"signedCoc\": null,\r\n\t// \"signedNda\": null,\r\n\t\"totalSqm\": 1000,\r\n\t\"retailSqm\": 400,\r\n\t// \"bohSqm\": null,\r\n\t\"marketingMediaType\": \"Digital Screen\",\r\n\t\"pos\": 2,\r\n\t// \"mpos\": null,\r\n\t// \"tapNumber\": null,\r\n\t\"treatmentSpace\": 2,\r\n\t// \"bathroom\": null,\r\n\t// \"otherSpace\": null,\r\n\t// \"reviewerId\": null,\r\n\t// \"reviewRequired\": null,\r\n\t// \"susInitGreenspace\": null,\r\n\t// \"susInitRainwater\": null,\r\n\t// \"susInitSolarPV\": null,\r\n\t// \"susInitGreywater\": null,\r\n\t// \"susInitBattery\": null,\r\n\t// \"susInitVentilation\": null,\r\n\t// \"susInitComposting\": null,\r\n\t\"contractorId\": \"Contractor\",\r\n\t\"storeStatus\": \"DRAFT\",\r\n\t// \"creatorId\": null\r\n};\r\n\r\n// let storeDetailsStateDebug = {\r\n// \t\"storeName\": \"Otto 1\",\r\n// \t\"creatorId\": 12,\r\n// \t\"architectId\": 12,\r\n// \t\"ready\": \"ready\",\r\n// \t\"treatmentSpace\": 3,\r\n// \t\"scorecardType\": Store.ScorecardType.CONCEPT,\r\n// \t\"locationType\": \"Store\",\r\n// \t\"streetAddress\": \"a\",\r\n// \t\"region\": \"ANZ\",\r\n// \t\"country\": \"Åland Islands\",\r\n// \t\"city\": \"Eckerö\",\r\n// \t\"currency\": \"GBP\",\r\n// \t\"retailSqm\": 222,\r\n// \t\"totalSqm\": 1111,\r\n// \t\"bohSqm\": 889\r\n// }\r\n\r\nconst getCityListBasedOnCountry = (country) => {\r\n\tif (country) {\r\n\t\tlet cf =\r\n\t\t\tcityList\r\n\t\t\t.filter(c => c.country === country.code)\r\n\t\t\t// .sort((a, b) => a.name.localeCompare(b.name))\r\n\t\t\t.map(c => c.name)\r\n\t\t\t.filter(onlyUnique) // remove duplicate city names\r\n\t\t\t.sort()\r\n\r\n\t\t// console.log('filtered cities count', cf.length)\r\n\t\t// console.log('filtered cities', cf)\r\n\t\treturn cf\r\n\t} else {\r\n\t\t// reset the cities list if we could not find the country code\r\n\t\t// return cityList\r\n\t\treturn []\r\n\t}\r\n}\r\n\r\nconst findCountryFromName = (countryName) => {\r\n\treturn countryList.find(c => c.name === countryName)\r\n}\r\n\r\nconst getCountryListBasedOnRegionName = (regionName) => {\r\n\tif (!regionName) {\r\n\t\treturn []\r\n\t}\r\n\t\r\n\tlet region = regionList.find(c => c.name === regionName)\r\n\t\r\n\tif (!region) {\r\n\t\tconsole.error(\"Could not find region:\", regionName)\r\n\t\treturn []\r\n\t} else {\r\n\t\treturn region.countries\r\n\t\t\t.map(findCountryFromName)\r\n\t\t\t.filter(c => c !== undefined)\r\n\t}\r\n}\r\n\r\nconst getCityListBasedOnCountryName = (countryName) => {\r\n\tlet country = findCountryFromName(countryName)\r\n\treturn getCityListBasedOnCountry(country)\r\n}\r\n\r\nconst jsDateTimeToDateStr = (dt) => {\r\n\tconst d = moment(dt)\r\n\tconst f = d.format(\"yyyy-MM-DD\")\r\n\t// console.log('moment', d)\r\n\t// console.log('moment formatted', f)\r\n\treturn f\r\n}\r\n\r\nfunction ProjectCreateNew({ store, setStore }) {\r\n\tconst storeId = store && store.id\r\n\tconst editMode = !!storeId\r\n\r\n\tconst userId = parseInt(useSelector((state) => state.userId))\r\n\r\n\tconst storeDetailsStateDefault =\r\n\t\t{\r\n\t\t\tstoreStatus: Store.Status.DRAFT,\r\n\t\t\treviewRequired: 0,\r\n\t\t\t// ...storeDetailsStateDebug,\r\n\t\t\t// region: regionList[0].name,\r\n\t\t\tcreatorId: userId,\r\n\t\t\tarchitectId: userId, // since we are no longer setting this field, set it to the userId so the user can access their own projects!\r\n\t\t\topeningDate: jsDateTimeToDateStr(new Date())\r\n\t\t}\r\n\r\n\tconst [userList, setUserList] = useState([]);\r\n\tconst [usersArchitect, setUsersArchitect] = useState([]);\r\n\tconst [usersReviewer, setUsersReviewer] = useState([]);\r\n\tconst [storeDetailsState, setStoreDetailsState] = useState(storeDetailsStateDefault)\r\n\r\n\tconst [countryListFiltered, setCountryListFiltered] = useState(getCountryListBasedOnRegionName(storeDetailsState.region));\r\n\tconst [cityListFiltered, setCityListFiltered] = useState(getCityListBasedOnCountryName(storeDetailsState.country));\r\n\r\n\tconst dispatch = useDispatch();\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\tif (editMode === true) {\r\n\t\t\t// loadStore(storeId, (store) => {\r\n\t\t\t// console.log(\"store:\", store)\r\n\t\t\tsetCountryListBasedOnRegionName(store.region)\r\n\t\t\tsetCityListBasedOnCountryName(store.country)\r\n\t\t\tsetStoreDetailsState({ ...store });\r\n\t\t// })\r\n\t\t} else {\r\n\t\t\t// new store\r\n\t\t\tsetStoreDetailsState(storeDetailsStateDefault)\r\n\t\t}\r\n\t\t\r\n\r\n\t\t//look up users to prefill arch as dropdown - TODO: Remove (Not needed anymore since architect/pm are text fields)\r\n\t\tloadUsers(users => {\r\n\t\t\t// console.log(users)\r\n\t\t\tsetUserList(users)\r\n\t\t\tconst usersArchitectTmp = users.filter((user) => AccessControl.isDesigner(user))\r\n\t\t\t// console.log(usersArchitect);\r\n\t\t\tsetUsersArchitect(usersArchitectTmp);\r\n\t\t\tlet usersReviewerTmp = users.filter((user) => AccessControl.isReviewer(user))\r\n\t\t\t// console.log(usersReviewer);\r\n\t\t\tsetUsersReviewer(usersReviewerTmp);\r\n\t\t})\r\n\r\n\t}, [editMode, storeId]);\r\n\r\n\tconst [validated, setValidated] = useState(false);\r\n\t\r\n\tconst setCountryListBasedOnRegionName = (regionName) => {\r\n\t\tconst l = getCountryListBasedOnRegionName(regionName)\r\n\t\tsetCountryListFiltered(l)\r\n\t}\r\n\t\r\n\tconst setCityListBasedOnCountry = (country) => {\r\n\t\t// console.log(\"country\", country)\r\n\t\t// console.log(\"country.code\", country.code)\r\n\t\tconst cl = getCityListBasedOnCountry(country)\r\n\t\tsetCityListFiltered(cl)\r\n\t}\r\n\r\n\tconst setCityListBasedOnCountryName = (countryName) => {\r\n\t\tlet country = countryList.find(c => c.name === countryName)\r\n\t\tsetCityListBasedOnCountry(country)\r\n\t}\r\n\t\r\n\tconst calcBohSqm = (storeDetailsState) => {\r\n\t\tif (storeDetailsState\r\n\t\t\t&& storeDetailsState.totalSqm\r\n\t\t\t&& isFinite(storeDetailsState.totalSqm)\r\n\t\t\t&& storeDetailsState.retailSqm\r\n\t\t\t&& isFinite(storeDetailsState.retailSqm)) {\r\n\t\t\tconst bohSqm = storeDetailsState.totalSqm - storeDetailsState.retailSqm\r\n\r\n\t\t\tif (storeDetailsState.bohSqm !== bohSqm) {\r\n\t\t\t\tsetStoreDetailsState({ ...storeDetailsState, bohSqm }); // infinite loop!\r\n\t\t\t}\r\n\r\n\t\t\treturn bohSqm\r\n\t\t} else {\r\n\t\t\treturn \"\"\r\n\t\t}\r\n\t}\r\n\r\n\tconst onChange = (e) => {\r\n\t\t// console.log(\"storeDetailsState\", storeDetailsState);\r\n\t\t// console.log(\"cityListFiltered\", cityListFiltered);\r\n\t\t//var inputName;\r\n\t\tvar inputValue;\r\n\t\tvar inputName = [e.target.name];\r\n\t\tinputValue = e.target.value;\r\n\r\n\t\tvar storeDetailsStateUpdated = storeDetailsState\r\n\r\n\t\tif (e.target.name === \"region\") {\r\n\t\t\t// region was changed, so filter countries list\r\n\r\n\t\t\t// first reset the country and city selection\r\n\t\t\tstoreDetailsStateUpdated.country = undefined\r\n\t\t\tstoreDetailsStateUpdated.city = undefined\r\n\t\t\tsetCityListFiltered([])\r\n\r\n\t\t\tlet regionName = inputValue\r\n\t\t\tsetCountryListBasedOnRegionName(regionName)\r\n\t\t}\r\n\r\n\t\tif (e.target.name === \"country\") {\r\n\t\t\t// country was changed, so filter cities list\r\n\t\t\tlet country = countryList.find(c => c.name === inputValue)\r\n\t\t\tsetCityListBasedOnCountry(country)\r\n\r\n\t\t\t// reset the city selection\r\n\t\t\tstoreDetailsStateUpdated.city = undefined\r\n\t\t}\r\n\r\n\t\tif (e.target.type == \"number\") {\r\n\t\t\t// console.log(\"i am a number\");\r\n\t\t\t//projectData[e.target.name] = Number(e.target.value);\r\n\t\t\tinputValue = parseInt(e.target.value);\r\n\t\t}\r\n\r\n\t\tif (e.target.type == \"checkbox\") {\r\n\t\t\t// console.log(e.target.type);\r\n\t\t\t// console.log(e.target.checked);\r\n\t\t\t//projectData[e.target.name] = e.target.checked;\r\n\t\t\tinputValue = e.target.checked;\r\n\t\t}\r\n\r\n\t\tif (e.target.type == \"select\") {\r\n\t\t\t// console.log(e.target.type);\r\n\t\t\t//e.target.value = projectData[e.target.name];\r\n\t\t\te.target.id = e.target.id;\r\n\t\t}\r\n\r\n\t\tif (e.target.type == \"date\") {\r\n\t\t\tinputValue = e.target.value && new Date(e.target.value)\r\n\t\t\t// console.log('datestring', e.target.value)\r\n\t\t\t// console.log('datetime', inputValue)\r\n\t\t}\r\n\r\n\t\t// if (e.target.id == \"architectId\") {\r\n\t\t// \tconsole.log(\"i am archId\");\r\n\t\t// \t//projectData[e.target.name] = Number(e.target.value);\r\n\t\t// \tinputValue = parseInt(e.target.value);\r\n\t\t// }\r\n\t\t// if (e.target.id == \"projectManagerId\") {\r\n\t\t// \tconsole.log(\"i am pm\");\r\n\t\t// \t//projectData[e.target.name] = Number(e.target.value);\r\n\t\t// \tinputValue = parseInt(e.target.value);\r\n\t\t// }\r\n\r\n\t\tsetStoreDetailsState({ ...storeDetailsStateUpdated, [e.target.name]: inputValue });\r\n\r\n\t}\r\n\r\n\tconst history = useHistory();\r\n\t// function handleClickAddMaterial() {\r\n\t// \thistory.push('/designer/projects/material');\r\n\t// }\r\n\r\n\tconst cleanStoreDataForDb = (storeData) => {\r\n\t\tvar storeDataClean = {...storeData}\r\n\t\t// delete storeDataClean[\"createdAt\"]\r\n\t\t// storeDataClean.openingDate = new Date(storeDataClean.openingDate) // DATETIME db field\r\n\r\n\t\tstoreDataClean = Store.setDesigner(storeDataClean.scorecardType, userId, storeDataClean)\r\n\r\n\t\treturn storeDataClean\r\n\t}\r\n\r\n\tconst saveProjectData = () => {\r\n\t\tcreateStore(cleanStoreDataForDb(storeDetailsState), (store) => {\r\n\t\t\tconst storeIdNew = store.id\r\n\t\t\t// dispatch(setStoreId(storeId))\r\n\t\t\t// dispatch(setStoreId(storeId))\r\n\t\t\thistory.push(makeStorePathMaterials(storeIdNew))\r\n\t\t\tsetStore(store)\r\n\t\t})\r\n\t}\r\n\r\n\tconst updateProjectData = () => {\r\n\t\tupdateStore(cleanStoreDataForDb(storeDetailsState), (store) => {\r\n\t\t\thistory.push(makeStorePathMaterials(store.id))\r\n\t\t\tsetStore(store)\r\n\t\t})\r\n\t}\r\n\r\n\tconst handleSubmit = (event) => {\r\n\t\tconst form = event.currentTarget;\r\n\r\n\t\tsetStoreDetailsState({ ...storeDetailsState, ready: \"ready\" });\r\n\r\n\t\tif (form.checkValidity() == false) {\r\n\t\t\t// console.log(\"false\");\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t\telse if (form.checkValidity() == true) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\t// console.log(\"true\");\r\n\t\t\tif (editMode) {\r\n\t\t\t\tupdateProjectData();\r\n\t\t\t} else {\r\n\t\t\t\tsaveProjectData();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\tsetValidated(true);\r\n\t};\r\n\r\n\r\n\t// console.log(\"storeDetailsState\");\r\n\t// console.log(storeDetailsState);\r\n\r\n\tconst renderForm = () => {\r\n\t\treturn (\r\n\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tStore Name\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t{/* \r\n\t\t\t\t\t\tStore Code\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tScorecard Type\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t{scorecardTypes.map((m) => (\r\n\t\t\t\t\t\t\t\t{m.title} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t{/* */}\r\n\r\n\t\t\t\t{/* */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tLocation Type\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t{locationType.map((m) => (\r\n\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tStreet Address\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tRegion\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t{regionList.map(r => (\r\n\t\t\t\t\t\t\t\t{r.name} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tCountry\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{countryListFiltered.length === 0 ? \"Select Region\" : \"Select Country\"} \r\n\t\t\t\t\t\t\t{countryListFiltered.map((m) => (\r\n\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tCity\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{cityListFiltered.length === 0 ? \"Select Country\" : \"Select City\"} \r\n\t\t\t\t\t\t\t{cityListFiltered.map((c) => (\r\n\t\t\t\t\t\t\t\t// {c.name} \r\n\t\t\t\t\t\t\t\t{c} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tOpening Date\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tROIC CAPEX\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tCurrency\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t{currencyList.map((m) => (\r\n\t\t\t\t\t\t\t\t{m.id} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tTotal Sqm\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tRetail Sqm\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t{/* \r\n\t\t\t\t\t \r\n\t\t\t\t\t\tDetailed Store Data \r\n\t\t\t\t\t\r\n\t\t\t\t
*/}\r\n\t\t\t\t\r\n\t\t\t\t\tDetailed Store Data \r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tLease terms\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tProject Manager\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\tProject Manager \r\n\t\t\t\t\t\t\t{usersArchitect.map((m) => (\r\n\t\t\t\t\t\t\t\t(m.id === userId) ?\r\n\t\t\t\t\t\t\t\t\t{m.email} \r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t\t{m.email} \r\n\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tArchitect\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t{usersArchitect.map((m) => (\r\n\t\t\t\t\t\t\t\t{m.email} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tContractor\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tSigned Supplier Agreement\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tSigned NDA\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tBOH Sqm\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t{calcBohSqm(storeDetailsState)} \r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tTreatment Space\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t{/* */}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\tMarketing Media Type\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t\t{marketingMediaType.map((m) => (\r\n\t\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPOS Number\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tMPOS Number\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tTap Number\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tBathroom\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tOther Space\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t{/* \r\n\t\t\t\t\t \r\n\t\t\t\t\t\tSustainability Initiatives \r\n\t\t\t\t\t\tPlease check all options that are applicable \r\n\t\t\t\t\t\r\n\t\t\t\t
*/}\r\n\r\n\t\t\t\t\r\n\t\t\t\t\tSustainability Initiatives \r\n\t\t\t\t\tPlease check all options that are applicable \r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tGreenspace\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tRainwater Storage and Reuse\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tSolar PV Panels\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tGreywater Treatment and Reuse\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tBattery\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tMechanical Ventilation\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tComposting\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t \r\n\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tNext\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n\r\n\tif (editMode) {\r\n\t\t// Edit store\r\n\t\treturn (\r\n\t\t\t// Return a list to be consistent with the other store tabs content\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t{editMode ? \"Edit Store\" : \"New Store\"} \r\n\t\t\t\t
\r\n\t\t\t\t{renderForm()}\r\n\t\t\t>\r\n\t\t)\r\n\t} else {\r\n\t\t// Create new\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{renderForm()}\r\n\t\t\t \r\n\t\t)\r\n\t}\r\n\r\n}\r\n\r\nexport default ProjectCreateNew;","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\nimport Container from 'react-bootstrap/Container';\r\nimport axios from 'axios';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Dropdown from 'react-bootstrap/Dropdown'\r\nimport Header from \"./Header\";\r\nimport ProjectInformationBrief from \"./ProjectInformationBrief\";\r\nimport ProjectScores from \"./ProjectScores\";\r\nimport ProjectsNewMaterialModal from \"./ProjectsNewMaterialModal\";\r\n//import ProjectsNewMaterialModal from \"./ProjectsNewMaterialModalWizard\";\r\nimport Accordion from 'react-bootstrap/Accordion';\r\nimport Table from 'react-bootstrap/Table';\r\nimport './../index.css';\r\nimport { StoreNavBar } from './StoreNavBar'\r\nimport { deleteMaterialInstance, loadAllMaterials } from './AdminMaterialsPage'\r\nimport { config } from '../config'\r\nimport { loadStore } from \"./AdminStoresPage\";\r\nimport { calcTotalGhge, formatGhge, formatScore, formatUnitForDisplay } from \"../HelperFunctions\";\r\nimport { AccessControl } from \"../AccessControl\";\r\n\r\nconst CategoryMaterialsList = ({ title, user, store, materialInstances, handleMaterialInstActionClick }) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t {title}\r\n\t\t\t\t\t{/* 14 Materials */}\r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tRaw Material \r\n\t\t\t\t\t\t\t\tName \r\n\t\t\t\t\t\t\t\tQuantity \r\n\t\t\t\t\t\t\t\tEmbodied GHGE(kgCO2e) \r\n\t\t\t\t\t\t\t\tScore \r\n\t\t\t\t\t\t\t\t{AccessControl.storeCanEdit(user, store) && Actions }\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{materialInstances ? (materialInstances.map((matInst) => {\r\n\t\t\t\t\t\t\t\tconst totGhgeInfo = calcTotalGhge(matInst)\r\n\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{matInst.rawMaterial} \r\n\t\t\t\t\t\t\t\t\t\t{matInst.itemType} \r\n\t\t\t\t\t\t\t\t\t\t{matInst.materialQuantity} {formatUnitForDisplay(matInst.unit)} \r\n\t\t\t\t\t\t\t\t\t\t{/* {matInst.embodiedGHGE + \" -- \" + matInst.A1A3CarbonFactor} */}\r\n\t\t\t\t\t\t\t\t\t\t{totGhgeInfo.formatted} \r\n\t\t\t\t\t\t\t\t\t\t{formatScore(matInst.totalScore)} \r\n\t\t\t\t\t\t\t\t\t\t{AccessControl.storeCanEdit(user, store) && (\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/* handleMaterialInstActionClick(matInst, \"VIEW\")}>View */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t handleMaterialInstActionClick(matInst, \"EDIT\")}>Edit \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t handleMaterialInstActionClick(matInst, \"DELETE\")}>Delete \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ config.isDebugMode && handleMaterialInstActionClick(matInst, \"LOG\")}>Log It }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t})) : \"\"}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t \r\n\t\t\t \r\n\t\t \r\n\t)\r\n}\r\n\r\n\r\nfunction ProjectsAddMaterial({ store, setStore, user }) {\r\n\tconst storeId = store.id\r\n\tconst userId = user.id\r\n\r\n\tconst backendUrl = useSelector((state) => state.backendUrl)\r\n\r\n\tconst [materialInstToEdit, setMaterialInstToEdit] = useState(false)\r\n\tconst [selectMaterialModal, setSelectMaterialModal] = useState(false)\r\n\tconst [currentStoreMaterials, setCurrentStoreMaterials] = useState([])\r\n\tconst [projectScore, setProjectScore] = useState(0)\r\n\tconst [epicMaterials, setEpicMaterials] = useState([])\r\n\r\n\t// const history = useHistory()\r\n\tfunction handleClickSubmit() {\r\n\t\t//history.push('/designer/project/summary');\r\n\t}\r\n\r\n\tconst materialSubCategories = [\r\n\t\t{ id: 1, name: \"Flooring\" },\r\n\t\t{ id: 2, name: \"Wall\" },\r\n\t\t{ id: 3, name: \"Ceiling\" },\r\n\t\t{ id: 4, name: \"Facade\" },\r\n\t\t{ id: 5, name: \"POS\" },\r\n\t\t{ id: 6, name: \"Product shelving\" },\r\n\t\t{ id: 7, name: \"BOH\" },\r\n\t\t{ id: 8, name: \"Basin\" },\r\n\t\t{ id: 9, name: \"Furniture\" },\r\n\t\t{ id: 10, name: \"Lighting\" },\r\n\t\t{ id: 11, name: \"Fixtures\" },\r\n\t];\r\n\r\n\tconst getStoreScore = () => {\r\n\t\t// loadStore(storeId, store => {\r\n\t\tsetStore(store)\r\n\t\tsetProjectScore(Math.round(store.totalScore))\r\n\t\t// })\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconsole.log('ProjectsAddMaterial.useEffect')\r\n\t\tgetStoreScore() // just run once\r\n\t}, [ storeId ])\r\n\r\n\tfunction loadMaterialInstances() {\r\n\t\taxios.get(`${backendUrl}/materialInstancesByStore/${storeId}`)\r\n\t\t.then(function (response) {\r\n\t\t\tsetCurrentStoreMaterials(response.data || [])\r\n\t\t});\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\t\tloadMaterialInstances()\r\n\t}, []);\r\n\r\n\t// load the epic materials for the add material modal\r\n\tuseEffect(() => loadAllMaterials(setEpicMaterials), [backendUrl])\r\n\r\n\tconst showMaterialModal = (materialInst) => {\r\n\t\t// console.log('materialInst', materialInst)\r\n\t\tsetMaterialInstToEdit(materialInst)\r\n\t\tsetSelectMaterialModal(true)\r\n\t}\r\n\r\n\t\r\n\r\n\tconst handleMaterialInstActionClick = (matInst, actionName) => {\r\n\t\tif (actionName === \"EDIT\") {\r\n\t\t\tshowMaterialModal(matInst)\r\n\t\t} else if (actionName === \"DELETE\") {\r\n\t\t\tdeleteMaterialInstance(matInst.id, () => {\r\n\t\t\t\t// showToastMsg(\"materialInstance deleted (\" + materialInstance.material + \")\")\r\n\t\t\t\tloadMaterialInstances()\r\n\t\t\t}, err => {\r\n\t\t\t\t// showToastMsg(\"Error deleting materialInstance (\" + epicMaterial.material + \"). Please try again.\")\r\n\t\t\t})\r\n\t\t} else if (actionName === \"LOG\") {\r\n\t\t\tconsole.log('material instance', matInst)\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\tAdd Store Materials \r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t{/* Project Score: {projectScore}
*/}\r\n\t\t\t
\r\n\t\t\t{AccessControl.storeCanAddMaterial(user, store) &&\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t showMaterialModal()} > Add new material \r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\r\n\t\t\t{materialSubCategories.map(subCat => {\r\n\t\t\t\t\tconst materialInstances = currentStoreMaterials.filter((materialInst) => materialInst.subCategory === subCat.name)\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t)}\r\n\r\n\t\t\t{selectMaterialModal == false &&\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\tSubmit Project \r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t {setSelectMaterialModal(false); loadMaterialInstances(); getStoreScore()} }\r\n\t\t\t\tstore={store}\r\n\t\t\t\tepicMaterials={epicMaterials}\r\n\t\t\t/>\r\n\t\t\t{/* setSelectMaterialModal(false)}\r\n\t\t\t//handleChange={(e) => setChecked([...checked, e.target.value])}\r\n\t\t\t/> */}\r\n\t\t>\r\n\t);\r\n}\r\n\r\nexport default ProjectsAddMaterial;","import React, { useEffect, useState } from \"react\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport { Store, getStoreScoreForScorecardType, loadStore, scorecardTypes } from \"./AdminStoresPage\";\r\nimport Table from 'react-bootstrap/Table'\r\nimport { loadUsers } from \"./AdminUsersPage\";\r\n\r\nfunction ProjectReviewPage({ store, setStore, user }) {\r\n\r\n\tconst [users, setUsers] = useState([])\r\n\r\n\tconst storeId = store.id\r\n\r\n\tuseEffect(() => {\r\n loadUsers(setUsers)\r\n }, [ store ])\r\n\r\n\tconst displayNameFromUserId = (userId) => {\r\n\t\tlet u = users.find(u => u.id === userId)\r\n\t\treturn u && u.displayName\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\tReview Details \r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tStatus \r\n\t\t\t\t\t\t\t\t{Store.getStatusTitle(store.storeStatus)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tScorecard Type \r\n\t\t\t\t\t\t\t\t{Store.getScorecardTypeTitle(store.scorecardType)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tStore Creator \r\n\t\t\t\t\t\t\t\t{displayNameFromUserId(store.creatorId)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tReview Required \r\n\t\t\t\t\t\t\t\t{store.reviewRequired ? \"Yes\" : \"No\"} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tReview Comment \r\n\t\t\t\t\t\t\t\t{store.reviewComment} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\tDesigners \r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tStore Creator \r\n\t\t\t\t\t\t\t\t{displayNameFromUserId(store.creatorId)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tConcept \r\n\t\t\t\t\t\t\t\t{displayNameFromUserId(store.designerIdConcept)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tAs-Built \r\n\t\t\t\t\t\t\t\t{displayNameFromUserId(store.designerIdAsBuilt)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tDecommissioned \r\n\t\t\t\t\t\t\t\t{displayNameFromUserId(store.designerIdDecom)} \r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t \r\n\t\t>\r\n\t)\r\n}\r\n\r\nexport default ProjectReviewPage;","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport moment from 'moment'\r\nimport Header from \"./Header\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Table from 'react-bootstrap/Table';\r\nimport { setStoreId } from '../store/actions';\r\nimport { makeStorePathView } from './ProjectSummaryPage'\r\nimport { useTable, useSortBy } from 'react-table'\r\nimport { CSVLink } from \"react-csv\"\r\nimport { Store, loadAllStores } from './AdminStoresPage'\r\nimport { formatScore, formatGhge } from '../HelperFunctions'\r\nimport { AccessControl } from \"../AccessControl\";\r\n\r\nfunction SortTable({ columns, data }) {\r\n\tconst dispatch = useDispatch();\r\n\tconst user = useSelector((state) => state.user)\r\n\tconst userId = useSelector((state) => state.userId);\r\n\tconst history = useHistory();\r\n\r\n\tfunction handleClickSubmit(list) {\r\n\t\tdispatch(setStoreId(list.id)) // is this needed still?\r\n\t\tconst path = makeStorePathView(list.id)\r\n\t\thistory.push(path);\r\n\t}\r\n\r\n\tconst {\r\n\t\tgetTableProps,\r\n\t\tgetTableBodyProps,\r\n\t\theaderGroups,\r\n\t\trows,\r\n\t\tprepareRow,\r\n\t} = useTable(\r\n\t\t{\r\n\t\t\tcolumns,\r\n\t\t\tdata,\r\n\t\t},\r\n\t\tuseSortBy\r\n\t)\r\n\r\n\t// We don't want to render all 2000 rows for this example, so cap\r\n\t// it at 20 for this use case\r\n\tconst firstPageRows = rows.slice(0, 200)\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{headerGroups.map(headerGroup => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{headerGroup.headers.map(column => (\r\n\t\t\t\t\t\t\t\t// Add the sorting props to control sorting. For this example\r\n\t\t\t\t\t\t\t\t// we can add them into the header props\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{column.isSorted\r\n\t\t\t\t\t\t\t\t\t\t\t\t? column.isSortedDesc\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \r\n\t\t\t\t\t\t\t\t\t\t\t\t: }\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{column.render('Header')}\r\n\t\t\t\t\t\t\t\t\t\t\t{/* Add a sort direction indicator */}\r\n\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t))}\r\n\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\t{firstPageRows.map(\r\n\t\t\t\t\t\t(row, i) => {\r\n\t\t\t\t\t\t\tprepareRow(row);\r\n\t\t\t\t\t\t\tconst store = row.original\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{row.cells.map((cell, cellIndex) => {\r\n\t\t\t\t\t\t\t\t\t\tif (cell.column.id === \"storeName\") {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t{cell.render('Cell')} \r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (cell.column.id === \"openingDate\") {\r\n\t\t\t\t\t\t\t\t\t\t\t//console.log(moment(cell.value).year().toString())\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t{moment(cell.value).year().toString()} \r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (cell.column.id === \"totalScore\") {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatScore(cell.value)} \r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (cell.column.id === \"GHGEmissions\") {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatGhge(cell.value)} \r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (cell.column.id === \"reviewRequired\") {\r\n\t\t\t\t\t\t\t\t\t\t\tif (store.reviewRequired === 1) {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{cell.render('Cell')} \r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (cell.column.id === \"viewedit\") {\r\n\t\t\t\t\t\t\t\t\t\t\t//console.log(cell)\r\n\t\t\t\t\t\t\t\t\t\t\tif (AccessControl.storeCanEdit(user, store)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// user can edit\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t handleClickSubmit(store)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tEdit\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// user can't edit, view or review\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t handleClickSubmit(store)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{AccessControl.getButtonTextAllStoresPage(user, store)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t{cell.render('Cell')} \r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t)}\r\n\t\t\t\t \r\n\t\t\t
\r\n\t\t\t \r\n\t\t\t{/* Showing the first 200 results of {rows.length} rows
*/}\r\n\t\t>\r\n\t)\r\n}\r\n\r\nfunction ProjectsOverview(props) {\r\n\tconst [projectList, setProjectList] = useState([]);\r\n\tconst [csvProjects, setCsvProjects] = useState([]);\r\n\r\n\tconst user = useSelector((state) => state.user);\r\n\r\n\tuseEffect(() => {\r\n\t\tloadAllStores((stores) => {\r\n\t\t\tconsole.log(stores)\r\n\t\t\tsetProjectList(stores)\r\n\t\t\tsetCsvProjects(stores)\r\n\t\t})\r\n\t}, []);\r\n\r\n\r\n\t//Store Name, Year of opening, Country, Region,Status (Concept, As-built, Decommissioned), Type (Store, Counter), Score (0dp), GHG Emissions(0dp) and Review Status (Draft, Reviewed)\r\n\tconst columns = React.useMemo(\r\n\t\t() => [\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Store Name',\r\n\t\t\t\taccessor: 'storeName',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Year of Opening',\r\n\t\t\t\taccessor: 'openingDate',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Country',\r\n\t\t\t\taccessor: 'country',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Region',\r\n\t\t\t\taccessor: 'region',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Scorecard Type',\r\n\t\t\t\taccessor: 'scorecardType',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Location Type',\r\n\t\t\t\taccessor: 'locationType',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Circularity Score',\r\n\t\t\t\taccessor: 'totalScore',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'GHG Emissions (kgCO2e/sqm)',\r\n\t\t\t\taccessor: 'GHGEmissions',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Store Status',\r\n\t\t\t\taccessor: 'storeStatus',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Review Required',\r\n\t\t\t\taccessor: 'reviewRequired',\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tHeader: 'Actions',\r\n\t\t\t\taccessor: 'viewedit',\r\n\t\t\t},\r\n\t\t],\r\n\t\t[]\r\n\t)\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tDownload Projects List (CSV)\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t \r\n\t);\r\n}\r\n\r\nexport default ProjectsOverview;","import React, { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\n//import { useHistory } from 'react-router-dom';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Table from 'react-bootstrap/Table';\r\nimport './../index.css';\r\n\r\nfunction TableCertifications(props) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [certsList, setCertsList] = useState(null);\r\n\r\n\tvar parentPage = 1;\r\n\r\n\tuseEffect(() => {\r\n\t\taxios.get(`${backendUrl}/certifications`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconsole.log(response);\r\n\t\t\t\tsetCertsList(response.data)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t# \r\n\t\t\t\t\t\t\tecoLabel \r\n\t\t\t\t\t\t\tdescription \r\n\t\t\t\t\t\t\tmaterialCategory \r\n\t\t\t\t\t\t\tregion \r\n\t\t\t\t\t\t\tcountry \r\n\t\t\t\t\t\t\tvalue \r\n\t\t\t\t\t\t\tprompt \r\n\t\t\t\t\t\t\tlink \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{certsList ? (certsList.map((cert) => (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{cert.id} \r\n\t\t\t\t\t\t\t\t{cert.ecoLabel} \r\n\t\t\t\t\t\t\t\t{cert.description} \r\n\t\t\t\t\t\t\t\t{cert.materialCategory} \r\n\t\t\t\t\t\t\t\t{cert.region} \r\n\t\t\t\t\t\t\t\t{cert.country} \r\n\t\t\t\t\t\t\t\t{cert.value} \r\n\t\t\t\t\t\t\t\t{cert.prompt} \r\n\t\t\t\t\t\t\t\tLink \r\n\t\t\t\t\t\t\t\t{parentPage == 1 &&\r\n\t\t\t\t\t\t\t\t\tSelect this Certification \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t))) : \"\"}\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t \r\n\r\n\t);\r\n}\r\n\r\nexport default TableCertifications;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useSelector } from 'react-redux';\r\n//import { useHistory } from 'react-router-dom';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Form from 'react-bootstrap/Form';\r\nimport Dropdown from 'react-bootstrap/Dropdown';\r\nimport DropdownButton from 'react-bootstrap/DropdownButton';\r\nimport Header from \"./Header\";\r\nimport Table from 'react-bootstrap/Table';\r\nimport './../index.css';\r\n\r\nfunction TableGetAllStores(props) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst [storeList, setStoreList] = useState(null);\r\n\tconst storeId = useSelector((state) => state.storeId);\r\n\t//const storeId = 0;\r\n\r\n\tvar parentPage = 1;\r\n\r\n\tuseEffect(() => {\r\n\t\taxios.get(`${backendUrl}/stores/`)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconsole.log(response);\r\n\t\t\t\tsetStoreList(response.data)\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t# \r\n\t\t\t\t\t\t\tStore Name \r\n\t\t\t\t\t\t\tScorecard Type \r\n\t\t\t\t\t\t\tCountry \r\n\t\t\t\t\t\t\tRegion \r\n\t\t\t\t\t\t\tLocation Type \r\n\t\t\t\t\t\t\tTotal Score \r\n\t\t\t\t\t\t\tView \r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{storeList ? (storeList.map((store) => (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{store.id} \r\n\t\t\t\t\t\t\t\t{store.storeName} \r\n\t\t\t\t\t\t\t\t{store.scoreCardType} \r\n\t\t\t\t\t\t\t\t{store.country} \r\n\t\t\t\t\t\t\t\t{store.region} \r\n\t\t\t\t\t\t\t\t{store.locationType} \r\n\t\t\t\t\t\t\t\t{store.totalScore} \r\n\t\t\t\t\t\t\t\tView/Edit \r\n\t\t\t\t\t\t\t\t{parentPage == 1 &&\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t))) : \"\"}\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t \r\n\r\n\t);\r\n}\r\n\r\nexport default TableGetAllStores;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport axios from \"axios\";\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Form from 'react-bootstrap/Form';\r\nimport '../../index.css';\r\n\r\nfunction ProjectsNewMaterialModal(props) {\r\n\tconst [validated, setValidated] = useState(false);\r\n\r\n\tconst userId = useSelector((state) => state.userId);\r\n\tconst userLoggedIn = useSelector((state) => state.userLoggedIn);\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst storeId = useSelector((state) => state.storeId);\r\n\r\n\tconst storeIdRead = storeId;\r\n\r\n\tconst [lookups, setLookups] = useState(false);\r\n\tconst [lookupParent, setLookupParent] = useState(false);\r\n\tconst [lookupParents, setLookupParents] = useState([]);\r\n\tconst [lookupParentsSelected, setLookupParentsSelected] = useState([]);\r\n\r\n\t// const [epicDataList, setEpicDataList] = useState([]);\r\n\tconst [epicData, setEpicData] = useState([]);\r\n\tconst [epicCategoryList, setEpicCategoryList] = useState([]);\r\n\tconst [epicCategorySelected, setEpicCategorySelected] = useState([]);\r\n\tconst [epicTypeList, setEpicTypeList] = useState([]);\r\n\tconst [epicTypeSelected, setEpicTypeSelected] = useState([]);\r\n\tconst [epicMaterialList, setEpicMaterialList] = useState([]);\r\n\tconst [epicMaterialSelected, setEpicMaterialSelected] = useState([]);\r\n\tconst [epicUnitList, setEpicUnitList] = useState([]);\r\n\tconst [epicUnitSelected, setEpicUnitSelected] = useState([]);\r\n\r\n\tconst [useEffectCount, setUseEffectCount] = useState(1);\r\n\r\n\r\n\t\r\n\tuseEffect(() => {\r\n\t\t//setLookups({ ...storeDetailsState, [e.target.name]: inputValue });\r\n\t\tsetLookups(lookupTable);\r\n\r\n\t\tif (useEffectCount > 1) {\r\n\t\t\tresetMaterialsData();\r\n\t\t} else {\r\n\t\t\taxios.get(`${backendUrl}/epicMaterials`)\r\n\t\t\t.then(function (response) {\r\n\r\n console.log(response.data)\r\n\t\t\t\tsetEpicData(response.data)\r\n\t\t\t\tconsole.log(epicData)\r\n\t\t\t\t\r\n \r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tsetUseEffectCount(useEffectCount + 1)\r\n\r\n\t\tconsole.log(\"epicUnitList\")\r\n\t\tconsole.log(epicUnitList);\r\n\r\n\t}, [epicData]);\r\n\r\n\r\n\tconst lookupTable = [\r\n\t\t{ name: \"Flooring\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"Wall\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"Ceiling\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"Facade\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"POS\", parent: \"Module units\" },\r\n\t\t{ name: \"Product shelving\", parent: \"Module units\" },\r\n\t\t{ name: \"BOH\", parent: \"Module units\" },\r\n\t\t{ name: \"Basin\", parent: \"Module units\" },\r\n\t\t{ name: \"Furniture\", parent: \"Furniture & fittings\" },\r\n\t\t{ name: \"Lighting\", parent: \"Furniture & fittings\" },\r\n\t\t{ name: \"Fixtures\", parent: \"Furniture & fittings\" },\r\n\t]\r\n\r\n\r\n\tconst categories = [\r\n\t\t{ name: \"Core structure & finish\" },\r\n\t\t{ name: \"Module units\" },\r\n\t\t{ name: \"Furniture & fittings\" },\r\n\t]\r\n\r\n\tconst categoryLookup = [\r\n\t\t{ name: \"Flooring\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"Wall\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"Ceiling\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"Facade\", parent: \"Core structure & finish\" },\r\n\t\t{ name: \"POS\", parent: \"Module units\" },\r\n\t\t{ name: \"Product shelving\", parent: \"Module units\" },\r\n\t\t{ name: \"BOH\", parent: \"Module units\" },\r\n\t\t{ name: \"Basin\", parent: \"Module units\" },\r\n\t\t{ name: \"Furniture\", parent: \"Furniture & fittings\" },\r\n\t\t{ name: \"Lighting\", parent: \"Furniture & fittings\" },\r\n\t\t{ name: \"Fixtures\", parent: \"Furniture & fittings\" },\r\n\t]\r\n\r\n\tlet materialData = {\r\n\t\tmaterialTypeId: null,\r\n\t\tmaterialStatus: null,\r\n\t\tmaterialQuantity: null,\r\n\t\tfunctionalUnit : null,\r\n\t\tcreatedDate: null,\r\n\t\tsupplierLocation: null,\r\n\t\tmanufacturerLocation: null,\r\n\t\tsupplierName: null,\r\n\t\tmanufacturerName: null,\r\n\t\toriginId: null,\r\n\t\tstoreId: storeIdRead,\r\n\t\trawMaterial: null,\r\n\t\tendOfLifeAssessment: null,\r\n\t\tcategory: null,\r\n\t\tsubCategory: null,\r\n\t\titemType: null,\r\n\t\tproductCertification: null,\r\n\t\troadTransportKms: null,\r\n\t\trailTransportKms: null,\r\n\t\tairTransportKms: null,\r\n\t\toceanTransportKms: null,\r\n\t\tmaterialDescription: null,\r\n\t\tcreatorId: parseInt(userId),\r\n\t\tprimaryTransportMethod: null\r\n\t}\r\n\r\n\tconst resetMaterialsData = (e) => {\r\n\t\t//set epic category list\r\n\t\tvar tempCatList = [...new Set(epicData.map(item => item.category))]\r\n\t\t//setEpicCategoryList([...new Set(epicData.map(item => item.category))])\r\n\t\tsetEpicCategoryList(tempCatList)\r\n\r\n\t\tconsole.log(\"epicCategoryList\")\r\n\t\tconsole.log(epicCategoryList);\r\n\r\n\t\t//set epic type list\r\n\t\tvar tempTypeList = [...new Set(epicData.map(item => item.type))]\r\n\t\t//setEpicCategoryList([...new Set(epicData.map(item => item.category))])\r\n\t\tsetEpicTypeList(tempTypeList)\r\n\r\n\t\tconsole.log(\"epicTypeList\")\r\n\t\tconsole.log(epicTypeList);\r\n\r\n\t\t//set epic type list\r\n\t\tvar tempMaterialList = [...new Set(epicData.map(item => item.material))]\r\n\t\t//setEpicCategoryList([...new Set(epicData.map(item => item.category))])\r\n\t\tsetEpicMaterialList(tempMaterialList)\r\n\r\n\t\tconsole.log(\"epicMaterialList\")\r\n\t\tconsole.log(epicMaterialList);\r\n\r\n\t\t//set epic type list\r\n\t\tvar tempUnitList = [...new Set(epicData.map(item => item.functionalUnit))]\r\n\t\t//setEpicCategoryList([...new Set(epicData.map(item => item.category))])\r\n\t\tsetEpicUnitList(tempUnitList)\r\n\t}\r\n\r\n\tconst filterCategory = (event) => {\r\n\t\tconsole.log(\"epicCategory selection\");\r\n\t\tconsole.log([event]);\r\n\r\n\t\tif (event === \"allItems\") {\r\n\t\t\tconsole.log(\"all everything\");\r\n\t\t\tsetEpicCategorySelected(event);\r\n\t\t\tsetEpicTypeSelected(null);\r\n\t\t\tsetEpicMaterialSelected(null);\r\n\t\t\tsetEpicUnitSelected(null);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t//filter type list from category\r\n\t\t\tvar checkTypes = epicData.filter((item) => item.category === event).map(data => data);\r\n\t\t\tconsole.log(\"checkTypes\")\r\n\t\t\tconsole.log(checkTypes)\r\n\t\t\t//console.log(categoryLookup.filter((category) => category.name === e.target.value).map(data => data));\r\n\r\n\t\t\t//filter types\r\n\t\t\tvar tempTypeList = [...new Set(checkTypes.map(item => item.type))];\r\n\t\t\tconsole.log(tempTypeList);\r\n\t\t\t//setEpicCategoryList([...new Set(epicData.map(item => item.category))])\r\n\t\t\tsetEpicTypeList(tempTypeList)\r\n\r\n\t\t\tconsole.log(\"epicTypeList\");\r\n\t\t\tconsole.log(epicTypeList);\r\n\r\n\t\t\t//filter materials\r\n\t\t\tvar checkMaterials = epicData.filter((item) => item.category === event).map(data => data);\r\n\t\t\tconsole.log(\"checkMaterials\")\r\n\t\t\tconsole.log(checkMaterials)\r\n\t\t\tvar tempMaterialList = [...new Set(checkTypes.map(item => item.material))];\r\n\r\n\t\t\t//setEpicCategoryList([...new Set(epicData.map(item => item.category))])\r\n\t\t\tsetEpicMaterialList(tempMaterialList);\r\n\r\n\t\t\tconsole.log(\"epicMaterialList\");\r\n\t\t\tconsole.log(epicMaterialList);\r\n\r\n\t\t\tsetEpicCategorySelected(event);\r\n\t\t\tsetEpicTypeSelected(null);\r\n\t\t\tsetEpicMaterialSelected(null);\r\n\t\t\tsetEpicUnitSelected(null);\r\n\t\t}\r\n\t}\r\n\r\n\tconst filterType = (event) => {\r\n\t\tconsole.log(\"epicType selection\");\r\n\t\tconsole.log([event]);\r\n\r\n\t\t//filter type list from category\r\n\t\tvar checkMaterials = epicData.filter((item) => item.type === event).map(data => data);\r\n\t\tconsole.log(\"checkMaterials\")\r\n\t\tconsole.log(checkMaterials)\r\n\t\t//console.log(categoryLookup.filter((category) => category.name === e.target.value).map(data => data));\r\n\r\n\t\t//filter types\r\n\t\tvar tempMaterialList = [...new Set(checkMaterials.map(item => item.material))];\r\n\t\tconsole.log(tempMaterialList);\r\n\t\t//setEpicCategoryList([...new Set(epicData.map(item => item.category))])\r\n\t\tsetEpicMaterialList(tempMaterialList)\r\n\r\n\t\tconsole.log(\"epicMaterialList\")\r\n\t\tconsole.log(epicMaterialList);\r\n\r\n\t\tsetEpicTypeSelected(event);\r\n\t\tsetEpicMaterialSelected(null);\r\n\t\tsetEpicUnitSelected(null);\r\n\t}\r\n\r\n\tconst filterMaterials = (event) => {\r\n\t\tconsole.log(\"epicMaterial selection\");\r\n\t\tconsole.log([event]);\r\n\r\n\r\n\t\t//filter material item from list\r\n\t\tvar checkMaterial = epicData.filter((item) => item.material === event).map(data => data);\r\n\r\n\t\tconsole.log(\"checkMaterial\")\r\n\t\tconsole.log(checkMaterial)\r\n\t\t//console.log(categoryLookup.filter((category) => category.name === e.target.value).map(data => data));\r\n\r\n\t\t//filter units\r\n\t\tvar tempUnitList = [...new Set(checkMaterial.map(item => item.functionalUnit))];\r\n\t\tconsole.log(tempUnitList);\r\n\t\tsetEpicUnitList(tempUnitList);\r\n\r\n\t\tconsole.log(\"epicUnitList\")\r\n\t\tconsole.log(epicUnitList);\r\n\r\n\t\tsetEpicMaterialSelected(event);\r\n\t\tsetEpicCategorySelected(checkMaterial[0].category);\r\n\t\tsetEpicTypeSelected(checkMaterial[0].type);\r\n\t\tsetEpicUnitSelected(checkMaterial[0].functionalUnit);\r\n\t}\r\n\r\n\tconst materialsLookups = (e) => {\r\n\t\tvar inputName = [e.target.name];\r\n\t\tconsole.log(epicCategoryList)\r\n\t\t//console.log(\"epicCategoryList\")\r\n\r\n\t\tif (e.target.id == \"epicCategory\") {\r\n\t\t\tfilterCategory(e.target.value);\r\n\t\t}\r\n\t\tif (e.target.id == \"epicType\") {\r\n\t\t\tfilterType(e.target.value)\r\n\t\t}\r\n\t\tif (e.target.id == \"epicMaterial\") {\r\n\t\t\tfilterMaterials(e.target.value)\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tconst onChange = (e) => {\r\n\t\tconsole.log(lookups);\r\n\t\t//var inputName;\r\n\t\tvar inputValue;\r\n\t\tvar inputName = [e.target.name];\r\n\t\tinputValue = e.target.value;\r\n\t\tif (e.target.type == \"number\") {\r\n\t\t\tinputValue = parseInt(e.target.value);\r\n\t\t\tconsole.log(inputValue)\r\n\t\t}\r\n\t\tif (e.target.type == \"checkbox\") {\r\n\t\t\tconsole.log(e.target.type);\r\n\t\t\tconsole.log(e.target.checked);\r\n\t\t\tinputValue = e.target.checked;\r\n\t\t\tconsole.log(inputValue)\r\n\t\t}\r\n\t\tif (e.target.type == \"select\") {\r\n\t\t\tconsole.log(e.target.type);\r\n\t\t\te.target.id = e.target.id;\r\n\t\t}\r\n\t\tif (e.target.id == \"architectId\") {\r\n\t\t\tconsole.log(\"i am archId\");\r\n\t\t\tinputValue = parseInt(e.target.value);\r\n\t\t\tconsole.log(inputValue)\r\n\t\t}\r\n\r\n\t\tvar checks = categoryLookup.filter((category) => category.name === e.target.value).map(data => data);\r\n\t\tconsole.log(categoryLookup.filter((category) => category.name === e.target.value).map(data => data));\r\n\t\t//setLookupParent(checks[0].parent)\r\n\r\n\t\tconsole.log(lookupParent);\r\n\t\tconsole.log(\"lookupParent\");\r\n\r\n\t\tconsole.log(\"setting\");\r\n\t\tconsole.log([...new Set(categoryLookup.map(item => item.parent))]);\r\n\t\t//console.log([...new Set(categoryLookup.map(item => item.parent))]);\r\n\r\n\t\tsetLookupParents([...new Set(categoryLookup.map(item => item.parent))])\r\n\t\tsetLookupParentsSelected(checks[0].parent)\r\n\t\tconsole.log(lookupParentsSelected)\r\n\t}\r\n\r\n\tconst saveMaterialData = () => {\r\n\t\tconsole.log(saveMaterialData);\r\n\t\taxios.post(`${backendUrl}/materialInstance`, materialData)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\tconsole.log(response);\r\n\t\t\t\tprops.onHide();\r\n\t\t\t})\r\n\t\t\t.catch(function (error) {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t})\r\n\t\t\t.finally(function () {\r\n\t\t\t\t//props.onHide();\r\n\t\t\t})\r\n\t}\r\n\r\n\tconst handleSubmit = (event) => {\r\n\t\tconst form = event.currentTarget;\r\n\t\tif (form.checkValidity() === false) {\r\n\t\t\tconsole.log(\"false\");\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t\telse if (form.checkValidity() === true) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\tconsole.log(\"true\");\r\n\t\t\tsaveMaterialData();\r\n\t\t}\r\n\r\n\t\tsetValidated(true);\r\n\t};\r\n\r\n\tconsole.log(materialData);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tCategory lookup\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tselect \r\n\t\t\t\t\t\t{lookupParents.map(item => {\r\n\t\t\t\t\t\t\treturn item === lookupParentsSelected ?\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)}\r\n\r\n\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tCategory lookup\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPlease Select \r\n\r\n\t\t\t\t\t\t{categoryLookup.map((m) => (\r\n\t\t\t\t\t\t\t{m.name} \r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tepicCategory\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\tAll items \r\n\t\t\t\t\t\t{epicCategoryList.map(item => {\r\n\t\t\t\t\t\t\treturn item === epicCategorySelected ?\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\tepicType\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t{epicTypeList.map(item => {\r\n\t\t\t\t\t\t\treturn item === epicTypeSelected ?\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t \r\n\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tepicMaterial\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPlease Select \r\n\t\t\t\t\t\t{epicMaterialList.map(item => {\r\n\t\t\t\t\t\t\treturn item === epicMaterialSelected ?\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t \r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tquantity\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tepicUnits\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{epicUnitList.map(item => {\r\n\t\t\t\t\t\t\treturn item === epicUnitSelected ?\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t{item} \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\r\n\t\t\t \r\n\r\n\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t Add material\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tCancel\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t\t \r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default ProjectsNewMaterialModal;","import React, { useEffect, useState } from \"react\";\r\nimport { Link } from 'react-router-dom'\r\nimport { history } from \"../helpers\";\r\n\r\nimport Container from 'react-bootstrap/Container';\r\nimport Row from 'react-bootstrap/Row';\r\nimport Col from 'react-bootstrap/Col';\r\n\r\nexport const PageNotFound = () => {\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\tPage Not Found
\r\n\t\t\t\t\t Back to Home page
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t \r\n\t)\r\n}\r\n","import React, { useEffect, useState } from \"react\"\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { updateStoreLifecycleModalInfo } from \"./StoreNavBar\"\r\nimport { Button, Container, Form, Row } from \"react-bootstrap\"\r\nimport { loadUsers } from \"./AdminUsersPage\"\r\nimport { UserRole } from \"../AccessControl\"\r\n\r\nexport const StoreLifecycleModal = ({ show, info, store }) => {\r\n\r\n\tconst [users, setUsers] = useState([])\r\n\tconst [creatorId, setCreatorId] = useState(store && store.creatorId)\r\n\r\n\tconst dispatch = useDispatch()\r\n\r\n\tuseEffect(() => {\r\n loadUsers(users => setUsers(users.filter(u => u.role === UserRole.Designer)))\r\n }, [])\r\n\t\r\n\tconst onHide = () => {\r\n\t\tdispatch(updateStoreLifecycleModalInfo(false))\r\n\t}\r\n\r\n\tconst onButtonClick = (action) => {\r\n\t\tif (action === \"CANCEL\") {\r\n\t\t\tonHide()\r\n\t\t} else if (action === \"OK\") {\r\n\t\t\tonHide()\r\n\t\t\tinfo.onOk && info.onOk(creatorId)\r\n\t\t}\r\n\t}\r\n\r\n\tif (show === false) {\r\n\t\treturn null\r\n\t}\r\n\r\n\tconst handleStoreCreatorChange = (e, store) => {\r\n const userId = e.target.value\r\n setCreatorId(userId)\r\n }\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{info.title} \r\n\t\t\t \r\n\t\t\t\r\n\r\n\t\t\t\t{info.textLines.map((line, i) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t{line}
\r\n\t\t\t\t\t)\r\n\t\t\t\t})}\r\n\r\n\t\t\t\tNew Designer: \r\n\t\t\t\t handleStoreCreatorChange(e, store)}>\r\n\t\t\t\t\tSelect a user \r\n\t\t\t\t\t{users.map(u => (\r\n\t\t\t\t\t\t{u.displayName} \r\n\t\t\t\t\t))}\r\n\t\t\t\t \r\n\r\n\t\t\t \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t onButtonClick(\"CANCEL\")}\r\n\t\t\t\t\t\t\tclassName=\"pe-2 w-50\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{info.buttonTitleCancel}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t onButtonClick(\"OK\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{info.buttonTitleOk}\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t
\r\n\t\t\t\t \r\n\t\t\t \r\n\r\n\r\n\t\t \r\n\t)\r\n}","import React, { useEffect, useState } from \"react\"\r\nimport { useSelector } from 'react-redux'\r\nimport { useParams, useHistory, useLocation, useRouteMatch } from 'react-router-dom'\r\nimport { CSVLink, CSVDownload } from \"react-csv\";\r\nimport Nav from 'react-bootstrap/Nav'\r\nimport NavDropdown from 'react-bootstrap/NavDropdown'\r\nimport { Store, loadStore, updateStore } from './AdminStoresPage'\r\nimport { AccessControl } from \"../AccessControl\"\r\nimport { config } from \"../config\"\r\nimport ProjectsAddProjectCommentModal from \"./ProjectsAddProjectCommentModal\"\r\nimport Container from 'react-bootstrap/Container'\r\nimport Row from 'react-bootstrap/Row'\r\nimport Col from 'react-bootstrap/Col'\r\nimport Header from \"./Header\"\r\nimport Spinner from 'react-bootstrap/Spinner'\r\nimport { StoreNavBar } from \"./StoreNavBar\"\r\nimport ProjectSummaryPage from './ProjectSummaryPage'\r\nimport ProjectCreateNew from \"./ProjectCreateNew\"\r\nimport ProjectsAddMaterial from \"./ProjectsAddMaterial\"\r\nimport ProjectReviewPage from \"./ProjectReviewPage\"\r\nimport ProjectPhasePage from \"./ProjectPhasePage\"\r\nimport { StoreLifecycleModal } from \"./StoreLifecycleModal\"\r\nimport { getMaterialInstancesForStore } from \"./AdminMaterialsPage\"\r\n\r\n/** A container component to render the store navbar and child pages (tab content) */\r\nexport const StoreContainerPage = () => {\r\n\r\n\tconst { storeId } = useParams()\r\n\tconst [store, setStore] = useState(undefined)\r\n\tconst [pageName, setPageName] = useState(\"view\")\r\n\r\n\tconst [csvProject, setCsvProject] = useState([])\r\n\tconst [projectFileName, setProjectFilename] = useState(null)\r\n\r\n\tconst [csvMaterialsCurrent, setCsvMaterialsCurrent] = useState([])\r\n\tconst [csvMaterialsAll, setCsvMaterialsAll] = useState([])\r\n\r\n\tconst user = useSelector((state) => state.user)\r\n\tconst storeLifecycleModalInfo = useSelector((state) => state.storeLifecycleModalInfo)\r\n\tconst history = useHistory()\r\n\tconst [selectProjectCommentModal, setSelectProjectCommentModal] = useState(false)\r\n\r\n\tconst location = useLocation()\r\n\tconst routeMatch = useRouteMatch(\"/stores/:storeId\")\r\n\r\n\tuseEffect(() => {\r\n\t\t// console.log('StoreContainerPage.useEffect storeId')\r\n\t\tloadStore(storeId, store => {\r\n\t\t\tsetStore(store)\r\n\r\n\t\t\t//parse data into CSV\r\n\t\t\tsetProjectFilename(store.storeName)\r\n\t\t\tvar tempString = JSON.stringify(store)\r\n\r\n\t\t\tvar tempReparsed = \"[\" + tempString + \"]\"\r\n\r\n\t\t\t// console.log(JSON.parse(tempReparsed))\r\n\t\t\tsetCsvProject(JSON.parse(tempReparsed))\r\n\r\n\t\t\tgetMaterialInstancesForStore(storeId, \"\", setCsvMaterialsCurrent)\r\n\t\t\tgetMaterialInstancesForStore(storeId, \"ALL\", setCsvMaterialsAll)\r\n\t\t})\r\n\t}, [ storeId ])\r\n\r\n\tuseEffect(() => {\r\n\t\t// console.log('StoreContainerPage.useEffect pageName')\r\n\t\t// console.log(\"location\", location)\r\n\t\tconst parts = location.pathname.split('/')\r\n\t\tconst pageNameNew = parts[parts.length - 1]\r\n\t\tsetPageName(pageNameNew)\r\n\t\t// console.log('pageNameNew', pageNameNew)\r\n\t}, [ location ])\r\n\r\n\tconst renderPage = () => {\r\n\t\tif (pageName === 'view') {\r\n\t\t\treturn \r\n\t\t} else if (pageName === 'edit') {\r\n\t\t\treturn \r\n\t\t} else if (pageName === 'materials') {\r\n\t\t\treturn \r\n\t\t} else if (pageName === 'review') {\r\n\t\t\treturn \r\n\t\t} else if (pageName === 'lifecycle') {\r\n\t\t\treturn \r\n\t\t}\r\n\t}\r\n\r\n\tconst getContent = () => {\r\n\r\n\t\tif (!store) {\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
Loading
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t)\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<>\r\n\t\t\t\t\t{store.storeName} \r\n\t\t\t\t\t \r\n\t\t\t\t\t{renderPage()}\r\n\t\t\t\t>\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t \r\n\t\t\t\r\n\t\t\t{getContent()}\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t{/* Download using the store navbar dropdown instead */}\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\tDownload Project Data (CSV)\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t \r\n\t\t\t\t\t{csvMaterialsCurrent && Object.keys(csvMaterialsCurrent).length &&\r\n\t\t\t\t\t\t//don't show material download if materials list is null\r\n\t\t\t\t\t\t//check function for 0 output on render\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDownload Material Data - Current (CSV)\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\r\n\t\t\t\t \r\n\t\t\t\t\t{csvMaterialsAll && Object.keys(csvMaterialsAll).length &&\r\n\t\t\t\t\t\t//don't show material download if materials list is null\r\n\t\t\t\t\t\t//check function for 0 output on render\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDownload Material Data - All (CSV)\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t \r\n\t)\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport { Router, Switch, Route } from \"react-router-dom\";\r\nimport Container from 'react-bootstrap/Container';\r\nimport { history } from \"../helpers\";\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { setBackendUrl } from '../store/actions';\r\nimport { config } from \"../config\"\r\nimport HomePage from \"./HomePage\";\r\nimport UserOverview from \"./UserOverview\";\r\nimport ProjectCreateNew from \"./ProjectCreateNew\";\r\nimport ProjectsAddMaterial from \"./ProjectsAddMaterial\";\r\nimport ProjectReviewPage from \"./ProjectReviewPage\";\r\nimport AllProjectsPage from \"./AllProjectsPage\";\r\nimport ProjectSummaryPage from \"./ProjectSummaryPage\";\r\nimport TableCertifications from './TableCertifications';\r\nimport TableGetMaterialsByStore from './TableGetMaterialsByStore';\r\nimport TableGetAllStores from './TableGetAllStores';\r\nimport DynamicForm from './tests/dynamicForm-useEffectLock';\r\nimport { AdminStoresPage } from './AdminStoresPage'\r\nimport { AdminMaterialsPage } from './AdminMaterialsPage'\r\nimport { AdminCalcsPage } from './AdminCalcsPage'\r\nimport { AdminUsersPage } from './AdminUsersPage'\r\nimport { PageNotFound } from './PageNotFound'\r\nimport { StoreContainerPage } from './StoreContainerPage'\r\nimport LoginForm from './Login'\r\n\r\nconst App = (props) => {\r\n\r\n\tconst userId = useSelector((state) => state.userId)\r\n\r\n\tconst dispatch = useDispatch();\r\n\tdispatch(setBackendUrl(config.backendUrl));\r\n\r\n\tconst [title, setTitle] = useState(\"Aesop | Artemis | Sustainability Scorecard\");\r\n\r\n\tuseEffect(() => {\r\n\t\t// This will run when the page first loads and whenever the title changes\r\n\t\tdocument.title = title;\r\n\t}, [title]);\r\n\r\n\t// const changeTitle = (event) => {\r\n\t// \tsetTitle(event.target.value);\r\n\t// };\r\n\r\n\tif (!userId) {\r\n\t\treturn \r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t{/* Dev route: */}\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t{/* New routes for actual routing */}\r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t\t \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t \r\n\t\t \r\n\t);\r\n};\r\n\r\nexport default App;\r\n","const reportWebVitals = onPerfEntry => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import { configureStore, createReducer } from '@reduxjs/toolkit';\r\nimport logger from \"redux-logger\";\r\n\r\nimport {\r\n setUser,\r\n setStoreId,\r\n setMaterialId,\r\n setBackendUrl,\r\n setUserDisplayName,\r\n setUserId,\r\n setUserLoggedIn,\r\n setEditMode,\r\n setStoreLifecycleModalInfo,\r\n} from './actions';\r\n\r\nconst initialState = {\r\n user: null,\r\n storeId: null,\r\n materialId: null,\r\n backendUrl: \"\",\r\n editMode: false,\r\n\r\n userDisplayName: \"\",\r\n userId: 0,\r\n userLoggedIn: \"\",\r\n\r\n storeLifecycleModalInfo: {\r\n show: false,\r\n title: \"Title\",\r\n textLines: [\"aaa\", \"bbb\"],\r\n buttonTitleOk: \"Ok\",\r\n buttonTitleCancel: \"Cancel\",\r\n }\r\n\r\n};\r\n\r\nconst reducer = createReducer(initialState, (builder) => {\r\n builder\r\n .addCase(setUserDisplayName, (state, action) => {\r\n state.userDisplayName = action.payload;\r\n })\r\n .addCase(setUserId, (state, action) => {\r\n state.userId = action.payload;\r\n })\r\n .addCase(setUserLoggedIn, (state, action) => {\r\n state.userLoggedIn = action.payload;\r\n })\r\n .addCase(setUser, (state, action) => {\r\n state.user = action.payload;\r\n })\r\n .addCase(setStoreId, (state, action) => {\r\n state.storeId = action.payload;\r\n })\r\n .addCase(setEditMode, (state, action) => {\r\n state.editMode = action.payload;\r\n })\r\n .addCase(setMaterialId, (state, action) => {\r\n state.materialId = action.payload;\r\n })\r\n .addCase(setBackendUrl, (state, action) => {\r\n state.backendUrl = action.payload;\r\n })\r\n .addCase(setStoreLifecycleModalInfo, (state, action) => {\r\n state.storeLifecycleModalInfo = action.payload;\r\n })\r\n});\r\n\r\nconst store = configureStore({\r\n reducer,\r\n middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(logger),\r\n});\r\n\r\nexport default store;","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./index.css\";\r\nimport App from \"./components/App\";\r\nimport reportWebVitals from \"./reportWebVitals\";\r\nimport store from \"./store\";\r\nimport { Provider } from \"react-redux\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n\r\n"],"sourceRoot":""}