{"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","undefined","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","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","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","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","DesignerIdAsBuilt","DesignerIdDecom","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","onChangeFromModal","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","TreemapController","TreemapElement","sampleData","getColour","ctx","treeData","raw","v","dataLabel","getLabel","treeValue","dataset","dataIndex","_data","_idx","ExampleChart","canvas","useRef","current","getContext","chart","tree","groups","spacing","callbacks","destroy","ref","OverviewTreemapChart","setTreeData","setOptions","tempMaterials","rawMaterialCounters","treeObject","retm","reum","recm","prpvg","vgm","renderMaterialScores","UserOverview","materialsLow","setMaterialsLow","materialsHigh","setMaterialsHigh","setUserMaterials","userScoreAverage","setUserScoreAverage","userScoreHigh","setUserScoreHigh","userGHGAverage","setUserGHGAverage","tempHigh","highestRatedMaterials","tempLow","lowestRatedMaterials","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","renderAdminFields","selected","renderForm","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","SortTable","columns","list","_useTable","useTable","useSortBy","getTableProps","getTableBodyProps","headerGroups","prepareRow","firstPageRows","slice","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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A,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,CAAE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","file":"static/js/main.9f806a3f.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.8\",\r\n\t\r\n\tisDebugMode: false,\r\n\tbackendUrl: \"https://arup-aesop-backend-dev.azurewebsites.net\",\r\n\t// backendUrl: \"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\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
Sourcing
\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\t
  • The manufacturer offers second life programs or a recycling program
  • \r\n\t\t\t\t\t\t\t\t\t\t\t
  • The 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\t
Raw 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\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\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\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\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\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\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\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\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\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
Material gradeDescription
Virgin GradeRefers to items that are new
Part Recycled, part virgin gradeRefer 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
Recycled MaterialRefers to items that are made of 100% recycled material e.g. aluminium
Reused MaterialRefers to material/items that have been reclaimed from other locations e.g. timber
Recycled MaterialRefers 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
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
Circularity
\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\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\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\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\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\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\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\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\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\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\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\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
Material gradeDescription
Not RecyclableThe item is unable to be reused, repurposed or recycled
Part RecyclableThe item can be partially recycled and partially discarded
Fully RecyclableThe item can be recycled as a whole. This may include an item that is disassembled/separated with all components sent for recycling
Able to be reused/repurposedThe item is reused or repurposed into another Aesop location (stores, counters or offices)
Recycling ProgramThe item can be provided to a recycling program and remade into a new product
Takeback SchemeThe 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
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
Certifications
\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\t
Scorecard 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\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\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\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\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\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\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
RatingRange
Low Rating0-49
Medium Rating50-69
High Rating70+
\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\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 if (!matInst.embodiedGHGE) {\r\n\t\treturn {\r\n\t\t\tvalue: undefined,\r\n\t\t\tformatted: \"\",\r\n\t\t\tdisplay: `Unknown kgCO2e`,\r\n\t\t\tcalcInfo: \"Embodied GHGE info missing in DB for this material\"\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\t\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\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\t\r\n\t\t\t\t\t\t\t\t{categories.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t\t{subCategories.map((m) => (\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{/* 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\r\n\t\t\t\t\t\t\t\t{filteredMaterialDataList.map((m) => (\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\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\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\t\r\n\t\t\t\t\t\t\t\t{rawMaterial.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t\t{endOfLifeAssessment.map((m) => (\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\t
Product 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\t\r\n\t\t\t\t\t\t\t\t{certification.map((m) => (\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\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\t
Sourcing 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\t\r\n\t\t\t\t\t\t\t\t{location.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t\t{location.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t\t{primaryTransport.map((m) => (\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\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\r\n\t\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\t\r\n\t\t\t\t\t\t\t\t{subCategories.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t\t{filteredItemTypes.map((m) => (\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{/* 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\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\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 handleActionClick(mat, \"EDIT\")}>Edit\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\t

Materials

\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\t\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\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\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{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\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{/* */}\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\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
#NameCategoryTypeActiveSourceActions
{index + 1}{mat.material}{mat.category}{mat.type}{mat.isActive ? \"Yes\" : \"No\"}{mat.dataSource}{renderMaterialRowActions(mat)}
\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\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\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\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\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\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\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\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\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{/* {AccessControl.isReviewer(user) &&\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\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\r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t\r\n\t\t\t\t
Store name{storeDetails.storeName}Region{storeDetails.region}
Scorecard Type{Store.getScorecardTypeTitle(storeDetails.scorecardType)}Country{storeDetails.country}
Location Type{storeDetails.locationType}Total Sqm{storeDetails.totalSqm}
Street Address{storeDetails.streetAddress}City{storeDetails.city}
ROIC CAPEX{storeDetails.currency} {storeDetails.roicCapex}Retail Sqm{storeDetails.retailSqm}
Architect{archEmail}Project Manager{pmEmail}
StatusReview requiredClick here to review this project
Review Comment{storeDetails.reviewComment}
\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\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\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\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\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
Global average{formatScore(globalAverage)}Regional average{formatScore(regionalAverage)}
Designer average{formatScore(designerAverage)}Store Circularity Score{projectScore}{formatScore(projectScoreProp)}
\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\t// console.log(\"negative\");\r\n\t\t// console.log(percentage);\r\n\t\tpercentage = (percentage * - 1)\r\n\t\t// console.log(percentage);\r\n\t\trotateNegative = 360 - (((percentage)/100) * 360)\r\n\t\t// console.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\t// console.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 \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {calcParamList.map((calcParam, index) =>\r\n (\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n {/* */}\r\n \r\n {/* */}\r\n {/* */}\r\n \r\n )\r\n )\r\n }\r\n \r\n
#NameDescriptionDefault ValueCurrent ValueNew ValueActions
{index + 1}\r\n {calcParam.name}\r\n
\r\n {calcParam.description}\r\n
{calcParam.description}\r\n {calcParam.defaultValue}\r\n
\r\n {calcParam.units}\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
{renderMaterialRowActions(mat)}\r\n {calcParam.currentValue !== calcParamsNewValue[calcParam.id] ?\r\n (\r\n onClickSavedCalcParamValue(calcParam, e)}>Save\r\n )\r\n : undefined}\r\n {calcParam.currentValue}{calcParamsNewValue[calcParam.id]}
\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\t// console.log(\"got calc scales\");\r\n\r\n\t\t\t// console.log(\"ghgValue\")\r\n\t\t\t// console.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\t// console.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\t// console.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\t// console.log(scaleColour)\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// console.log(\"no colour set\")\r\n\t\t\t\t// console.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\t// console.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\t
GHG 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\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\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\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\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\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\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
Item Type{m.itemType}Description{m.materialDescription}
Category{m.category}Sub-category{m.subCategory}
Certification{m.productCertification}Total Score{m.totalScore}
\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\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\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\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\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
CommentAuthorDate
{m.content}{getAuthor(m.reviewerId)}{dayjs(`${m.commentDate}`).format('HH:mm:ss YYYY-MM-DD')}
\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\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 =\r\n\t\t\t\tmaterialsList\r\n\t\t\t\t\t.map(calcTotalGhge)\r\n\t\t\t\t\t.map(g => g.value)\r\n\t\t\t\t\t.filter(g => !!g)\r\n\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\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\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\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\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\tconst totGhgeInfo = material ? calcTotalGhge(material) : {}\r\n\r\n\t\t\t\t\t\treturn (\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\t\r\n\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t{/* GHGE */}\r\n\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t{/* Quantity */}\r\n\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t{/* Score */}\r\n\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t{/* Actions */}\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
NameDescriptionCategoryCertificationEmbodied GHGE
(kgCO2e)
QuantityScoreActions
{material.itemType}{renderScorecardType(material.scorecardType)}{material.materialDescription}{material.subCategory}{material.productCertification}\r\n\t\t\t\t\t\t\t\t\t{totGhgeInfo.formatted}\r\n\t\t\t\t\t\t\t\t{formatGhge(material.materialQuantity)} {formatUnitForDisplay(material.unit)} scaleValues.low && material.totalScore < scaleValues.medium ? 'text-center ' + scaleColoursBG.medium : \"\"}\r\n\t\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\t{formatScore(material.totalScore)}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{AccessControl.materialInstanceCanComment(user) ? (\r\n\t\t\t\t\t\t\t\t\t\t handleClickSubmit(e, material.id)}>Comment\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t// {AccessControl.materialInstanceCanViewComments(user) &&\r\n\t\t\t\t\t\t\t\t\t\t handleClickSubmit(e, material.id)}>View\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\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\t// console.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\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\t\r\n\t\t\t\t\t\t{endOfLifeAssessment.map((m) => (\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{/* {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\t

Decommissioning 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\t

Decommissioning 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\t
Average 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\t
Average 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\t
Average 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\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\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{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\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{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
MaterialConcept\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\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
Relative ImprovementActions
{matInfo.itemType}{matInfo.endOfLifeAssessment[Store.ScorecardType.CONCEPT]}
\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\t

Average total score As-Built = {formatRelImprov(avgTotalScoreAsBuilt)}%

\r\n\t\t\t\t

Average total score Decommissioned = {formatRelImprov(avgTotalScoreDecom)}%

\r\n\t\t\t\t

Average 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\t

Store 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\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\r\n\t\t\t\t\t\t\t{config.isDebugMode && }\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\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\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)}\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
Scorecard TypeMaterialsEmbodied GHGEScoreActions
{sti.scorecardTypeTitle}{sti.materialInstanceCount}{formatGhge(sti.ghgeEmissions)} {sti.ghgeEmissions !== undefined ? kgCO2e : ''}{formatScore(sti.storeTotalScore)}\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
\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\t

Store Details

\r\n\t\t\t
\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t

Store Performance

\r\n\t\t\t
\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t

Circularity 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\t

Materials

\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 \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n {/* */}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {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 \r\n {store._objStatus === DbObjStatus.DB ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n {/* */}\r\n \r\n {/* */}\r\n {/* {store.reviewRequired ?\r\n :\r\n \r\n } */}\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
NameCreatorDesignerCountryRegionScorecardLocation TypeReview RequiredStatusGHGCircularity ScoreActions
{store.storeName}{userCreator && userCreator.displayName}\r\n handleStoreCreatorChange(e, store)}>\r\n \r\n {users.map(u => (\r\n \r\n ))}\r\n \r\n {userDesigner && userDesigner.displayName}{store.country}{store.region}{store.scorecardType}{store.locationType}{store.storeStatus}{formatGhge(store.GHGEmissions)}{formatScore(store.totalScore)}\r\n \r\n {storeStatusItems.map(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}","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 || Store.getCurrentDesignerId(store) === user.id\r\n\t\t// console.log('storeCanEdit', store.storeName, user.id, 'designer id =', Store.getCurrentDesignerId(store))\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 \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\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\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\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) : {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 onChangeFromModal = (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\r\n\t\t\t\t\t\t\tF‌ull N‌ame:\r\n\t\t\t\t\t\t\t onChangeFromModal(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\tEm‌ail‌ Add‌ress:\r\n\t\t\t\t\t\t\t onChangeFromModal(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\tRole:\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t onChangeFromModal(e, \"role\")}>\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\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\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\tPa‌ssw‌ord:\r\n\t\t\t\t\t\t\t\t onChangeFromModal(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\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\t

Users

\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\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\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
#NameEmailRoleActions
\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\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tAesop\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 setEmail(target.value)}\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\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\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\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\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\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\t// console.log(\"percentage check\")\r\n\t// console.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\t// console.log(\"percentage is low\")\r\n\t\tcolour = scaleColours.low;\r\n\t\t// console.log(colour)\r\n\t}\r\n\telse if (percentage > scaleValues.low && percentage < scaleValues.medium) {\r\n\t\tcolour = scaleColours.medium;\r\n\t\t// console.log(colour)\r\n\t}\r\n\telse if (percentage >= scaleValues.medium) {\r\n\t\tcolour = scaleColours.high;\r\n\t\t// console.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\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\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\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\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t

About 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\t

The 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\t

The scorecard produces two sustainability ratings.

\r\n\t\t\t\t\t\t

The 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\t
  • Raw Materials type
  • \r\n\t\t\t\t\t\t\t
  • Sourcing distance
  • \r\n\t\t\t\t\t\t\t
  • End of life scenario
  • \r\n\t\t\t\t\t\t\t
  • Certifications
  • \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t

The 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\t
  • Type of material
  • \r\n\t\t\t\t\t\t\t
  • Transportation mode and distance
  • \r\n\t\t\t\t\t\t\t
  • Quantity used
  • \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t

This 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\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{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\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
No. storesAverage score
{m.name}{m.noStores}{formatScore(m.averageScore)}
\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\t
Top 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\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{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\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
NameDesigner Score
{user.designer}{formatScore(user.averageScore)}
\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\t
Stores
\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\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\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
NameStore Score
{store.storeName}{formatScore(store.totalScore)}
\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\t//setMaterialCountTotal(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\nconst sampleData = [\r\n\t{ label: \"Sample-Retained\", value: 0, colour: scaleColoursFive[0] },\r\n\t{ label: \"Sample-Reused\", value: 0, colour: scaleColoursFive[1] },\r\n\t{ label: \"Sample-Recycled\", value: 0, colour: scaleColoursFive[2] },\r\n\t{ label: \"Sample-Part recycled-Part virgin\", value: 0, colour: scaleColoursFive[3] },\r\n\t{ label: \"Sample-Virgin Grade\", value: 0, colour: scaleColoursFive[4] }\r\n]\r\n\r\nconst getColour = (ctx, treeData) => {\r\n\tif (ctx.type !== 'data') {\r\n\t\treturn 'transparent';\r\n\t}\r\n\tconst value = ctx.raw.v;\r\n\tconst dataLabel = ctx.raw.g;\r\n\r\n\tvar findLabel = treeData.filter((data) => data.label.includes(dataLabel));\r\n\tvar labelColour = findLabel[0].colour;\r\n\r\n\treturn labelColour\r\n}\r\n\r\nconst getLabel = (ctx, treeData) => {\r\n\tconst treeValue = ctx.raw.v;\r\n\tvar treeIndex = ctx.dataset.data[ctx.dataIndex]._data._idx;\r\n\tvar treeLabel = treeData[treeIndex].label;\r\n\r\n\treturn treeLabel + \" : \" + treeValue\r\n}\r\n\r\nconst ExampleChart = ({ treeData, options }) => {\r\n\tconst canvas = useRef(null);\r\n\tuseEffect(() => {\r\n\t\t//console.log('useEffect example chart')\r\n\t\tconst ctx = canvas.current.getContext('2d');\r\n\t\tconst chart = new ChartJS(ctx, {\r\n\t\t\ttype: 'treemap',\r\n\t\t\tdata: {\r\n\t\t\t\tdatasets: [{\r\n\t\t\t\t\ttree: treeData,\r\n\t\t\t\t\tkey: 'value',\r\n\t\t\t\t\tgroups: ['label'],\r\n\t\t\t\t\tlabels: {\r\n\t\t\t\t\t\tdisplay: false,\r\n\t\t\t\t\t\tformatter: (ctx) => ctx.raw.g\r\n\t\t\t\t\t},\r\n\t\t\t\t\tbackgroundColor: (ctx) => getColour(ctx, treeData),\r\n\t\t\t\t\tspacing: 1.2\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, treeData),\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 () => {\r\n\t\t\t//console.log('destroying example chart');\r\n\t\t\tchart.destroy();\r\n\t\t}\r\n\t}, [treeData, options]);\r\n\r\n\t//console.log('render example chart')\r\n\r\n\treturn
\r\n}\r\n\r\nfunction OverviewTreemapChart(props) {\r\n\tconst backendUrl = useSelector((state) => state.backendUrl);\r\n\tconst canvas = useRef(null);\r\n\tconst [treeData, setTreeData] = useState(sampleData);\r\n\tconst [options, setOptions] = useState({});\r\n\tconst [test, setTest] = useState(100)\r\n\r\n\tuseEffect(() => {\r\n\t\t//console.log('useEffect chart')\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\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\t//setTimeout(() => {\r\n\t\t\t\t//console.log('setting tree chart data!')\r\n\t\t\t\tsetTreeData(treeObject)\r\n\t\t\t\t//}, 2000);\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\tconst updatedOptions = {\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, treeData),\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\r\n\t\tsetOptions(updatedOptions)\r\n\t}, []);\r\n\r\n\t//console.log('chart rendered')\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 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\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{materials ? (materials.map((material) => (\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\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\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
NameEmbodied GHGETotal Uses
{material.material}{material.subCategory}{material.embodiedGHGE}{material.count}
\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 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\t

My 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\t

Global 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\t
Raw 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\t
End 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\t
Manufacturer 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\t
Highest 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\t
Lowest 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, user: userProp }) {\r\n\tconst storeId = store && store.id\r\n\tconst editMode = !!storeId\r\n\t// console.log('ProjectCreateNew', userProp) // user prop is not set for the create store route (by the router)\r\n\t// const userId = parseInt(useSelector((state) => state.userId))\r\n\tconst user = useSelector((state) => state.user)\r\n\tconst userId = user.id\r\n\t// console.log('ProjectCreateNew', user)\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\tconst updatedStore = { ...storeDetailsStateUpdated, [e.target.name]: inputValue }\r\n\t\tconsole.log('updatedStore', updatedStore)\r\n\t\tsetStoreDetailsState(updatedStore);\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\t\tstoreDataClean.creatorId = Number(storeDataClean.creatorId)\r\n\t\tstoreDataClean.designerIdConcept = Number(storeDataClean.designerIdConcept)\r\n\t\tstoreDataClean.designerIdAsBuilt = Number(storeDataClean.designerIdAsBuilt)\r\n\t\tstoreDataClean.designerIdDecom = Number(storeDataClean.designerIdDecom)\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 renderAdminFields = () => {\r\n\r\n\t\tif (AccessControl.isAdmin(user) === false) {\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\t

Admin

\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\tCreator\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{userList.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\r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\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\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\tConcept Designer\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{userList.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\r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\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\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\tAs-Built Designer\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{userList.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\r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\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\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\tDecommission Designer\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{userList.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\r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\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\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\r\n\t\t)\r\n\t}\r\n\r\n\tconst renderForm = () => {\r\n\t\treturn (\r\n\t\t
\r\n\t\t\t{editMode ? undefined : (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t

New Store

\r\n\t\t\t\t\t\t{/* for testing purposes */}\r\n\t\t\t\t\t\t{/* editmode = {String(editMode)} storeId = {String(storeId)} */} \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\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\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{scorecardType.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t{scorecardTypes.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t{locationType.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t{regionList.map(r => (\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\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\r\n\t\t\t\t\t\t\t{countryListFiltered.map((m) => (\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\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\r\n\t\t\t\t\t\t\t{cityListFiltered.map((c) => (\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\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\t\r\n\t\t\t\t\t\t\t{currencyList.map((m) => (\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\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{/* Admin Only --------------------------------------------------------------------------------------------------- */}\r\n\r\n\t\t\t\t{renderAdminFields()}\r\n\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

Detailed 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\t

Detailed 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\t\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\r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\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 */}\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\t\r\n\t\t\t\t\t\t\t{usersArchitect.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\t{marketingMediaType.map((m) => (\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\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\t

Sustainability 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\t

Sustainability 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\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\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{AccessControl.storeCanEdit(user, store) && }\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\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{/* */}\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{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)}\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
Raw MaterialNameQuantityEmbodied GHGE(kgCO2e)ScoreActions
{matInst.rawMaterial}{matInst.itemType}{matInst.materialQuantity} {formatUnitForDisplay(matInst.unit)}{matInst.embodiedGHGE + \" -- \" + matInst.A1A3CarbonFactor}{totGhgeInfo.formatted}{formatScore(matInst.totalScore)}\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\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\t

Add 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\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\t\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\t

Review 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\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\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\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\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
Status{Store.getStatusTitle(store.storeStatus)}
Scorecard Type{Store.getScorecardTypeTitle(store.scorecardType)}
Store Creator{displayNameFromUserId(store.creatorId)}
Review Required{store.reviewRequired ? \"Yes\" : \"No\"}
Review Comment{store.reviewComment}
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t

Designers

\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\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\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\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
Store Creator{displayNameFromUserId(store.creatorId)}
Concept{displayNameFromUserId(store.designerIdConcept)}
As-Built{displayNameFromUserId(store.designerIdAsBuilt)}
Decommissioned{displayNameFromUserId(store.designerIdDecom)}
\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))}\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\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\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\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\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\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)\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)\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\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\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
{cell.render('Cell')}{moment(cell.value).year().toString()}{formatScore(cell.value)}{formatGhge(cell.value)}{cell.render('Cell')}\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\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{cell.render('Cell')}
\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\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\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\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\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{certsList ? (certsList.map((cert) => (\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\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\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{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
#ecoLabeldescriptionmaterialCategoryregioncountryvaluepromptlink
{cert.id}{cert.ecoLabel}{cert.description}{cert.materialCategory}{cert.region}{cert.country}{cert.value}{cert.prompt}LinkSelect this Certification
\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\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\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\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\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\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{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
#Store NameScorecard TypeCountryRegionLocation TypeTotal ScoreView
{store.id}{store.storeName}{store.scoreCardType}{store.country}{store.region}{store.locationType}{store.totalScore}View/Edit
\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\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\t\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\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}\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\t\r\n\r\n\t\t\t\t\t\t{categoryLookup.map((m) => (\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\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\t\r\n\t\t\t\t\t\t\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\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}\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\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}\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\t\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\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}\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\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}\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\tAdd 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\t

Page Not Found

\r\n\t\t\t\t\tBack 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\t\r\n\t\t\t\t\t{users.map(u => (\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\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\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":""}