{"version":3,"sources":["reportWebVitals.js","Utils/API/handle-reponse.js","Utils/API/apiHelper.js","Services/data/data.service.js","Images/google.svg","Images/favicon.ico","Images/dotedshape.png","Components/Pages/Login/LoginPage.jsx","Components/Shared/ResultsIcon.svg","Components/Shared/Menu.jsx","Components/Shared/TitlePage.jsx","Components/Pages/SelectMenu/SelectMenuPage.jsx","Components/Shared/Buttons/ButtonNormalText.jsx","Config/constants.js","Components/Shared/Tables/FilterResultsRow.jsx","Reducers/ProjectCopy/ProjectCopyActionTypes.js","Reducers/ProjectCopy/ProjectCopyAction.js","Reducers/Login/LoginActionTypes.js","Reducers/Login/LoginActions.js","Reducers/ListCopy/ListCopyActionTypes.js","Reducers/ListCopy/ListCopyAction.js","Reducers/ExternalAPiCopy/ExternalAPiCopyActionTypes.js","Reducers/ExternalAPiCopy/ExternalApiCopyAction.js","Components/Pages/Results/Components/ProjectButton.jsx","Images/NoResults.png","Components/Pages/Results/Components/TableResults.jsx","Components/Pages/Results/Components/DropdownLocations.jsx","Components/Pages/Results/Components/DropdownProjects.jsx","Components/Shared/DateSelection/DateTimePicker.jsx","Components/Pages/Results/Components/TimeLineChart.jsx","Components/Pages/Results/Components/TimeRangeChart.jsx","Components/Shared/DateSelection/DatePickerText.jsx","Utils/dateHelper.js","Components/Pages/Results/ResultsPage.jsx","Components/Shared/PrivateRoute.jsx","Components/Shared/TextField.jsx","Components/Shared/DateSelection/DatePicker.jsx","Components/Shared/DateSelection/DateSelectionFuture.jsx","Components/Shared/DescriptionItem.jsx","Components/Pages/CreateProject/Components/DropdownCopmanyAdd.jsx","Components/Shared/Dropdowns/DropdownResources.jsx","Components/Shared/Buttons/ButtonSave.jsx","Components/Shared/Dropdowns/DropdownType.jsx","Components/Shared/ColorPicker.jsx","Components/Shared/Tables/TableDragResources.jsx","Components/Pages/CreateProject/CreatePage.jsx","Components/Pages/Configuration/ConfigurationPage.jsx","Components/Pages/User/UserSettings/userSettings.jsx","Components/Pages/ProjectReport/Components/TableHighLow.jsx","Components/Pages/ProjectReport/Components/EventChart.jsx","Components/Pages/ProjectReport/Components/FinancialChart.jsx","Components/Pages/ProjectReport/Components/PriceTable.jsx","Images/counterStyle.svg","Components/Pages/Results/Components/TimeRangeChart copy.jsx","Images/timerStyle.svg","Images/Freetext.svg","Images/DataList.svg","Images/barcodeScanner.svg","Images/camera.svg","Images/api.svg","Images/Pie.svg","Images/chart.svg","Components/Pages/ProjectReport/ProjectReport.jsx","Components/Pages/ProjectReportOverview/ProjectReportOverview.jsx","Components/Shared/CopyQrLink.jsx","Components/Shared/Dropdowns/DropdownCopmany.jsx","Components/Shared/Buttons/ButtonNormalDelete.jsx","Components/Shared/CustomizedMenus.jsx","Components/Pages/ModifyProject/ModifyPage.jsx","Components/Shared/DescriptionTitle.jsx","Components/Shared/UseQuery.jsx","Components/Pages/PerformMeasurement/counterStyle.svg","Components/Pages/PerformMeasurement/Counters.jsx","Components/Pages/PerformMeasurement/timerStyle.svg","Components/Pages/PerformMeasurement/Stopwatch.jsx","Components/Pages/PerformMeasurement/Freetext.svg","Components/Pages/PerformMeasurement/FreeText.jsx","Components/Pages/PerformMeasurement/DataList.svg","Components/Pages/PerformMeasurement/DataList.jsx","Components/Pages/PerformMeasurement/camera.svg","Components/Pages/PerformMeasurement/Camera.jsx","Components/Shared/Dialogs/BaseDialog.jsx","Components/Shared/Buttons/ButtonAction.jsx","Components/Shared/Buttons/ButtonClose.jsx","Components/Shared/Dialogs/MessageDialog.jsx","Components/Pages/PerformMeasurement/barcodeScanner.svg","Components/Pages/PerformMeasurement/Scanner.jsx","Components/Pages/PerformMeasurement/MeasurementBlocks.jsx","Components/Pages/PerformMeasurement/squares.svg","Components/Pages/PerformMeasurement/PerformMeasurementPage.jsx","Components/Shared/QrButton.jsx","Components/Shared/Tables/FilterProjectRow.jsx","Components/Pages/ProjectOverview/Components/EditButton.jsx","Components/Pages/ProjectOverview/Components/TableManage.jsx","Components/Pages/ProjectOverview/ManagePage.jsx","Components/Pages/DuplicateProject/Components/DropdownCopmanyAdd.jsx","Components/Pages/DuplicateProject/DuplicatePage.jsx","Components/Pages/CreateList/Components/TableCreateList.jsx","Components/Pages/CreateList/CreateList.jsx","Components/Pages/CreateExternalApi/CreateExternalApi.jsx","Components/Pages/ModifyList/Components/TableModifyList.jsx","Components/Pages/ModifyList/ModifyList.jsx","Components/Pages/ModifyExternalApi/ModifyExternalApi.jsx","Components/Pages/ProjectListOverview/Components/EditListsButton.jsx","Components/Shared/Tables/FilterListRow.jsx","Components/Pages/ProjectListOverview/Components/TableList.jsx","Components/Pages/ProjectListOverview/ListOverview.jsx","Components/Pages/ExternalApiListOverview/Components/EditExternalApisButton.jsx","Components/Pages/ExternalApiListOverview/Components/TableExternalApi.jsx","Components/Pages/ExternalApiListOverview/ExternalApiOverview.jsx","Images/line2.png","Components/Pages/Landing/LandingPage.jsx","Components/Pages/Navigation/NavigationPage.jsx","app.js","Reducers/ProjectCopy/ProjectCopy.js","Reducers/Login/Login.js","Reducers/ListCopy/ListCopy.js","Reducers/ExternalAPiCopy/ExternalApiCopy.js","Reducers/index.js","index.js"],"names":["reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","handleResponse","response","text","ok","JSON","parse","indexOf","status","Promise","reject","ApiHelper","EXTERNALAPI","ComposeUri","action","appSettings","TAPLR_API_BASE_URL","dataService","login","email","password","requestOptions","method","headers","body","stringify","url","apiHelper","fetch","getCompanies","userId","getResources","getTypes","createNewProject","GetUserID","ProjectName","ResourceName","CompanyId","CompanyName","FromDate","ToDate","projectrows","UserId","Details","saveCompany","companyName","Name","findProjects","updateProjects","OldCompanyId","ProjectId","ProjectQr","QrCode","getMeasurement","getMeasurementByIdAndDate","getProjectDetails","Qr","getProjectDetailsByQr","getAllProjectInfoByProjectID","projectId","saveText","projectDetailId","StartTime","TextValue","ProjectDetailId","saveTime","stopwatch","DateValue","saveCount","counterValue","CounterValue","getName","saveMeasurement","measurement","id","startTime","Value","value","StartValue","startValue","StopValue","stopValue","Running","running","ControlTypeId","controlTypeId","saveMeasurementWithComment","Image","commentImage","Comment","commentText","getMeasurementById","getMeasurementForModify","deleteProject","getByProjectID","saveAndResetMeasurements","measurements","createNewDataList","Description","InsertedOn","InsertedByUserId","DataListItems","getLists","deleteDataList","listId","Id","modifyDataList","getListItems","dataListId","newMediaImage","newMediaImageWithComment","CommentText","GetImageById","ImageId","getSystemParameters","getUserByEmail","updateUserData","firstName","lastName","console","log","Email","FirstName","LastName","createUser","uid","EmailAddress","FireBaseId","createNewApi","ApiKey","ApiFormat","getApis","modifyApi","ID","UpdatedByUserId","deleteApi","getProjectLocationsByUserId","getProjectNamesByUserId","getMeasurementsByUserIdDateLocationName","Location","getProjectDetailWithComments","getProjectAndDetails","Page","PageSize","getProjectByProjectIdUserId","requestLogin","toast","configure","LoginPage","props","classes","useStyles","useState","showPassword","setShowPassword","setEmail","setLastName","setFirstName","setPassword","badInput","setBadInput","badInputText","setBadInputText","emailAlreadyUsed","captchaValue","setCaptcha","imageNumber","setImageNumber","history","useHistory","loginPage","setLoginPage","forgotPassword","setForgotPasswordPage","verificationMessage","recaptchaRequired","setRecaptchaRequired","open","setOpen","recaptchaKey","setRecaptchaKey","auth","getAuth","provider","GoogleAuthProvider","addScope","useEffect","number","Math","floor","random","window","location","origin","includes","results","find","x","name","recaptchaRef","React","createRef","handleVerificationMail","event","displayError","sendEmailVerification","currentUser","handleSignUp","navigateToHomePage","push","changeEmail","target","className","loginContainer","imageContainer","style","backgroundImage","process","imageOverlay","undefined","onSubmit","e","preventDefault","signInWithEmailAndPassword","userCredential","user","onAuthStateChanged","emailVerified","actions","setUserid","setUserName","firstname","lastname","setLogin","catch","error","code","message","loginForm","taplrLogo","src","onClick","alt","actionType","pWhatToDo","inputDiv","fontWeight","fontSize","TextField","textField","type","variant","helperText","fullWidth","onChange","InputProps","endAdornment","InputAdornment","position","width","startAdornment","marginRight","Divider","divider","sx","height","m","orientation","changePassword","IconButton","onMouseDown","styleLink","marginTop","Fragment","buttonDiv","Button","marginBottom","size","logInButton","display","justifyContent","alignItems","flexDirection","float","signupButton","taplrBlocks","DottedShape","sendPasswordResetEmail","success","POSITION","TOP_CENTER","autoClose","errorMessage","regButton","recaptchaAuth","recaptchaVerifier","RecaptchaVerifier","detailDiv","nameDiv","nameTextField","changeFirstName","dividerName","changeLastName","dividerLastName","color","border","ref","sitekey","Grid","item","Dialog","onClose","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","verifyButton","makeStyles","theme","backgroundColor","breakpoints","up","down","bottom","right","taplrBlockOne","taplrBlockTwo","taplrBlockThree","top","left","opacity","outline","boxShadow","background","borderRadius","padding","marginLeft","zIndex","nothingReceived","cursor","imageStyle","googleButton","borderColor","Menu","Login","loginState","openCollapse","setOpenCollapse","pathname","navigateTo","destination","Drawer","sideBar","anchor","ModalProps","onBackdropClick","close","titleHeader","drawerItems","MenuItem","selected","menuItem","iconItem","menuText","projectIdAction","toggleArrow","Collapse","in","timeout","unmountOnExit","List","component","disablePadding","ListItem","button","nested","ListItemIcon","listItemIcon","ListItemText","listItemText","primary","signOut","paddingTop","paddingBottom","paddingRight","borderRight","ImgItem","selectedItem","paddingLeft","filter","TitlePage","menuState","setMenuState","titleSection","titleStyle","headerLeft","backbutton","wipe","companyAction","companyIdAction","resourceAction","fromDateAction","toDateAction","detailsAction","projectNameAction","projectQrAction","goBack","arrowBack","hstylewithoutbutton","hstyle","Text","headerMiddle","headerRight","aubWerk","userName","toggleButton","titleTextStyle","whiteSpace","alignContent","maxHeight","SelectMenuPage","container","boxStyle","to","textDecoration","link","linkButton","content","maxWidth","iconStyle","verticalAlign","minWidth","minHeight","ButtonStyle","ButtonNormalText","disabled","startIcon","controlTypes","ProjectFilterTypes","dataListTypes","ExternalApiTypes","FilterResultsRow","getValue","filters","filterValue","filterRow","midCell","length","label","updateFilters","leftCell","rightCell","checkBox","icon","checkedIcon","SET_COMPANY","SET_COMPANYID","SET_RESOURCE","SET_FROMDATE","SET_TODATE","SET_DETAILS","SET_PROJECTID","SET_PROJECTNAME","SET_PROJECTQR","SET_PROJECTREPORT","company","types","payload","companyId","resource","fromDate","toDate","details","projectName","projectQr","getAllTypes","SET_TYPES","projectReportAction","report","SET_LOGIN","SET_USERID","SET_USERNAME","SET_EMAIL","SET_LASTNAME","loginstate","SET_LISTNAME","SET_LISTDESCRIPTION","SET_LISTITEMS","SET_LISTISACTIVE","SET_LISTID","listNameAction","listName","listDescriptionAction","listDescription","listItemsAction","listItems","listIsActiveAction","listIsActive","listIdAction","SET_EXTERNALAPINAME","SET_EXTERNALAPIDESCRIPTION","SET_EXTERNALAPIKEY","SET_EXTERNALAPIITEMS","SET_EXTERNALAPIID","externalApiNameAction","externalApiName","externalApiDescriptionAction","externalApiDescription","externalApiKeyAction","externalApiKey","externalApiItemsAction","externalApiItems","externalApiIdAction","externalApiId","compose","connect","state","projects","dispatch","bindActionCreators","Actions","setRow","data","row","Tooltip","title","placement","arrow","TempMeasurementRows","map","y","description","typeId","controlTypeID","edit","sequence","sort","a","b","qrCode","resourceName","TablePaginationActions","useTheme","count","page","rowsPerPage","onPageChange","footer","direction","ceil","max","TableResults","setPage","setRowsPerPage","image","setImage","selectAll","setSelectAll","setImageLink","selectedProject","handleDialogOpen","handleDialogClose","formatDate","date","d","Date","hours","getHours","minutes","getMinutes","seconds","getSeconds","month","getMonth","getDate","getFullYear","centerStyle","textAlign","HtmlTooltip","styled","popper","tooltipClasses","tooltip","typography","pxToRem","TableContainer","Paper","Table","tableHead","Checkbox","checked","isSelected","selectAllCheckBoxes","titleSearch","icons","handleSorting","toggleFilter","filterOn","rows","filterProjects","colspan","NoResults","slice","index","onCheckChanged","commentId","Typography","valueStyle","thumbnail","measurementValue","imageId","TableFooter","tableFooter","TableRow","TablePagination","rowsPerPageOptions","SelectProps","inputProps","native","newPage","onRowsPerPageChange","parseInt","ActionsComponent","overflow","textOverflow","tableHeadRow","DropdownLocations","locations","setLocations","selectedLocation","setSelectedLocation","tempLocations","projectCopy","userid","result","resourceDescription","refresh","Autocomplete","multiple","disablePortal","options","limitTags","newValue","inputValue","getOptionLabel","option","renderInput","params","DropdownProjectNames","projectNames","setProjectNames","setSelectedProject","tempProjects","MyDateTimePicker","LocalizationProvider","dateAdapter","AdapterDateFns","DateTimePicker","maxDate","minDate","ampm","inputFormat","FilterListRow","labelData","setLabelData","getRGB","c","getsRGB","pow","getLuminance","hexColor","substr","getContrast","f","L1","L2","min","convertToTimeString","time","strTime","toTimeString","split","customizeText","bgColor","tempLabelObj","tempObj","point","some","timeRange","endValue","chartRef","dataSource","rotated","customizePoint","pointInfo","this","visible","dashStyle","resolveLabelOverlapping","argumentField","rangeValue1Field","rangeValue2Field","barOverlapGroup","valueField","indent","alignment","enabled","customizeTooltip","valueText","insertedOn","updatedOn","times","endTime","strStartTime","strEndTime","imghtml","imgData","argumentText","html","htmlItem","toLocaleDateString","weekday","tickInterval","TimeRangeChart","timeRangeDates","setStartValue","setEndValue","tempStartValue","tempEndValue","handlePreviousDay","selectedRangeColor","onValueChanged","updateDataRange","updateVisualRange","defaultValue","format","hour","minute","handleNextDay","Style","DatePickerText","fromNewDateFormatToYYYYMMDDSlash","newDate","addZeroToMonth","addZeroToDay","String","parseNewDateToDDMMYYY","parseNewDateToDDMMYYYnoTime","parseNewDateToYYMMDDDash","ExpandMore","expand","other","transform","transition","transitions","create","duration","shortest","ResultsPage","measurementRows","setMeasurementRows","setFilters","setFilterOn","selectedFilter","setSelectedFilter","setTypes","timeLineData","setChartData","timeRangeData","setTimeRangeData","exportActive","setExportActive","setIsChecked","setLocation","setProjectName","openSearch","setOpenSearch","setRefresh","hideProjectFilters","setHideProjectFilters","anchorRef","useRef","isLoading","setLoading","now","setTimeRangeDates","localeCompare","detailId","projectDetailID","stopTime","getMeasurementValue","textValue","integerValue","dateValue","dataListValue","imageLink","externalApiValues","flat","chartData","toDay","toMonth","toYear","toHours","toMinutes","toSeconds","tempToDate","tempFromDate","filteredResults","dateLastMeasurement","sortedMeasurements","sortedMeasurementsDesc","getTime","limitString","str","limit","substring","tempdata","startDate","tempEndDate","endDate","counter","chartType","counterDescription","freetextDescription","datalistDescription","cameraDescription","TypeId","Int","Time","DataListValue","ImageLink","ExternalApiValue","column","sortOrder","filterResults","thisFilters","i","varFilteredResults","toLowerCase","handleOpenSearch","handleSearch","buttons","ButtonGroup","filterButton","borderLeft","key","filename","stylingBlock","filterBlock","yesterday","setDate","join","filterItem","tempRows","loadingChart","columnSpacing","rowSpacing","xs","tempFilters","splice","unshift","sortType","tempMeasurementRows","property","asc","moment","aMoment","dynamicSorting","exportContainer","flexWrap","dateSelection","gap","PrivateRoute","Component","loggedInState","rest","render","from","TextfieldInput","InputLabelProps","multiline","MyDatePicker","DatePicker","DateSelectionFuture","today","custom","setCustom","weekSelected","setWeekSelected","monthSelected","setMonthSelected","yearSelected","setYearSelected","d1","d2","diff","start","end","date1","date2","oneDay","diffInTime","round","getNumberOfDays","setTheFromDate","setDates","setTheToDate","ClickAwayListener","onClickAway","toDateString","elevation","relevantDays","DescriptionItem","DropdownCompanyAdd","dropdownList","companies","createFilterOptions","filterOptions","filtered","isExisting","freeSolo","onInputChange","renderOption","action2","shrink","DropdownResources","resources","filterd","Array","Set","margin","ButtonSave","createTheme","palette","neutral","main","contrastText","ThemeProvider","DropdownType","select","setSelect","list","setList","apis","setapis","openList","setOpenList","openApi","setOpenApi","FormControl","InputLabel","Select","MenuProps","PaperProps","ListSubheader","actionDataList","actionExternalApi","ColorPicker","openPicker","setOpenPicker","usedColor","setColor","swatch","popover","cover","disableAlpha","hex","TableDragResources","lists","setLists","setApis","expandTable","setExpandTable","selectType","selectTypeId","setType","tempArray","comment","setRows","setTypeDataList","DataListrow","setTypeExternalApi","ExternalApirow","handleCostProfit","costProfit","isProfit","GenerateID","ids","object","saveProjectRow","makeSave","addRow","Rowid","newRow","price","PrevId","handleColor","Shrink","tableTd","colSpan","onDragEnd","source","forEach","MoveSequence","droppableId","provided","align","droppableProps","innerRef","draggableId","toString","tableRow","draggableProps","indexTd","listOrder","onMouseUp","dragTd","dragHandleProps","descriptionField","setDescription","measurementPrice","parseFloat","setPrice","inputMode","ToggleButtonGroup","exclusive","ToggleButton","Radio","handleComment","ColorPickerBorder","editButton","editProjectRow","deleteProjectRow","functionButton","placeholder","IconComponent","Fab","tableContent","tableLayout","emptydrag","dragIcon","CreatePage","nextMonth","setFromDate","setToDate","setResourceName","setCompanyName","setCompanyId","setCompanies","setResources","setProjectRows","helperTextProjectName","setHelperTextProjectName","helperTextCompany","setHelperTextCompany","helperTextResourceDescription","setHelperTextResourceDescription","errorProjectName","setErrorProjectName","errorCompany","setErrorCompany","errorResourceDescription","setErrorResourceDescription","emptyDetails","setEmptyDetails","save","newProjectrows","projectOptions","projectOption","textContent","newCompany","tempCompanies","sm","md","fontFamily","letterSpacing","buttonContainer","projectDetails","HasComment","tempProjectName","createmodel","projectID","tempCompanyName","tempCompanyId","tempResourceName","qrButton","ConfigurationPage","UserSettingsPage","verified","setVerified","setChangePassword","verifiedRow","verifiedText","buttonStyle","tempAuth","labelText","disabledTextField","handleChangePassword","updatePassword","handleSaveChanges","dateAndCreateDiv","activeFor","backIcon","TableHighLow","mostCommonDate","setMostCommonDate","leastCommonDate","setLeastCommonDate","average","averagePrice","setAveragePrice","findMostCommonDate","detail","findLeastCommonDate","getAllActiveDates","padTo2Digits","num","padStart","tempMostDates","dateMap","Map","has","set","get","mostCommonCount","tempLeastDate","leastCommonCount","tempDates","arrUniqueValues","getUniqueValuesFromArray","arrEventsPerDay","strMeasurementDate","total","dateParts","addHours","objFilteredMeasurements","reduce","v","floatAvgOfTotal","numberPrice","toISOString","toLocaleString","minimumFractionDigits","maximumFractionDigits","prototype","h","setHours","array","elem","pos","findEventsWithDate","events","sum","milliseconds","convertMsToTime","findPrice","totalSeconds","Number","convertToSeconds","handleResultsRedirect","StartDate","datearray","newdate","eventBoxStyle","averageContainer","bar","headerContainer","dateContainer","flexFlow","EventChart","onLegendClick","points","isVisible","hide","show","pointinfo","htmlText","argument","percentText","minuteamount","verticalAlignment","horizontalAlignment","itemTextPosition","originalValue","FinancialChart","setChartRef","customizeSeriesPoint","financialChartData","projectDetailNames","series","customizeAnnotation","seriesName","imgUrl","valueTextConverted","replace","priceConverted","originalMeasurement","thismeasurement","precision","subtitle","project","argumentType","toFixed","PriceTable","TableHead","TableCell","TableBody","priceData","scope","detailDescription","first","last","amount","totalPrice","ProjectReportPage","setProject","setMeasurementPrices","setPriceData","setAllPriceData","setTotalPrice","setFinancialData","setFinancialChartData","setDetailsNames","setTotalFinancialData","setOverviewData","setAllData","HighLowRef","convertHMS","sec","res","handleProject","chartMeasurementCollection","thisProject","tempMeasurementsCollection","fromAndToDate","constructFromAndToDate","constructPriceData","detailNames","constructDetailCollection","tempChartData","constructChartData","orderTest","temporaryCollection","thisProjectDetail","chartDataCollection","tempTotalData","thisMeasurement","isStopwatch","thisDetail","dif","priceToAdd","price_per","tempMeasurementData","stopDate","profitAdded","tempDetailData","detailCount","thisMeasurements","variablename","concat","thisFromDate","thisToDate","amountOfMeasurements","detailDescriptions","measurementColors","tempMeasurementPrices","tempPriceData","tempFinancialData","filteredMeasurements","detailType","measurementId","lowestDate","totalTime","tempTotal","j","tempTotalPrice","highestDate","measurementData","handleDifferentDate","handleDownloadImage","toDownload","element","current","fileName","html2canvas","canvas","toDataURL","document","createElement","download","href","appendChild","click","removeChild","getImageUrl","Counter","Stopwatch","FreeText","DataList","Scanner","API","header","fullHeader","projectTitle","extraInfo","financialDashboardStyle","filterTitle","loadingBalls","highLowItem","detailHeader","noHighLow","rightSideStyle","rightSideTitle","tempFrom","tempTo","newFromDate","newToDate","financialChart","noDataIcons","pieChart","errorIcon","chartBoxStyle","pieStyle","tableContainer","calculateBoxStyle","timeRangeBegin","timeRangeEnd","noDataAvailable","overflowY","flexGrow","borderTopRightRadius","borderTopLeftRadius","ProjectReportOverviewPage","projectList","setProjectList","initialProjectList","firstLoad","loadAmount","setLoadAmount","currentDate","setPageUp","loadMore","innerHeight","documentElement","scrollTop","scrollingElement","scrollHeight","TempLoadAmount","sortProjectsOnFinished","removeEventListener","addEventListener","getPercentage","fromDateDate","toDateDate","getDaysLeft","difference","getMeasurementCount","measurementCount","percentage","finished","ModifyRedirect","headerTitle","tempProjectId","dateArray","tempMaxDate","apply","tempMinDate","ResultRedirect","ReportRedirect","LinearProgress","scrollTo","behavior","CopyQrLink","openToast","setOpenToast","handleOpenToast","handleCloseToast","reason","readOnly","navigator","clipboard","writeText","TAPLR_BASE_URL","Snackbar","autoHideDuration","DropdownCompany","ButtonNormalDelete","StyledMenu","anchorOrigin","vertical","horizontal","transformOrigin","spacing","mode","grey","secondary","CustomizedMenus","anchorEl","setAnchorEl","Boolean","activeProject","isActive","dropDown","currentTarget","endIcon","MenuListProps","resultsRedirect","viewResults","disableRipple","my","financialDashboardRedirect","duplicateRedirect","handleClickOpenQr","handleDialogOpenDel","ModifyPage","projectQR","setProjectQR","setProjectId","resoureName","setOldCompanyId","projectDetailRows","setProjectDetailRows","delopen","setDelOpen","openQr","setOpenQr","componentRef","setActiveProject","tempProjectDetailRows","hasComment","fromDateString","fromDateObject","toDateObject","a_start","a_end","b_start","b_end","Diffrence","datesAreOnSameDay","second","handleCloseQr","handleDialogCloseDel","def","isNaN","handlePrint","useReactToPrint","ComponentToPrint","renderAs","menuOption","tempProjectRows","optionContainer","tempProjDetails","modalQRCode","el","buttonRow","printButton","printIcon","menuRight","menuLeft","smallMenuItem","fontStyle","lineHeight","doneButton","DescriptionTitle","useQuery","search","useLocation","useMemo","URLSearchParams","captured","setCaptured","extraContent","setExtraContent","openComment","setOpenComment","openCamera","setOpenCamera","openFullscreenImage","setOpenFullscreenImage","setComment","cameraSide","setCameraSide","expanded","setExpanded","webcamRef","operator","setOperator","listOfComments","setListOfComments","comments","handleDialogOpenComment","handleDialogCloseComment","handleDialogOpenCamera","handleDialogCloseCamera","handleDialogCloseFullscreenImage","handlePage","CameraStyle","objectFit","Card","StyleCounter","textColor","headerDiv","h2style","Tally","counterDiv","LightenDarkenColor","StyleDiv","fullScreen","audio","screenshotFormat","videoConstraints","facingMode","exact","imageSrc","getScreenshot","alert","StyleDivComment","actionWithComment","tempListOfComments","newListItem","hyphens","wordWrap","overflowWrap","Pagination","siblingCount","fabStyle","backgroundRepeat","backgroundSize","backgroundPosition","mounted","timerStingsje","setTimerString","started","setStarted","setStartTime","countRef","s","pad","secs","mins","hrs","StyleStopwatch","StopwatchIcon","stopwatchDev","Stack","ResetStyle","clearInterval","stopAction","PauseStyle","StartStyle","setInterval","startAction","freeText","TextIcon","textDiv","setText","datalistValue","setDatalistValue","setListItems","DataListIcon","setDataValue","Camera","openImage","setOpenImage","lastImages","setLastImages","selectedImage","setSelectedImage","handleOpenImageClose","cameraIcon","tempImages","ImageObject","shift","takePictureIcon","BaseDialog","dialogContainer","dialogOpen","closeDialog","children","ButtonAction","actionButton","ButtonClose","closeButton","MessageDialog","dialogTitle","messageTitle","dialogContent","messageContent","buttonCount","buttonText","button2Text","setData","handleScannedData","ScannerIcon","onUpdate","err","MeasurementBlocks","valuesArray","setValuesArray","confirmDialogOpen","setComfirmDialogOpen","watchStillRunningDialogOpen","setWatchStillRunningDialogOpen","stopWatchesRunning","setStopWatchesRunning","refreshStopWatches","setRefreshStopWatches","elementsArray","setCounter","tempValues","setCounterWithComment","setStopWatch","reset","startDateString","endDateString","isDateObject","tempStopWatchesRunning","setStopValue","setTextWithComment","setDataListValue","elementSwitch","getTextColor","closeConfirmDialog","closeWatchStillRunningDialog","openWatchStillRunningDialog","view","refreshMeasurements","settings","qr","measurementBlocks","setMeasurementBlocks","viewSize","setViewSize","displaySize","setDisplaySize","autosize","setAutosize","toggleRefresh","setToggleRefresh","active","tempDetails","commentInsertedOn","display1Min","matchMedia","display2Min","display3Min","listener","matches","viewSizeFunction","blockWidth","Squares","SvgIcon","xmlns","role","preserveAspectRatio","viewBox","fill","QrButton","handleClose","FilterProjectRow","tempProjectQR","TableManage","measurementTypes","reformatDate","dateStr","dArr","headStyle","tableBodyRow","actionButtons","ManagePage","setFirstLoad","setProjects","sendApi","varFilteredProjects","dateSelectionDiv","DuplicatePage","defopen","setDefOpen","fDate","tDate","handleDialogCloseDef","TableList","saveHelper","setSaveHelper","itemName","setItemName","itemDescription","setItemDescription","saveListItem","editListItem","deleteListItem","UserID","CreateListPage","setListName","setListDescription","helperTextListName","setHelperTextListName","errorListName","setErrorListName","sendToApi","findIndex","DataListItemsToRemove","RemoveObjectId","dataListItems","insertedByUserId","listDescriptionStyle","CreateExternalApiPage","connectionName","setConnectionName","connectionDesc","setConnectionDesc","apiKey","setApiKey","errorConnectionName","setErrorConnectionName","errorApiKey","setErrorApiKey","htConnectionName","setHtConnectionName","htApiKey","setHtApiKey","apiBodyItems","setApiBodyItems","apiExampleLink","setApiExampleLink","apiExamplePoints","setApiExamplePoints","ExampleApiValuesMapped","NewExampleApiValues","Object","assign","validationOK","validate","items","handleCopyLink","handleCopyFormat","generateApiKeyContainer","uuidv4","generateApiKey","ApiContainer","generateApiKeyButton","TableModifyList","ModifyListPage","setListId","tempListName","listCopy","tempListDescription","tempListItems","tempListId","display1","ModifyExternalApiPage","ApiId","setApiId","externalApiCopy","ExternalApiName","ExternalApiDescription","ExternalApiKey","ExternalApiItems","ExternalApiId","tempListActive","listActive","Row","Box","gutterBottom","ItemRows","filterList","borderBottom","ListOverviewPage","varFilteredlist","apiFormat","externalApiFormat","EditExternalApisButton","TableExternalApi","filterApi","ExternalApiOverviewPage","externalApis","setExternalApis","varFilteredApi","infoAndVideoContainer","infoPannel","font","listPoint","videoPannel","videoResponsive","loginButton","videoContainter","video","LandingPage","class","DividerImage","frameborder","allow","allowfullscreen","errors","test","keys","NavigationPage","values","lg","xl","navigationLoginContainer","path","ModifyList","CreateList","ProjectReport","ProjectReportOverview","CreateExternalApi","ModifyExternalApi","ListOverview","ExternalApiOverview","settingsLoaded","setSettingsLoaded","app","initializeApp","authDomain","storageBucket","messagingSenderId","appId","getAnalytics","json","initialState","listIsAvtive","ApiDescription","persistConfig","storage","rootReducers","combineReducers","persistedReducer","persistReducer","store","configureStore","reducer","middleware","getDefaultMiddleware","serializableCheck","ignoredActions","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","Loader","persistor","persistStore","fallback","getElementById"],"mappings":"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","file":"static/js/main.0ce20d83.chunk.js","sourcesContent":["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","export function handleResponse(response) {\r\n return response.text().then(text => {\r\n if (!response.ok) {\r\n if ([401, 403].indexOf(response.status) !== -1) {\r\n // auto logout if 401 Unauthorized or 403 Forbidden response returned from api\r\n //authenticationService.logout();\r\n //window.location.reload(true);\r\n }\r\n return Promise.reject(text);\r\n }\r\n \r\n const data = text && JSON.parse(text);\r\n return data;\r\n });\r\n}","export default class ApiHelper {\r\n static appSettings; \r\n}\r\n\r\nexport const LOGIN_URL = \"user/login\";\r\nexport const GETCOMPANIES_URL = \"Company/GetByUserId\";\r\nexport const GETRESOURCES_URL = \"Project/GetResource\";\r\nexport const GETTYPES_URL = \"ControlType\";\r\nexport const CREATENEWPROJECT = \"ProjectLogic/CreateNewProject\";\r\nexport const CREATENEWDATALIST = \"DataListLogic/NewDataList\";\r\nexport const MODIFYDATALIST = \"DataListLogic/ModifyDataList\";\r\nexport const DELETEDATALIST = \"DataListLogic/DeleteDataList\";\r\nexport const SAVECOMPANY = \"CompanyLogic/NewCompany\";\r\nexport const SAVETEXT = \"ProjectDetailMeasurement/SaveText\";\r\nexport const SAVETIME = \"ProjectDetailMeasurement/SaveTime\";\r\nexport const SAVECOUNT = \"ProjectDetailMeasurement/SaveCount\";\r\nexport const GETPROJECTS_URL = \"Project/GetProjects\";\r\nexport const UPDATEPROJECTS_URL = \"ProjectLogic/ModifyProject\";\r\nexport const GETMEASUREMENT_URL = \"ProjectLogic/GetMeasurement\";\r\nexport const GETNAME_URL = \"Project/GetName\";\r\nexport const GETPROJECTDETAILS_URL = \"ProjectDetail/MeasurementScan\";\r\nexport const GETPROJECTDETAILSBYQR_URL = \"ProjectDetail/GetDetails\";\r\nexport const SAVEMEASUREMENT = \"ProjectDetailMeasurementLogic/SaveMeasurement\";\r\nexport const SAVEMEASUREMENTWITHCOMMENT = \"ProjectDetailMeasurementCommentLogic/SaveMeasurementWithComment\";\r\nexport const SAVEANDRESETMEASUREMENTS = \"ProjectDetailMeasurementLogic/SaveAndResetMeasurements\";\r\nexport const GETMEASUREMENTBYID_URL = \"ProjectLogic/GetMeasurementById\";\r\nexport const GETMEASUREMENTBYIDANDDATE_URL = \"ProjectLogic/GetMeasurementByIdAndDate\";\r\nexport const GETMEASUREMENTSBYPROJECTID_URL = \"Project/GetByProjectID\";\r\nexport const GETALLPROJECTINFOBYPROJECTID = \"Project/GetAllProjectInfoByProjectID\";\r\nexport const GETMEASUREMENTFORMODIFY_URL = \"Project/GetMeasurementForModify\";\r\nexport const DELETEPROJECT = \"ProjectLogic/DeleteProject\";\r\nexport const GETLISTS = \"DataList/GetLists\";\r\nexport const GETLISTITEMS = \"DataList/GetListItems\";\r\nexport const NEWMEDIAIMAGE = \"ProjectDetailMeasurementMediaLogic/SaveImage\";\r\nexport const NEWMEDIAIMAGEWITHCOMMENT = \"ProjectDetailMeasurementMediaLogic/SaveImageWithComment\";\r\nexport const GETIMAGEBYID = \"ProjectDetailMeasurementMedia/GetImageById\";\r\nexport const GETSYSTEMPARAMETERS = \"SystemParameter\";\r\nexport const GETUSERBYEMAIL_URL = \"user/GetAllByEmail\";\r\nexport const UPDATEUSERDATA_URL = \"user/UpdateUserData\";\r\nexport const CREATEUSER_URL = \"UserLogic/CreateUser\";\r\nexport const EXTERNALAPI = \"ExternalApiMeasurementLogic/NewExternalApiMeasurement?ApiKey=\";\r\nexport const CREATENEWAPI = \"ExternalApiLogic/NewExternalApi\";\r\nexport const MODIFYAPI = \"ExternalApiLogic/ModifyExternalApi\";\r\nexport const DELETEAPI = \"ExternalApiLogic/DeleteExternalApi\";\r\nexport const GETAPIS = \"ExternalApi/GetApis\";\r\nexport const GETLOCATION_URL = \"Project/GetAllLocation\";\r\nexport const GETPROJECTNAMES_URL = \"Project/GetAllProjectNames\";\r\nexport const GETMEASUREMENTBYDATELOCATIONNAME = \"ProjectLogic/GetMeasurementByDateLocationName\";\r\nexport const GETDETAILMEASUREMENTSANDCOMMENTS = \"ProjectLogic/GetDetailsByQr\";\r\nexport const GETPROJECTSANDDETAILS = \"ProjectLogic/GetAllProjects\";\r\nexport const GETPROJECTBYPROJECTIDUSERID = \"ProjectLogic/GetProject\";\r\nexport const REQUESTLOGIN_URL = \"request/RequestLogin\";\r\n\r\nexport function ComposeUri(action){\r\n if(ApiHelper.appSettings){\r\n return `${ApiHelper.appSettings.TAPLR_API_BASE_URL}/${action}`;\r\n }\r\n}","\r\nimport { handleResponse } from \"../../Utils/API/handle-reponse\";\r\nimport * as apiHelper from '../../Utils/API/apiHelper';\r\n\r\nexport const dataService = {\r\n login,\r\n getCompanies,\r\n getResources,\r\n getTypes,\r\n createNewProject,\r\n saveCompany,\r\n findProjects,\r\n updateProjects,\r\n getMeasurement,\r\n getMeasurementByIdAndDate,\r\n getProjectDetails,\r\n getProjectDetailsByQr,\r\n getAllProjectInfoByProjectID,\r\n saveText,\r\n saveTime,\r\n saveCount,\r\n getName,\r\n saveMeasurement,\r\n saveMeasurementWithComment,\r\n getMeasurementById,\r\n getMeasurementForModify,\r\n deleteProject,\r\n getByProjectID,\r\n saveAndResetMeasurements,\r\n createNewDataList,\r\n getLists,\r\n deleteDataList,\r\n modifyDataList,\r\n getListItems,\r\n newMediaImage,\r\n newMediaImageWithComment,\r\n GetImageById,\r\n getSystemParameters,\r\n getUserByEmail,\r\n updateUserData,\r\n createUser,\r\n createNewApi,\r\n getApis,\r\n modifyApi,\r\n deleteApi,\r\n getProjectLocationsByUserId,\r\n getProjectNamesByUserId,\r\n getMeasurementsByUserIdDateLocationName,\r\n getProjectDetailWithComments,\r\n getProjectAndDetails,\r\n getProjectByProjectIdUserId,\r\n requestLogin,\r\n}\r\n\r\nexport function login(email, password) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n email: email,\r\n password: password\r\n })\r\n };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.LOGIN_URL);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function requestLogin(firstName, lastName, email) {\r\n console.log(firstName, lastName, email)\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n email: email,\r\n lastName: lastName,\r\n firstName: firstName\r\n })\r\n };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.REQUESTLOGIN_URL);\r\n console.log(url, requestOptions);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function createNewProject(GetUserID, ProjectName, ResourceName, CompanyId, CompanyName, FromDate, ToDate, projectrows) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n UserId: GetUserID,\r\n ProjectName: ProjectName,\r\n ResourceName: ResourceName,\r\n CompanyId: CompanyId,\r\n CompanyName: CompanyName,\r\n FromDate: FromDate,\r\n ToDate: ToDate,\r\n Details: projectrows\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.CREATENEWPROJECT);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getUserByEmail(email) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETUSERBYEMAIL_URL);\r\n url += \"?email=\" + email\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getCompanies(userId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETCOMPANIES_URL);\r\n url += \"?userId=\" + userId\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getResources(userId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETRESOURCES_URL);\r\n url += \"?userId=\" + userId\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getTypes() {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETTYPES_URL);\r\n \r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function saveCompany(companyName, GetUserID) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n Name: companyName,\r\n UserId: GetUserID\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.SAVECOMPANY);\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function findProjects(CompanyId, GetUserID, FromDate, ToDate, ResourceName) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETPROJECTS_URL);\r\n url += \"?UserId=\" + GetUserID + \"&CompanyId=\" + CompanyId + \"&FromDate=\" + FromDate + \"&ToDate=\" + ToDate + \"&ResourceName=\" + ResourceName\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function updateProjects(GetUserID, ProjectName, ResourceName, OldCompanyId, CompanyId, CompanyName, FromDate, ToDate, projectrows, ProjectId, ProjectQr) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectId: ProjectId,\r\n UserId: GetUserID,\r\n ProjectName: ProjectName,\r\n ResourceName: ResourceName,\r\n OldCompanyId: OldCompanyId,\r\n CompanyId: CompanyId,\r\n CompanyName: CompanyName,\r\n FromDate: FromDate,\r\n ToDate: ToDate,\r\n QrCode: ProjectQr,\r\n Details: projectrows\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.UPDATEPROJECTS_URL);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function updateUserData(email, firstName, lastName) {\r\n console.log(email, firstName, lastName)\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n Email: email,\r\n FirstName: firstName,\r\n LastName: lastName,\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.UPDATEUSERDATA_URL);\r\n \r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function createUser(email, firstName, lastName, uid) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n Name: lastName,\r\n FirstName: firstName,\r\n EmailAddress: email,\r\n FireBaseId: uid,\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.CREATEUSER_URL);\r\n \r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getMeasurement(userId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETMEASUREMENT_URL);\r\n url += \"?userId=\" + userId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getMeasurementForModify(userId, FromDate, ToDate,) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETMEASUREMENTFORMODIFY_URL);\r\n url += \"?userId=\" + userId + \"&FromDate=\" + FromDate + \"&ToDate=\" + ToDate\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\nexport function getAllProjectInfoByProjectID(projectId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETALLPROJECTINFOBYPROJECTID);\r\n url += \"?projectId=\" + projectId;\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\nexport function getProjectDetails(Qr) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETPROJECTDETAILS_URL);\r\n url += \"?qr=\" + Qr\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getProjectDetailsByQr(Qr) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETPROJECTDETAILSBYQR_URL);\r\n url += \"?qr=\" + Qr\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function saveText(projectDetailId, StartTime, TextValue) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectDetailId: projectDetailId,\r\n StartTime: StartTime,\r\n TextValue: TextValue\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.SAVETEXT);\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function saveTime(projectDetailId, StartTime, stopwatch) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectDetailId: projectDetailId,\r\n StartTime: StartTime,\r\n DateValue: stopwatch\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.SAVETIME);\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function saveCount(projectDetailId, StartTime, counterValue) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectDetailId: projectDetailId,\r\n StartTime: StartTime,\r\n CounterValue: counterValue\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.SAVECOUNT);\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function saveMeasurement(measurement) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectDetailId: measurement.id,\r\n StartTime: measurement.startTime,\r\n Value: measurement.value,\r\n StartValue: measurement.startValue,\r\n StopValue: measurement.stopValue,\r\n Running: measurement.running,\r\n ControlTypeId: measurement.controlTypeId,\r\n })\r\n\r\n };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.SAVEMEASUREMENT);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function saveMeasurementWithComment(measurement) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectDetailId: measurement.id,\r\n StartTime: measurement.startTime,\r\n Value: measurement.value,\r\n StartValue: measurement.startValue,\r\n StopValue: measurement.stopValue,\r\n Running: measurement.running,\r\n ControlTypeId: measurement.controlTypeId,\r\n Image: measurement.commentImage,\r\n Comment: measurement.commentText,\r\n })\r\n };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.SAVEMEASUREMENTWITHCOMMENT);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function saveAndResetMeasurements(measurements) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n measurements: measurements\r\n })\r\n };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.SAVEANDRESETMEASUREMENTS);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getName(Qr) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETNAME_URL);\r\n url += \"?Qr=\" + Qr\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getMeasurementById(userId, ProjectId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETMEASUREMENTBYID_URL);\r\n url += \"?userId=\" + userId + \"&ProjectID=\" + ProjectId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\nexport function getMeasurementByIdAndDate(userId, ProjectId, FromDate, ToDate) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETMEASUREMENTBYIDANDDATE_URL);\r\n url += \"?userId=\" + userId + \"&ProjectID=\" + ProjectId + \"&FromDate=\" + FromDate + \"&ToDate=\" + ToDate\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\n\r\n\r\nexport function getByProjectID(ProjectId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETMEASUREMENTSBYPROJECTID_URL);\r\n url += \"?ProjectID=\" + ProjectId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function deleteProject(projectId, UserId) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectId: projectId,\r\n UserId: UserId\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.DELETEPROJECT);\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function createNewDataList(Name, Description, InsertedOn, InsertedByUserId, DataListItems) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n Name: Name,\r\n Description: Description,\r\n InsertedOn: InsertedOn,\r\n InsertedByUserId: InsertedByUserId,\r\n DataListItems, DataListItems\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.CREATENEWDATALIST);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getLists(UserId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETLISTS);\r\n url += \"?UserId=\" + UserId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function deleteDataList(Name, Description, InsertedOn, InsertedByUserId, DataListItems, listId) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n Name: Name,\r\n Description: Description,\r\n InsertedOn: InsertedOn,\r\n InsertedByUserId: InsertedByUserId,\r\n DataListItems: DataListItems,\r\n Id: listId\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.DELETEDATALIST);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function modifyDataList(Name, Description, InsertedOn, InsertedByUserId, DataListItems, listId) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n Name: Name,\r\n Description: Description,\r\n InsertedOn: InsertedOn,\r\n InsertedByUserId: InsertedByUserId,\r\n DataListItems: DataListItems,\r\n Id: listId\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.MODIFYDATALIST);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getListItems(dataListId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETLISTITEMS);\r\n url += \"?dataListId=\" + dataListId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\n\r\nexport function newMediaImage(InsertedOn, Image, ProjectDetailId) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectDetailId: ProjectDetailId,\r\n InsertedOn: InsertedOn,\r\n Image: Image\r\n })\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.NEWMEDIAIMAGE);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function newMediaImageWithComment(InsertedOn, Image, ProjectDetailId, CommentText) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ProjectDetailId: ProjectDetailId,\r\n InsertedOn: InsertedOn,\r\n Image: Image,\r\n Comment: CommentText,\r\n })\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.NEWMEDIAIMAGEWITHCOMMENT);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function GetImageById(ImageId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETIMAGEBYID);\r\n url += \"?ImageId=\" + ImageId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getSystemParameters() {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETSYSTEMPARAMETERS);\r\n\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function createNewApi(Name, Description, ApiKey, ApiFormat, InsertedByUserId) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n Name: Name,\r\n Description: Description,\r\n ApiKey: ApiKey,\r\n ApiFormat: ApiFormat,\r\n InsertedByUserId: InsertedByUserId,\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.CREATENEWAPI);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function modifyApi(ID, Name, Description, ApiKey, ApiFormat, UpdatedByUserId) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ID: ID,\r\n Name: Name,\r\n Description: Description,\r\n ApiKey: ApiKey,\r\n ApiFormat: ApiFormat,\r\n UpdatedByUserId: UpdatedByUserId,\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.MODIFYAPI);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function deleteApi(ID, Name, Description, ApiKey, ApiFormat, UpdatedByUserId) {\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n ID: ID,\r\n Name: Name,\r\n Description: Description,\r\n ApiKey: ApiKey,\r\n ApiFormat: ApiFormat,\r\n UpdatedByUserId: UpdatedByUserId,\r\n })\r\n\r\n };\r\n let url = apiHelper.ComposeUri(apiHelper.DELETEAPI);\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\nexport function getApis(UserId) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETAPIS);\r\n url += \"?UserId=\" + UserId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getProjectLocationsByUserId(userId, FromDate, ToDate) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETLOCATION_URL);\r\n url += \"?UserId=\" + userId + \"&FromDate=\" + FromDate + \"&ToDate=\" + ToDate\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getProjectNamesByUserId(userId, FromDate, ToDate) {\r\n\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETPROJECTNAMES_URL);\r\n url += \"?UserId=\" + userId + \"&FromDate=\" + FromDate + \"&ToDate=\" + ToDate\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getMeasurementsByUserIdDateLocationName(userId, FromDate, ToDate, Location, ProjectName) {\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETMEASUREMENTBYDATELOCATIONNAME);\r\n url += \"?UserId=\" + userId + \"&FromDate=\" + FromDate + \"&ToDate=\" + ToDate + \"&Location=\" + Location + \"&ProjectName=\" + ProjectName\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getProjectDetailWithComments(Qr) {\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETDETAILMEASUREMENTSANDCOMMENTS);\r\n url += \"?Qr=\" + Qr\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getProjectAndDetails(UserId, Page, PageSize) {\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETPROJECTSANDDETAILS);\r\n url += \"?UserId=\" + UserId + \"&Page=\" + Page + \"&PageSize=\" + PageSize\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}\r\n\r\nexport function getProjectByProjectIdUserId(ProjectId, UserId) {\r\n const requestOptions = { method: 'GET' };\r\n\r\n let url = apiHelper.ComposeUri(apiHelper.GETPROJECTBYPROJECTIDUSERID);\r\n url += \"?ProjectId=\" + ProjectId + \"&UserId=\" + UserId\r\n return fetch(url, requestOptions).then(handleResponse);\r\n}","export default __webpack_public_path__ + \"static/media/google.a45b46e9.svg\";","export default __webpack_public_path__ + \"static/media/favicon.4dcd427d.ico\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAABwAgMAAAC4FdC1AAAACVBMVEUAAAD////4kx3xexQZAAAAAXRSTlMAQObYZgAAADdJREFUSMftyrEJACAQBMFv0iat0sDkEEEw+mA2vJuaUV1DEOSP5IcgyItk42ivCIIgCIIgrcgC9g0yTglYFOYAAAAASUVORK5CYII=\"","import React, { useEffect, useState } from 'react';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport LockIcon from '@mui/icons-material/Lock';\r\nimport Visibility from '@mui/icons-material/Visibility';\r\nimport VisibilityOff from '@mui/icons-material/VisibilityOff';\r\nimport InputAdornment from '@mui/material/InputAdornment';\r\nimport PersonIcon from '@mui/icons-material/Person';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Grid } from '@mui/material';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport TextField from '@mui/material/TextField';\r\nimport Divider from '@mui/material/Divider';\r\nimport Button from '@mui/material/Button';\r\nimport { getAuth, signInWithEmailAndPassword, onAuthStateChanged, createUserWithEmailAndPassword, sendEmailVerification, sendPasswordResetEmail, RecaptchaVerifier } from \"firebase/auth\";\r\nimport BadgeIcon from '@mui/icons-material/Badge';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { GoogleAuthProvider, signInWithPopup } from \"firebase/auth\";\r\nimport GoogleLogo from \"../../../Images/google.svg\";\r\nimport TaplrLogo from \"../../../Images/favicon.ico\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport DottedShape from \"../../../Images/dotedshape.png\"\r\ntoast.configure();\r\n\r\nfunction LoginPage(props) {\r\n const classes = useStyles();\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleClickShowPassword = () => setShowPassword(!showPassword);\r\n const handleMouseDownPassword = () => setShowPassword(!showPassword);\r\n const [email, setEmail] = useState(\"\");\r\n // const [phoneNumber, setPhoneNumber] = useState();\r\n\r\n const [lastName, setLastName] = useState(\"\");\r\n const [firstName, setFirstName] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [badInput, setBadInput] = useState(false);\r\n const [badInputText, setBadInputText] = useState(\"\");\r\n const [emailAlreadyUsed, setEmailAlreadyUsed] = useState(false);\r\n // const appVerifier = window.recaptchaVerifier;\r\n const [captchaValue, setCaptcha] = useState(null);\r\n const [imageNumber, setImageNumber] = useState(1);\r\n const history = useHistory();\r\n const [loginPage, setLoginPage] = useState(true);\r\n const [forgotPassword, setForgotPasswordPage] = useState(false);\r\n const [verificationMessage, setVerificationMessage] = useState(false);\r\n const [recaptchaRequired, setRecaptchaRequired] = useState(false);\r\n const [open, setOpen] = useState(false);\r\n const [recaptchaKey, setRecaptchaKey] = useState(null);\r\n\r\n let auth = getAuth();\r\n\r\n const provider = new GoogleAuthProvider();\r\n provider.addScope('https://www.googleapis.com/auth/contacts.readonly');\r\n // window.recaptchaVerifier = new RecaptchaVerifier('recaptcha-container', {}, auth);\r\n\r\n // const handleClickOpen = () => {\r\n // setOpen(true);\r\n // };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n useEffect(() => {\r\n var min = 1;\r\n var max = 3;\r\n var number = Math.floor(Math.random() * (max - min + 1) + min);\r\n setImageNumber(number);\r\n setLoginPage(true);\r\n if (window.location.origin.includes('localhost')) {\r\n setRecaptchaKey(\"6Lc9IawgAAAAAAdGqgG6DWvF1kFB6WIoe1RHKuLV\");\r\n\r\n } else {\r\n dataService.getSystemParameters().then(results => {\r\n setRecaptchaKey(results.find(x => x.name === \"RecaptchaKey\").value);\r\n });\r\n }\r\n\r\n\r\n }, [])\r\n const recaptchaRef = React.createRef();\r\n const checkLogin = (e) => {\r\n e.preventDefault();\r\n if (email === \"\" || password === \"\") { displayError(); }\r\n else {\r\n // Sign in with email and pass.\r\n signInWithEmailAndPassword(auth, email, password)\r\n .then((userCredential) => {\r\n // Signed in \r\n const user = userCredential.user;\r\n onAuthStateChanged(auth, (user) => {\r\n if (user) {\r\n if (user.emailVerified) {\r\n dataService.getUserByEmail(user.email).then(results => {\r\n props.actions.setUserid(results.id);\r\n props.actions.setUserName(results.firstname);\r\n props.actions.setLastName(results.lastname);\r\n });\r\n props.actions.setEmail(user.email);\r\n\r\n // User is signed in, see docs for a list of available properties\r\n // https://firebase.google.com/docs/reference/js/firebase.User\r\n const uid = user.uid;\r\n props.actions.setLogin(true);\r\n history.push(\"/\");\r\n } else {\r\n setOpen(true);\r\n }\r\n\r\n } else {\r\n\r\n }\r\n });\r\n // ...\r\n }).catch((error) => {\r\n const errorCode = error.code;\r\n const errorMessage = error.message;\r\n // toast.error(errorMessage, { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n displayError();\r\n });\r\n }\r\n }\r\n\r\n const checkRegister = (e) => {\r\n const recaptchaAuth = getAuth();\r\n window.recaptchaVerifier = new RecaptchaVerifier('register-button', {\r\n 'size': 'invisible',\r\n 'callback': (response) => {\r\n console.log(response);\r\n // reCAPTCHA solved, allow signInWithPhoneNumber.\r\n }\r\n }, recaptchaAuth);\r\n e.preventDefault();\r\n // if (phoneNumber === \"\") {\r\n if (email === \"\" || firstName === \"\" || lastName === \"\") {\r\n if (captchaValue === null) {\r\n setRecaptchaRequired(true);\r\n\r\n }\r\n displayError();\r\n } else {\r\n if (captchaValue !== null) {\r\n setRecaptchaRequired(false);\r\n\r\n dataService.requestLogin(firstName, lastName, email).then(response => {\r\n if (response.success === true) {\r\n toast.success('Uw aanvraag werd verzonden! Wij nemen zo snel mogelijk contact op met u!', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n handleSignUp(true);\r\n } else {\r\n toast.error('Er liep iets verkeerd, probeer opnieuw.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n handleSignUp(true);\r\n }\r\n\r\n\r\n });\r\n // Sign in with email and pass.\r\n // createUserWithEmailAndPassword(auth, email, password)\r\n // .then((userCredential) => {\r\n // // Signed in \r\n // const user = userCredential.user;\r\n // const uid = user.uid;\r\n // setLoginPage(true);\r\n // setPassword(\"\");\r\n // dataService.createUser(email, firstName, lastName, uid).then(response => {\r\n\r\n // });\r\n // //Verification\r\n // sendEmailVerification(user)\r\n // .then(() => {\r\n // // Email verification sent!\r\n // toast.success('Verification mail has been sent to: ' + email, { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n // });\r\n // }).catch((error) => {\r\n // const errorCode = error.code;\r\n // const errorMessage = error.message;\r\n // if (errorCode === errorCode) {\r\n // setEmailAlreadyUsed(true);\r\n // }\r\n // // toast.error(errorMessage, { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n\r\n // });\r\n\r\n } else {\r\n setRecaptchaRequired(true);\r\n }\r\n }\r\n }\r\n const handleForgotPassword = () => {\r\n setBadInput(false);\r\n setBadInputText(\"\");\r\n\r\n setForgotPasswordPage(true);\r\n setLoginPage(false);\r\n\r\n }\r\n const handleVerificationMail = (event) => {\r\n setOpen(false);\r\n let auth = getAuth();\r\n\r\n if (email === \"\") {\r\n displayError();\r\n } else {\r\n sendEmailVerification(auth.currentUser)\r\n .then(() => {\r\n // Email verification sent!\r\n // ...\r\n });\r\n }\r\n\r\n\r\n }\r\n const sendPasswordMail = (event) => {\r\n event.preventDefault();\r\n\r\n if (email === \"\") { displayError(); }\r\n else {\r\n sendPasswordResetEmail(auth, email)\r\n .then(() => {\r\n toast.success('Email has been sent to: ' + email, { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n\r\n }).catch((error) => {\r\n const errorCode = error.code;\r\n const errorMessage = error.message;\r\n toast.error(errorMessage, { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n\r\n // ..\r\n });\r\n }\r\n\r\n }\r\n let tempUrl = window.location.origin;\r\n\r\n const handleSignUp = (value) => {\r\n setBadInput(false);\r\n setBadInputText(\"\");\r\n setPassword(\"\");\r\n setForgotPasswordPage(false);\r\n setLoginPage(value);\r\n }\r\n\r\n const displayError = () => {\r\n setBadInput(true);\r\n setBadInputText(\"Incorrect email or password.\");\r\n }\r\n const navigateToHomePage = () => {\r\n history.push(\"/\");\r\n }\r\n\r\n const handleGoogleLogin = () => {\r\n const googleAuth = getAuth();\r\n signInWithPopup(googleAuth, provider)\r\n .then((result) => {\r\n // This gives you a Google Access Token. You can use it to access the Google API.\r\n const credential = GoogleAuthProvider.credentialFromResult(result);\r\n const token = credential.accessToken;\r\n // The signed-in user info.\r\n const user = result.user;\r\n onAuthStateChanged(auth, (user) => {\r\n if (user) {\r\n if (user.emailVerified) {\r\n dataService.getUserByEmail(user.email).then(results => {\r\n props.actions.setUserid(results.id);\r\n props.actions.setUserName(results.firstname);\r\n props.actions.setLastName(results.lastname);\r\n\r\n\r\n });\r\n props.actions.setEmail(user.email);\r\n\r\n // User is signed in, see docs for a list of available properties\r\n // https://firebase.google.com/docs/reference/js/firebase.User\r\n const uid = user.uid;\r\n props.actions.setLogin(true);\r\n history.push(\"/\");\r\n } else {\r\n setOpen(true);\r\n }\r\n\r\n } else {\r\n\r\n }\r\n });\r\n // ...\r\n }).catch((error) => {\r\n // Handle Errors here.\r\n const errorCode = error.code;\r\n const errorMessage = error.message;\r\n // The email of the user's account used.\r\n const email = error.customData.email;\r\n // The AuthCredential type that was used.\r\n const credential = GoogleAuthProvider.credentialFromError(error);\r\n // ...\r\n });\r\n }\r\n\r\n const changeEmail = (event) => {\r\n setEmail(event.target.value);\r\n }\r\n\r\n // const changePhoneNumber = (event) => {\r\n // setPhoneNumber(event.target.value);\r\n // }\r\n const changeLastName = (event) => {\r\n setLastName(event.target.value);\r\n }\r\n\r\n const changeFirstName = (event) => {\r\n setFirstName(event.target.value);\r\n }\r\n\r\n const changePassword = (event) => {\r\n setPassword(event.target.value);\r\n }\r\n\r\n\r\n // window.recaptchaVerifier = new RecaptchaVerifier('recaptcha-container', {}, auth);\r\n // window.recaptchaVerifier = new RecaptchaVerifier('login-button', {\r\n // 'size': 'invisible',\r\n // 'callback': (response) => {\r\n // // reCAPTCHA solved, allow signInWithPhoneNumber.\r\n // checkRegister();\r\n // }\r\n // }, recaptchaAuth);\r\n\r\n // window.recaptchaVerifier = new RecaptchaVerifier('recaptcha-container', {}, recaptchaAuth);\r\n // window.recaptchaVerifier = new RecaptchaVerifier('register-button', {\r\n // 'size': 'invisible',\r\n // 'callback': (response) => {\r\n // // reCAPTCHA solved, allow signInWithPhoneNumber.\r\n // checkLogin();\r\n // }\r\n // }, recaptchaAuth);\r\n\r\n function onChange(value) {\r\n setCaptcha(value);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {/*
\r\n\r\n
*/}\r\n {loginPage === undefined || loginPage === true ?\r\n
\r\n\r\n
\r\n\r\n navigateToHomePage()} alt=\"Taplr Logo\">\r\n\r\n

Sign in

\r\n

Enter your details below to continue

\r\n
\r\n Email\r\n\r\n changeEmail(event)}\r\n InputProps={{\r\n endAdornment:\r\n \r\n
\r\n
,\r\n startAdornment:\r\n \r\n \r\n ,\r\n }}>\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n Password\r\n\r\n changePassword(event)}\r\n InputProps={{\r\n startAdornment:\r\n \r\n \r\n ,\r\n endAdornment: (\r\n \r\n \r\n {showPassword ? : }\r\n \r\n )\r\n }}>\r\n \r\n \r\n handleForgotPassword(true)}>Forgot Password?\r\n\r\n
\r\n {verificationMessage ?\r\n
\r\n

A verification e-mail was sent to {email}, please verify your account before using our app.

\r\n handleVerificationMail()}>Resend the mail?\r\n
\r\n\r\n : }\r\n
\r\n \r\n {/* onClick={checkLogin} */}\r\n {/*

OR

*/}\r\n {/* onClick={checkLogin} */}\r\n {/* */}\r\n
\r\n \r\n
\r\n New to Taplr?\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
: forgotPassword === true ?\r\n
\r\n
\r\n \r\n navigateToHomePage()} alt=\"Taplr Logo\">\r\n\r\n

Forgot password

\r\n

Enter your email below to continue

\r\n
\r\n Email\r\n\r\n changeEmail(event)}\r\n InputProps={{\r\n endAdornment:\r\n \r\n
\r\n
,\r\n startAdornment:\r\n \r\n \r\n ,\r\n }}>\r\n\r\n \r\n \r\n\r\n
\r\n\r\n \r\n {/* onClick={checkLogin} */}\r\n \r\n\r\n {/* \r\n

Back to login-screen: handleSignUp(true)}>Login

\r\n
*/}\r\n
\r\n Already have an account?\r\n \r\n
\r\n
\r\n New to Taplr?\r\n \r\n
\r\n
\r\n
\r\n : forgotPassword === false && loginPage === false ?\r\n\r\n
\r\n
\r\n \r\n navigateToHomePage()} alt=\"Taplr Logo\">\r\n\r\n

Request an account

\r\n

Enter your details below to continue

\r\n
\r\n
\r\n First name\r\n changeFirstName(event)}\r\n InputProps={{\r\n endAdornment:\r\n \r\n
\r\n
,\r\n startAdornment:\r\n \r\n \r\n ,\r\n }}>\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n Last name\r\n changeLastName(event)}\r\n InputProps={{\r\n endAdornment:\r\n \r\n
\r\n
,\r\n startAdornment:\r\n \r\n \r\n ,\r\n }}>\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n Email\r\n\r\n changeEmail(event)}\r\n InputProps={{\r\n endAdornment:\r\n \r\n
\r\n
,\r\n startAdornment:\r\n \r\n \r\n ,\r\n }}>\r\n\r\n \r\n \r\n\r\n
\r\n {/*
\r\n Phone number\r\n\r\n changePhoneNumber(event)}\r\n InputProps={{\r\n endAdornment:\r\n \r\n
\r\n
,\r\n startAdornment:\r\n \r\n \r\n ,\r\n }}>\r\n\r\n \r\n \r\n\r\n
*/}\r\n {/* \r\n
\r\n Password\r\n\r\n changePassword(event)}\r\n InputProps={{\r\n startAdornment:\r\n \r\n \r\n ,\r\n endAdornment: (\r\n \r\n \r\n {showPassword ? : }\r\n \r\n )\r\n }}>\r\n \r\n \r\n handleForgotPassword(true)}>Forgot Password?\r\n\r\n
*/}\r\n {emailAlreadyUsed ? This email address is already in use. : }\r\n
\r\n \r\n
\r\n\r\n {recaptchaRequired ?

Recaptcha is required

: }\r\n\r\n \r\n\r\n \r\n {/* onClick={checkLogin} */}\r\n \r\n {/* \r\n */}\r\n \r\n\r\n\r\n
\r\n\r\n Already have an account?\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 {\"Verify your account!\"}\r\n \r\n \r\n \r\n You're account has not been verified yet. Check your mailbox for our email!\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\nexport default LoginPage;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\r\n loginForm: {\r\n backgroundColor: '#a99985',\r\n height: '100vh',\r\n [theme.breakpoints.up('sm')]: {\r\n width: '45%',\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n display: 'flex',\r\n },\r\n taplrBlocks: {\r\n position: 'absolute',\r\n bottom: '-100px',\r\n right: '-100px',\r\n [theme.breakpoints.down('md')]: {\r\n\r\n bottom: '-35px',\r\n '& img': {\r\n width: '70%',\r\n height: '70%',\r\n }\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n\r\n bottom: '-25px',\r\n '& img': {\r\n width: '50%',\r\n height: '50%',\r\n }\r\n },\r\n },\r\n taplrBlockOne: {\r\n backgroundColor: '#f79222',\r\n height: '50px',\r\n width: '50px',\r\n position: 'absolute',\r\n bottom: '0px',\r\n right: '0px'\r\n },\r\n taplrBlockTwo: {\r\n backgroundColor: 'white',\r\n height: '75px',\r\n width: '75px',\r\n position: 'absolute',\r\n bottom: '-75px',\r\n right: '-75px'\r\n },\r\n taplrBlockThree: {\r\n backgroundColor: '#f79222',\r\n height: '25px',\r\n width: '25px',\r\n position: 'absolute',\r\n bottom: '-25px',\r\n right: '-125px'\r\n },\r\n loginContainer: {\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n },\r\n imageContainer: {\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none',\r\n },\r\n\r\n backgroundColor: \"#e6ccb1\",\r\n width: '55%',\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n backgroundSize: 'cover',\r\n backgroundPosition: 'center',\r\n position: 'relative'\r\n },\r\n imageOverlay: {\r\n height: '100%',\r\n width: '100%',\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n backgroundColor: 'black',\r\n opacity: '0.6',\r\n },\r\n\r\n login: {\r\n flexDirection: 'column',\r\n position: 'relative',\r\n width: '70%',\r\n outline: \"5px solid #F7941E\",\r\n boxShadow: '0 0 15px 5px rgb(0 0 0 / 25%)',\r\n background: \"#C3996B\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"auto\",\r\n marginBottom: \"auto\",\r\n display: \"flex\",\r\n height: 'auto',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n color: \"white !important\",\r\n },\r\n taplrLogo: {\r\n zIndex: '3',\r\n marginTop: \"-17%\",\r\n [theme.breakpoints.up('sm')]: {\r\n width: \"50%\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '70%',\r\n },\r\n cursor: 'pointer',\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n display: \"block\"\r\n }, nothingReceived: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n styleLink: {\r\n fontSize: '12px',\r\n fontWeight: '600',\r\n cursor: 'pointer',\r\n color: \"white\",\r\n },\r\n actionType: {\r\n marginTop: '15px',\r\n marginBottom: '15px'\r\n },\r\n imageStyle: {\r\n height: '30px',\r\n width: '30px',\r\n marginRight: '15px'\r\n },\r\n googleButton: {\r\n backgroundColor: 'white !important',\r\n color: '#6a6a6a !important'\r\n },\r\n signupButton: {\r\n fontSize: '16px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#1D3557 !important',\r\n color: 'white',\r\n '&:hover': {\r\n backgroundColor: 'white !important',\r\n color: '#1D3557 !important',\r\n\r\n }\r\n\r\n },\r\n regButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#ffffff !important',\r\n color: '#C3996B !important',\r\n '&:hover': {\r\n backgroundColor: '#C3996B !important',\r\n color: '#ffffff !important',\r\n\r\n }\r\n },\r\n textField: {\r\n border: \"#f0f0f0\",\r\n\r\n '& .MuiOutlinedInput-root': {\r\n backgroundColor: \"#f0f0f0\",\r\n '&:focus': {\r\n borderColor: \"#1D3557 !important\",\r\n },\r\n },\r\n '& Mui-focused': {\r\n border: \"1px solid #1D3557 !important\",\r\n }\r\n },\r\n nameTextField: {\r\n border: \"#f0f0f0\",\r\n width: '45%',\r\n '& .MuiOutlinedInput-root': {\r\n backgroundColor: \"#f0f0f0\",\r\n '&:focus': {\r\n borderColor: \"#1D3557 !important\",\r\n },\r\n },\r\n '& Mui-focused': {\r\n border: \"1px solid #1D3557 !important\",\r\n }\r\n },\r\n\r\n inputDiv: {\r\n marginTop: \"10px\",\r\n width: '95%',\r\n height: '70px',\r\n position: 'relative',\r\n marginBottom: '20px',\r\n },\r\n divider: {\r\n position: 'absolute',\r\n top: '30px',\r\n left: '40px',\r\n },\r\n dividerName: {\r\n position: 'absolute',\r\n top: '40px',\r\n left: '40px',\r\n },\r\n logInButton: {\r\n backgroundColor: \"#1D3557 !important\",\r\n '&:hover': {\r\n backgroundColor: 'white !important',\r\n color: '#1D3557 !important',\r\n\r\n }\r\n },\r\n nameDiv: {\r\n width: '48%',\r\n position: 'realtive',\r\n marginTop: \"10px\",\r\n height: '70px',\r\n\r\n marginBottom: '20px',\r\n },\r\n pWhatToDo: {\r\n marginBottom: '15px',\r\n },\r\n detailDiv: {\r\n width: '95%',\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n\r\n },\r\n dividerLastName: {\r\n position: 'absolute',\r\n top: '40px',\r\n left: 'calc(49% + 60px)',\r\n },\r\n verifyButton: {\r\n backgroundColor: \"#1D3557 !important\",\r\n },\r\n buttonDiv: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexDirection: 'column'\r\n }\r\n}));","export default __webpack_public_path__ + \"static/media/ResultsIcon.2dd28a4f.svg\";","import React, { useState } from \"react\";\r\nimport Drawer from '@mui/material/Drawer';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport ExitToAppOutlinedIcon from '@mui/icons-material/ExitToAppOutlined';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport FormatListNumberedIcon from '@mui/icons-material/FormatListNumbered';\r\nimport EmojiEventsIcon from '@mui/icons-material/EmojiEvents';\r\nimport PlaylistAddIcon from '@mui/icons-material/PlaylistAdd';\r\nimport AssignmentOutlinedIcon from '@mui/icons-material/AssignmentOutlined'; import Divider from '@mui/material/Divider';\r\nimport CottageIcon from '@mui/icons-material/Cottage';\r\nimport EngineeringIcon from '@mui/icons-material/Engineering';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ExpandLess from '@mui/icons-material/ExpandLess';\r\nimport ExpandMore from '@mui/icons-material/ExpandMore';\r\nimport { getAuth, signOut } from \"firebase/auth\";\r\nimport ManageAccountsIcon from '@mui/icons-material/ManageAccounts';\r\nimport AddLinkIcon from '@mui/icons-material/AddLink';\r\nimport LinkIcon from '@mui/icons-material/Link';\r\nimport ResultsIcon from './ResultsIcon.svg';\r\nimport BarChartIcon from '@mui/icons-material/BarChart';\r\nimport BuildIcon from '@mui/icons-material/Build';\r\n\r\nfunction Menu(props) {\r\n\r\n const classes = useStyles();\r\n\r\n const history = useHistory();\r\n const loggedInState = props.Login.loginState;\r\n const [openCollapse, setOpenCollapse] = useState(false);\r\n\r\n function handleOpenSettings() {\r\n setOpenCollapse(!openCollapse);\r\n }\r\n const auth = getAuth();\r\n\r\n const LogOut = () => {\r\n signOut(auth).then((response) => {\r\n history.push('/login');\r\n props.actions.setLogin(false);\r\n props.actions.setUserid(null);\r\n\r\n // Sign-out successful.\r\n }).catch((error) => {\r\n console.log(error, 'error')\r\n // An error happened.\r\n });\r\n // props.actions.setLogin(false);\r\n // props.actions.setUserid(null);\r\n // if (loggedInState === true) {\r\n // history.push('/login');\r\n // }\r\n }\r\n\r\n let location = history.location.pathname;\r\n\r\n const navigateTo = (destination) => {\r\n history.push(destination);\r\n }\r\n const navigateResults = () => {\r\n props.actions.projectIdAction(null);\r\n history.push('/results');\r\n\r\n }\r\n\r\n const navigateUserSettings = () => {\r\n props.actions.projectIdAction(null);\r\n // props.actions.userInformation(auth);\r\n history.push('/user');\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n

Menu

\r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n navigateTo('/')}\r\n divider={true}>\r\n \r\n \r\n \r\n Homepage\r\n \r\n navigateTo('/create')}\r\n divider={true}>\r\n \r\n \r\n \r\n Create a project\r\n \r\n navigateTo('/manage')}\r\n divider={true}>\r\n \r\n \r\n \r\n Manage projects\r\n \r\n navigateTo('/projectreportoverview')}\r\n divider={true}>\r\n \r\n \r\n \r\n Project overview\r\n \r\n \r\n \r\n \r\n \r\n Results overview\r\n \r\n \r\n \r\n \r\n \r\n User settings\r\n \r\n \r\n \r\n \r\n \r\n Configuration\r\n {openCollapse ? : }\r\n\r\n \r\n \r\n \r\n navigateTo('/createdropdown')} divider={true}\r\n >\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n navigateTo('/dropdownoverview')} divider={true}\r\n >\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n navigateTo('/createapi')} divider={true}\r\n >\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n navigateTo('/externalapioverview')} divider={true}\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 User settings\r\n \r\n \r\n \r\n\r\n \r\n \r\n Terms {\"&\"} Policy\r\n */}\r\n \r\n \r\n\r\n \r\n \r\n Logout\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Menu\r\nconst useStyles = makeStyles({\r\n sideBar: {\r\n color: '#1D3557 !important',\r\n width: '300px',\r\n },\r\n titleHeader: {\r\n color: '#1D3557 !important',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'around',\r\n marginLeft: '25px'\r\n },\r\n drawerItems: {\r\n\r\n },\r\n menuItem: {\r\n marginBottom: '15px',\r\n color: 'rgb(105, 105, 105) !important',\r\n // borderTop: '1px solid grey',\r\n },\r\n menuText: {\r\n paddingTop: '10px',\r\n paddingBottom: '10px',\r\n marginLeft: '15px',\r\n },\r\n iconItem: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n width: '30px',\r\n paddingRight: '10px',\r\n borderRight: '1px solid rgba(0, 0, 0, 0.12)',\r\n fontSize: '25px !important'\r\n },\r\n ImgItem: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n width: '30px',\r\n paddingRight: '10px',\r\n borderRight: '1px solid rgba(0, 0, 0, 0.12)',\r\n },\r\n selectedItem: {\r\n backgroundColor: 'red !important',\r\n },\r\n toggleArrow: {\r\n float: 'right',\r\n marginRight: '0',\r\n marginLeft: 'auto'\r\n },\r\n listItemIcon: {\r\n borderRight: '1px solid rgba(0, 0, 0, 0.12)',\r\n display: 'flex',\r\n paddingRight: '10px',\r\n\r\n justifyContent: 'end'\r\n\r\n },\r\n listItemText: {\r\n color: 'rgb(105, 105, 105) !important',\r\n\r\n paddingLeft: '10px'\r\n },\r\n imageStyle: {\r\n filter: 'contrast(80%)',\r\n opacity: '75%',\r\n width: '30px'\r\n },\r\n});","import React, { useState } from 'react';\r\nimport ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos';\r\nimport Menu from './Menu';\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nfunction TitlePage(props) {\r\n const [menuState, setMenuState] = useState(false)\r\n\r\n const classes = useStyles();\r\n const history = useHistory();\r\n\r\n const Back = () => {\r\n if (history.location.pathname === '/create') {\r\n if (props.wipe) {\r\n props.actions.projectIdAction(null);\r\n props.actions.companyAction(\"\");\r\n props.actions.companyIdAction(\"\");\r\n props.actions.resourceAction(\"\");\r\n props.actions.fromDateAction(null);\r\n props.actions.toDateAction(null);\r\n props.actions.detailsAction([]);\r\n props.actions.projectIdAction(\"\");\r\n props.actions.projectNameAction(\"\");\r\n props.actions.projectQrAction(null);\r\n }\r\n }\r\n\r\n history.goBack();\r\n }\r\n\r\n const openMenu = () => {\r\n setMenuState(true);\r\n }\r\n const closeMenu = () => {\r\n setMenuState(false);\r\n }\r\n const navigateTo = (destination) => {\r\n history.push(destination);\r\n }\r\n\r\n return (\r\n
\r\n\r\n
\r\n
\r\n {props.backbutton === true ?\r\n \r\n \r\n : }\r\n

{props.Text}

\r\n
\r\n
\r\n navigateTo('/')} className={classes.taplrLogo} src={process.env.PUBLIC_URL + \"/images/Taplr.png\"} alt=\"Taplr Logo\">\r\n
\r\n\r\n
\r\n \r\n
\r\n {\"Hi, \" + props.Login.userName}\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default TitlePage;\r\nconst useStyles = makeStyles((theme) => ({\r\n\r\n titleTextStyle: {\r\n marginLeft: \"20px\",\r\n },\r\n\r\n hstyle: {\r\n whiteSpace: 'nowrap',\r\n [theme.breakpoints.up('md')]: {\r\n fontSize: \"2.5rem\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n fontSize: \"1.5rem\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: \"1.2rem\",\r\n\r\n },\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: 'white'\r\n },\r\n\r\n hstylewithoutbutton: {\r\n whiteSpace: 'nowrap',\r\n [theme.breakpoints.up('md')]: {\r\n fontSize: \"2.5rem\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n fontSize: \"1.5rem\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: \"1.2rem\",\r\n },\r\n marginLeft: '54px',\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n marginLeft: '0px',\r\n },\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: 'white'\r\n },\r\n\r\n titleStyle: {\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#C3996B !important\",\r\n justifyContent: \"space-between\",\r\n position: 'fixed',\r\n zIndex: '955',\r\n top: '0',\r\n width: '100%',\r\n [theme.breakpoints.down('md')]: {\r\n height: '100px',\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n height: '100px',\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n height: '100px',\r\n flexDirection: 'column-reverse',\r\n },\r\n\r\n\r\n },\r\n headerLeft: {\r\n paddingLeft: \"5%\",\r\n alignItems: 'center',\r\n display: 'flex',\r\n width: '33%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n paddingLeft: \"0%\",\r\n position: \"absolute\",\r\n top: '55px',\r\n justifyContent: 'center'\r\n },\r\n color: 'white'\r\n\r\n },\r\n headerMiddle: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n justifyContent: 'center',\r\n position: \"absolute\",\r\n top: '5px',\r\n height: 'auto'\r\n },\r\n\r\n },\r\n aubWerk: {\r\n display: 'flex',\r\n fontSize: '1.2rem',\r\n\r\n justifyContent: 'center !important',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none !important',\r\n\r\n },\r\n alignItems: 'center !important'\r\n\r\n\r\n },\r\n headerRight: {\r\n width: '33%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n position: 'fixed',\r\n top: '105px',\r\n paddingRight: '5px'\r\n },\r\n\r\n display: 'flex',\r\n justifyContent: 'end',\r\n color: 'white',\r\n [theme.breakpoints.up('sm')]: {\r\n paddingRight: \"5%\",\r\n },\r\n }, toggleButton: {\r\n [theme.breakpoints.down('sm')]: {\r\n background: \"#C3996B !important\",\r\n },\r\n },\r\n arrowBack: {\r\n zIndex: '999',\r\n color: 'white',\r\n padding: '15px',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '5px',\r\n position: 'absolute !important',\r\n left: '25px',\r\n fontSize: '50px !important',\r\n top: '-50%'\r\n },\r\n cursor: 'pointer'\r\n },\r\n taplrLogo: {\r\n marginTop: '15px',\r\n marginBottom: '15px',\r\n width: '150px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100px',\r\n height: 'auto',\r\n maxHeight: '46px'\r\n },\r\n cursor: 'pointer',\r\n },\r\n}));","import React, { useState, useEffect } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Button from '@mui/material/Button';\r\nimport { useHistory } from 'react-router-dom';\r\nimport TitlePage from '../../Shared/TitlePage';\r\n\r\nfunction SelectMenuPage(props) {\r\n const [menuState, setMenuState] = useState(false)\r\n const classes = useStyles();\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n // props.actions.projectIdAction(null);\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n const openMenu = () => {\r\n setMenuState(true);\r\n }\r\n const closeMenu = () => {\r\n setMenuState(false);\r\n }\r\n const navigateTo = (destination) => {\r\n history.push(destination);\r\n }\r\n return (\r\n
\r\n \r\n {/* \r\n
\r\n
\r\n

What do you want to do?

\r\n
\r\n
\r\n navigateTo('/')} className={classes.taplrLogo} src={process.env.PUBLIC_URL + \"/images/Taplr.png\"} alt=\"Taplr Logo\">\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 */} Create a new project linked to a specific location.\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 */} Manage existing projects. (Edit, delete, duplicate,...)\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 */} View all your projects. (See results, rapports,...)\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {/* \r\n */} Configuration\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\nexport default SelectMenuPage;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\r\n container: {\r\n borderRadius: \"8px\",\r\n [theme.breakpoints.up('lg')]: {\r\n maxWidth: \"50%\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n maxWidth: \"60%\",\r\n },\r\n\r\n [theme.breakpoints.down('md')]: {\r\n maxWidth: \"90%\",\r\n\r\n },\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"25px\"\r\n },\r\n\r\n\r\n titleTextStyle: {\r\n display: \"flex\",\r\n marginLeft: \"20px\",\r\n },\r\n boxStyle: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n paddingTop: \"18px\",\r\n paddingBottom: \"18px\",\r\n marginBottom: '25px',\r\n paddingLeft: '30px',\r\n paddingRight: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column'\r\n },\r\n\r\n },\r\n menuItem: {\r\n color: '#1D3557',\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '1rem',\r\n width: '100% !important',\r\n marginBottom: '15px'\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100% !important',\r\n fontSize: '1.2rem',\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n\r\n iconStyle: {\r\n verticalAlign: \"-8px\",\r\n marginRight: \"4px\"\r\n },\r\n link: {\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n },\r\n },\r\n linkButton: {\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n minHeight: \"46.8px\",\r\n height: \"90%\",\r\n padding: \"10px\",\r\n fontSize: \"1rem\",\r\n },\r\n\r\n [theme.breakpoints.up('lg')]: {\r\n width: '250px',\r\n minWidth: \"250px\",\r\n height: \"40px\",\r\n fontSize: \"1.2rem\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n width: '200px',\r\n minWidth: \"200px\",\r\n fontSize: \"1.2rem\",\r\n },\r\n\r\n background: \"#C3996B !important\",\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n hstyle: {\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: \"2rem\",\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n fontSize: \"2.5rem\",\r\n },\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: 'white',\r\n whiteSpace: 'nowrap'\r\n // color: \"#1D3557\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"5%\",\r\n paddingRight: \"5%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#C3996B !important\",\r\n justifyContent: \"space-between\",\r\n color: 'white'\r\n\r\n },\r\n headerLeft: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n width: '33%'\r\n },\r\n headerMiddle: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n\r\n },\r\n headerRight: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n color: 'white'\r\n },\r\n arrowBack: {\r\n padding: '15px',\r\n cursor: 'pointer'\r\n },\r\n taplrLogo: {\r\n width: '150px',\r\n cursor: 'pointer'\r\n }\r\n}));","import React from 'react';\r\nimport Button from '@mui/material/Button'\r\n\r\nfunction ButtonNormalText(props) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nconst ButtonStyle = {\r\n background: \"#C3996B\"\r\n}\r\n\r\nexport default ButtonNormalText;","export const controlTypes = { 'COUNTER': 1, 'STOPWATCH': 2, 'FREETEXT': 3, 'DATALIST': 4, 'SCANNER': 5, 'CAMERA': 6, 'EXTERNALAPI': 7}\r\nexport const ProjectFilterTypes = { 'CUSTOMER': 0, 'PROJECT_NAME': 1, 'LOCATION_NAME': 2, 'DESCRIPTION': 3}\r\nexport const dataListTypes = { 'NAME': 0 }\r\nexport const ExternalApiTypes = { 'NAME': 0 }\r\n","import React from 'react';\r\nimport { makeStyles, TextField } from '@material-ui/core';\r\nimport { ProjectFilterTypes } from '../../../Config/constants';\r\n\r\n\r\nexport default function FilterResultsRow(props) {\r\n const classes = useStyles();\r\n const getValue = (type) => {\r\n\r\n let filter = props.filters.find(x => x.type === type)\r\n\r\n if (filter) {\r\n return filter.filterValue\r\n }\r\n else {\r\n return \"\"\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {/*CompanyName */}\r\n \r\n 0 ? props.filters[0].type === ProjectFilterTypes.CUSTOMER : false}\r\n id=\"outlined-search\"\r\n label=\"\"\r\n type=\"search\"\r\n variant=\"outlined\"\r\n value={getValue(ProjectFilterTypes.CUSTOMER)}\r\n className={classes.textField}\r\n size=\"small\"\r\n onChange={(e) => props.updateFilters(ProjectFilterTypes.CUSTOMER, e)} />\r\n\r\n \r\n\r\n {/*ProjectName */}\r\n \r\n 0 ? props.filters[0].type === ProjectFilterTypes.PROJECT_NAME : false}\r\n id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\"\r\n value={getValue(ProjectFilterTypes.PROJECT_NAME)}\r\n className={classes.textField} size=\"small\"\r\n onChange={(e) => props.updateFilters(ProjectFilterTypes.PROJECT_NAME, e)} />\r\n \r\n\r\n {/*Resource*/}\r\n \r\n 0 ? props.filters[0].type === ProjectFilterTypes.LOCATION_NAME : false}\r\n id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\"\r\n value={getValue(ProjectFilterTypes.LOCATION_NAME)}\r\n className={classes.textField} size=\"small\"\r\n onChange={(e) => props.updateFilters(ProjectFilterTypes.LOCATION_NAME, e)} />\r\n \r\n {/* {props.groupType !== salesorderGroupingTypes.SLICE_TYPE && \r\n */}{/* 0 ? props.filters[0].type === customerProductFilterTypes.SLICE_TYPE : false} id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\" value={getValue(customerProductFilterTypes.SLICE_TYPE)} className={classes.textField} size=\"small\" onChange={(e) => props.updateFilters(customerProductFilterTypes.SLICE_TYPE, e)} />\r\n } */}\r\n \r\n 0 ? props.filters[0].type === ProjectFilterTypes.DESCRIPTION : false}\r\n id=\"outlined-search\"\r\n label=\"\"\r\n type=\"search\"\r\n variant=\"outlined\"\r\n value={getValue(ProjectFilterTypes.DESCRIPTION)}\r\n className={classes.textField}\r\n size=\"small\"\r\n onChange={(e) => props.updateFilters(ProjectFilterTypes.DESCRIPTION, e)} />\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n filterRow: {\r\n marginBottom: '10px',\r\n width: '100%',\r\n },\r\n leftCell: {\r\n fontSize: \"14px\",\r\n color: \"#020100\",\r\n padding: \"10px\",\r\n fontWeight: \"normal\",\r\n paddingLeft: \"20px\",\r\n },\r\n midCell: {\r\n paddingTop: '5px',\r\n paddingBottom: '5px',\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#020100\",\r\n height: \"40px\",\r\n },\r\n rightCell: {\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#020100\",\r\n paddingLeft: \"10px\",\r\n },\r\n textField: {\r\n backgroundColor: \"white\",\r\n width: \"90%\",\r\n },\r\n checkBox: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n float: \"left\"\r\n },\r\n icon: {\r\n borderRadius: 3,\r\n width: 16,\r\n height: 16,\r\n boxShadow: 'inset 0 0 0 1px rgba(16,22,26,.2), inset 0 -1px 0 rgba(16,22,26,.1)',\r\n backgroundColor: '#f5f8fa',\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0))',\r\n 'input:hover ~ &': {\r\n backgroundColor: '#ebf1f5',\r\n },\r\n 'input:disabled ~ &': {\r\n boxShadow: 'none',\r\n background: 'rgba(206,217,224,.5)',\r\n },\r\n },\r\n checkedIcon: {\r\n backgroundColor: \"black\",\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))',\r\n '&:before': {\r\n display: 'block',\r\n width: 16,\r\n height: 16,\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath\" +\r\n \" fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 \" +\r\n \"1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='%23fff'/%3E%3C/svg%3E\\\")\",\r\n content: '\"\"',\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: \"black\",\r\n },\r\n },\r\n}));\r\n","export const SET_COMPANY = 'SET_COMPANY';\r\nexport const SET_COMPANYID = 'SET_COMPANYID';\r\nexport const SET_RESOURCE = 'SET_RESOURCE';\r\nexport const SET_FROMDATE = 'SET_FROMDATE';\r\nexport const SET_TODATE = 'SET_TODATE';\r\nexport const SET_DETAILS = 'SET_DETAILS';\r\nexport const SET_PROJECTID = 'SET_PROJECTID';\r\nexport const SET_PROJECTNAME = 'SET_PROJECTNAME';\r\nexport const SET_PROJECTQR = 'SET_PROJECTQR';\r\nexport const SET_PROJECTREPORT = 'SET_PROJECTREPORT';","import * as types from './ProjectCopyActionTypes.js';\r\n\r\nexport const companyAction = (company) => {\r\n return {\r\n type: types.SET_COMPANY,\r\n payload: company\r\n };\r\n};\r\n\r\nexport const companyIdAction = (companyId) => {\r\n return {\r\n type: types.SET_COMPANYID,\r\n payload: companyId\r\n };\r\n};\r\n\r\nexport const resourceAction = (resource) => {\r\n return {\r\n type: types.SET_RESOURCE,\r\n payload: resource\r\n };\r\n};\r\n\r\nexport const fromDateAction = (fromDate) => {\r\n return {\r\n type: types.SET_FROMDATE,\r\n payload: fromDate\r\n };\r\n};\r\n\r\nexport const toDateAction = (toDate) => {\r\n return {\r\n type: types.SET_TODATE,\r\n payload: toDate\r\n };\r\n};\r\n\r\nexport const detailsAction = (details) => {\r\n return {\r\n type: types.SET_DETAILS,\r\n payload: details\r\n };\r\n};\r\n\r\nexport const projectIdAction = (projectId) => {\r\n return {\r\n type: types.SET_PROJECTID,\r\n payload: projectId\r\n };\r\n};\r\n\r\nexport const projectNameAction = (projectName) => {\r\n return {\r\n type: types.SET_PROJECTNAME,\r\n payload: projectName\r\n };\r\n};\r\n\r\nexport const projectQrAction = (projectQr) => {\r\n return {\r\n type: types.SET_PROJECTQR,\r\n payload: projectQr\r\n };\r\n};\r\n\r\nexport const getAllTypes = (types) => {\r\n return {\r\n type: types.SET_TYPES,\r\n payload: types\r\n };\r\n};\r\n\r\nexport const projectReportAction = (report) => {\r\n return {\r\n type: types.SET_PROJECTREPORT,\r\n payload: report\r\n };\r\n};\r\n","export const SET_LOGIN = 'SET_LOGIN';\r\nexport const SET_USERID = 'SET_USERID';\r\nexport const SET_USERNAME = 'SET_USERNAME';\r\nexport const SET_EMAIL = 'SET_EMAIL';\r\nexport const SET_LASTNAME = 'SET_LASTNAME';\r\n","import * as types from './LoginActionTypes';\r\n\r\nexport const setLogin = (loginstate) => {\r\n return {\r\n type: types.SET_LOGIN,\r\n payload: loginstate\r\n };\r\n};\r\n\r\nexport const setUserid = (userId) => {\r\n return {\r\n type: types.SET_USERID,\r\n payload: userId\r\n };\r\n};\r\n\r\n\r\n\r\nexport const setUserName = (userName) => {\r\n return {\r\n type: types.SET_USERNAME,\r\n payload: userName\r\n };\r\n};\r\nexport const setLastName = (lastName) => {\r\n return {\r\n type: types.SET_LASTNAME,\r\n payload: lastName\r\n };\r\n};\r\n\r\nexport const setEmail = (email) => {\r\n console.log(types.SET_EMAIL, email)\r\n return {\r\n type: types.SET_EMAIL,\r\n payload: email\r\n };\r\n};","export const SET_LISTNAME = 'SET_LISTNAME';\r\nexport const SET_LISTDESCRIPTION = 'SET_LISTDESCRIPTION';\r\nexport const SET_LISTITEMS = 'SET_LISTITEMS';\r\nexport const SET_LISTISACTIVE = 'SET_ISACTIVE';\r\nexport const SET_LISTID = 'SET_ID';","import * as types from './ListCopyActionTypes.js';\r\n\r\nexport const listNameAction = (listName) => {\r\n return {\r\n type: types.SET_LISTNAME,\r\n payload: listName\r\n };\r\n};\r\n\r\nexport const listDescriptionAction = (listDescription) => {\r\n return {\r\n type: types.SET_LISTDESCRIPTION,\r\n payload: listDescription\r\n };\r\n};\r\n\r\nexport const listItemsAction = (listItems) => {\r\n return {\r\n type: types.SET_LISTITEMS,\r\n payload: listItems\r\n };\r\n};\r\n\r\nexport const listIsActiveAction = (listIsActive) => {\r\n return {\r\n type: types.SET_LISTISACTIVE,\r\n payload: listIsActive\r\n };\r\n};\r\n\r\nexport const listIdAction = (listId) => {\r\n return {\r\n type: types.SET_LISTID,\r\n payload: listId\r\n };\r\n};","export const SET_EXTERNALAPINAME = 'SET_EXTERNALAPINAME';\r\nexport const SET_EXTERNALAPIDESCRIPTION = 'SET_EXTERNALAPIDESCRIPTION';\r\nexport const SET_EXTERNALAPIKEY = 'SET_EXTERNALAPIKEY';\r\nexport const SET_EXTERNALAPIITEMS = 'SET_EXTERNALAPIITEMS';\r\nexport const SET_EXTERNALAPIID = 'SET_EXTERNALAPIID';","import * as types from './ExternalAPiCopyActionTypes.js';\r\n\r\nexport const externalApiNameAction = (externalApiName) => {\r\n return {\r\n type: types.SET_EXTERNALAPINAME,\r\n payload: externalApiName\r\n };\r\n};\r\n\r\nexport const externalApiDescriptionAction = (externalApiDescription) => {\r\n return {\r\n type: types.SET_EXTERNALAPIDESCRIPTION,\r\n payload: externalApiDescription\r\n };\r\n};\r\n\r\nexport const externalApiKeyAction = (externalApiKey) => {\r\n return {\r\n type: types.SET_EXTERNALAPIKEY,\r\n payload: externalApiKey\r\n };\r\n};\r\n\r\nexport const externalApiItemsAction = (externalApiItems) => {\r\n return {\r\n type: types.SET_EXTERNALAPIITEMS,\r\n payload: externalApiItems\r\n };\r\n};\r\n\r\nexport const externalApiIdAction = (externalApiId) => {\r\n return {\r\n type: types.SET_EXTERNALAPIID,\r\n payload: externalApiId\r\n };\r\n};","import React, { useEffect, useState } from 'react';\r\nimport { bindActionCreators, compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport * as Actions from '../../../../Reducers/actions'\r\nimport { useHistory } from 'react-router-dom';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\nimport { dataService } from \"../../../../Services/data/data.service\";\r\n\r\n\r\nfunction ProjectButton(props) {\r\n const [row, setRow] = useState([]);\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n setRow(props.data);\r\n }, [props.row])\r\n const getEditedDetails = (details) => {\r\n return details.map(x => ({ description: x.description, typeId: x.controlTypeID, id: x.id, edit: false, sequence: x.sequence, color: x.color, dataListId: x.dataListId })).sort((a, b) => b.sequence + a.sequence);\r\n }\r\n\r\n const SaveAndRedirect = () => {\r\n let TempMeasurementRows;\r\n dataService.getAllProjectInfoByProjectID(props.data.projectId).then(results => {\r\n TempMeasurementRows = (results.map(\r\n x => x.details.map(\r\n y => ({\r\n details: getEditedDetails(x.details),\r\n projectId: x.projectId,\r\n toDate: x.toDate,\r\n fromDate: x.fromDate,\r\n Id: y.id,\r\n typeId: y.controlTypeID,\r\n color: y.color,\r\n companyId: x.companyId,\r\n qrCode: x.qrCode,\r\n companyName: x.companyName,\r\n projectName: x.projectName,\r\n resourceName: x.resourceName,\r\n description: y.description,\r\n sequence: y.sequence\r\n })\r\n\r\n )))\r\n \r\n props.actions.companyAction(props.data.companyName);\r\n props.actions.companyIdAction(props.data.companyId);\r\n props.actions.resourceAction(props.data.resourceName);\r\n props.actions.fromDateAction(props.data.fromDate);\r\n props.actions.toDateAction(props.data.toDate);\r\n props.actions.detailsAction(TempMeasurementRows[0][0].details);\r\n props.actions.projectIdAction(props.data.projectId);\r\n props.actions.projectNameAction(props.data.projectName);\r\n props.actions.projectQrAction(props.data.qrCode);\r\n history.push(\"/modify\");\r\n });\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n projects: state.projects,\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n actions: bindActionCreators(Actions, dispatch)\r\n})\r\n\r\nexport default compose(connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n))(ProjectButton);","export default __webpack_public_path__ + \"static/media/NoResults.41ade0ad.png\";","import React, { useEffect, useState, useRef } from 'react';\r\nimport Table from '@mui/material/Table';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport { Divider, TableContainer } from '@mui/material';\r\nimport TableFooter from '@mui/material/TableFooter';\r\nimport TablePagination from '@mui/material/TablePagination';\r\nimport FilterResultsRow from '../../../Shared/Tables/FilterResultsRow';\r\nimport PropTypes from 'prop-types';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport FirstPageIcon from '@mui/icons-material/FirstPage';\r\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft';\r\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight';\r\nimport LastPageIcon from '@mui/icons-material/LastPage';\r\nimport Paper from '@mui/material/Paper';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SortByAlphaIcon from '@mui/icons-material/SortByAlpha';\r\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport ButtonNormalText from '../../../Shared/Buttons/ButtonNormalText';\r\nimport { dataService } from '../../../../Services/data/data.service';\r\nimport { useHistory } from 'react-router-dom';\r\nimport ProjectButton from './ProjectButton';\r\nimport Tooltip, { tooltipClasses } from '@mui/material/Tooltip';\r\nimport { styled } from '@mui/material/styles';\r\nimport Typography from '@mui/material/Typography';\r\n\r\nimport NoResults from '../../../../../src/Images/NoResults.png'\r\n\r\n\r\n\r\nfunction TablePaginationActions(props) {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const { count, page, rowsPerPage, onPageChange } = props;\r\n\r\n const handleFirstPageButtonClick = (event) => {\r\n onPageChange(event, 0);\r\n };\r\n\r\n const handleBackButtonClick = (event) => {\r\n onPageChange(event, page - 1);\r\n };\r\n\r\n const handleNextButtonClick = (event) => {\r\n onPageChange(event, page + 1);\r\n };\r\n\r\n const handleLastPageButtonClick = (event) => {\r\n onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\r\n };\r\n\r\n return (\r\n
\r\n \r\n {theme.direction === 'rtl' ? : }\r\n \r\n \r\n {theme.direction === 'rtl' ? : }\r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label=\"next page\"\r\n >\r\n {theme.direction === 'rtl' ? : }\r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label=\"last page\"\r\n >\r\n {theme.direction === 'rtl' ? : }\r\n \r\n
\r\n );\r\n}\r\n\r\nTablePaginationActions.propTypes = {\r\n count: PropTypes.number.isRequired,\r\n onPageChange: PropTypes.func.isRequired,\r\n page: PropTypes.number.isRequired,\r\n rowsPerPage: PropTypes.number.isRequired,\r\n};\r\n\r\nexport default function TableResults(props) {\r\n const history = useHistory();\r\n const classes = useStyles();\r\n const [page, setPage] = useState(0);\r\n const [rowsPerPage, setRowsPerPage] = useState(100);\r\n const [open, setOpen] = useState(false);\r\n const [image, setImage] = useState(\"\");\r\n const [selectAll, setSelectAll] = useState(false)\r\n const [imageLink, setImageLink] = useState(\"\");\r\n\r\n useEffect(() => {\r\n if (props.selectedProject === true) {\r\n setSelectAll(true);\r\n }\r\n dataService.getSystemParameters().then(results => {\r\n setImageLink(results.find(x => x.name === \"ImageLink\").value)\r\n });\r\n }, []);\r\n // Avoid a layout jump when reaching the last page with empty rows.\r\n\r\n const handleChangePage = (event, newPage) => {\r\n setPage(newPage);\r\n };\r\n\r\n const handleChangeRowsPerPage = (event) => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n };\r\n\r\n const handleDialogOpen = (ImageId) => {\r\n dataService.GetImageById(ImageId).then(response => {\r\n setImage(response.image)\r\n })\r\n setOpen(true);\r\n }\r\n\r\n const handleDialogClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n const formatDate = (date) => {\r\n if (date) {\r\n let d = new Date(date);\r\n let hours = d.getHours() < 10 ? '0' + d.getHours() : d.getHours();\r\n let minutes = d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes();\r\n let seconds = d.getSeconds() < 10 ? '0' + d.getSeconds() : d.getSeconds();\r\n let month = (d.getMonth() + 1) < 10 ? '0' + (d.getMonth() + 1) : (d.getMonth() + 1);\r\n let day = d.getDate() < 10 ? '0' + d.getDate() : d.getDate();\r\n return day + \"/\" + (month) + \"/\" + d.getFullYear() + \" \" + hours + \":\" + minutes + \":\" + seconds;\r\n }\r\n return \"\";\r\n }\r\n\r\n const HeadStyle = {\r\n backgroundColor: \"#e0dce4\"\r\n }\r\n\r\n const centerStyle = {\r\n textAlign: \"center\",\r\n }\r\n\r\n const selectAllCheckBoxes = () => {\r\n var isSelected = selectAll\r\n setSelectAll(!selectAll)\r\n props.selectAll(isSelected)\r\n }\r\n\r\n const HtmlTooltip = styled(({ className, ...props }) => (\r\n \r\n ))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: '#f5f5f9',\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n maxWidth: 220,\r\n fontSize: theme.typography.pxToRem(12),\r\n border: '1px solid #dadde9',\r\n },\r\n }));\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.filterOn && }\r\n {props.rows.length === 0 || props.rows === {} ?\r\n \r\n \r\n\r\n : }\r\n {(rowsPerPage > 0 && props.rows.length === 0 || props.rows.length\r\n ? props.rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n : props.rows\r\n ).map((row, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {row.commentId !== null && row.commentId !== 0 ?\r\n \r\n :\r\n \r\n }\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n {props.rows.length === 0 || props.rows === {} ?\r\n \r\n \r\n : \r\n \r\n \r\n \r\n }\r\n
selectAllCheckBoxes()} />\r\n \r\n
\r\n \r\n props.handleSorting('companyName')}>\r\n \r\n \r\n \r\n Customer\r\n \r\n props.toggleFilter()}>\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n props.handleSorting('projectName')}>\r\n \r\n \r\n \r\n Project name\r\n \r\n props.toggleFilter()}>\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n props.handleSorting('resourceName')}>\r\n \r\n \r\n \r\n Location\r\n \r\n props.toggleFilter()}>\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n props.handleSorting('description')}>\r\n \r\n \r\n \r\n Description\r\n \r\n props.toggleFilter()}>\r\n \r\n \r\n \r\n
\r\n
\r\n
Value\r\n \r\n
\r\n \r\n props.handleSorting('startTime')}>\r\n \r\n \r\n \r\n
\r\n Start Time\r\n
\r\n
\r\n
\r\n \r\n Finished\r\n \r\n \r\n \r\n Project\r\n \r\n
\r\n
\r\n No results available for
these filter criteria
\r\n\r\n \"\"\r\n
\r\n\r\n
\r\n props.onCheckChanged(row.id)}\r\n />\r\n {row.companyName}{row.projectName}{row.resourceName}{row.description}\r\n \r\n {row.commentText === \"\" && row.commentImage === \"\" ?\r\n No comment recorded.\r\n :\r\n
\r\n {row.commentText !== \"\" ?\r\n
\r\n {row.commentText}\r\n {row.commentImage !== \"\" && row.commentImage !== null ?\r\n
\r\n \r\n
\r\n :\r\n \r\n }\r\n
\r\n :\r\n \r\n }\r\n {row.commentImage !== \"\" && row.commentImage !== null ?\r\n \r\n :\r\n \r\n }
\r\n }\r\n \r\n }\r\n >\r\n {\r\n (row.thumbnail === null) ?\r\n (row.measurementValue === \"\" || row.measurementValue === null ? '/' : row.measurementValue) :\r\n
\r\n handleDialogOpen(row.imageId)}>\r\n \r\n \r\n \r\n \r\n {row.description}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Close\r\n \r\n \r\n
\r\n }
\r\n \r\n
\r\n {\r\n (row.thumbnail === null) ?\r\n (row.measurementValue !== \"\" ? row.measurementValue : \"/\") :\r\n
\r\n handleDialogOpen(row.imageId)}>\r\n \r\n \r\n \r\n \r\n {row.description}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Close\r\n \r\n \r\n
\r\n }
\r\n
{formatDate(row.startTime)}{row.running === 'True' ?\r\n \r\n :\r\n \r\n }\r\n x.projectId === row.projectId)}> \r\n
\r\n
\r\n )\r\n}\r\nconst useStyles = makeStyles((theme) => ({\r\n valueStyle: {\r\n whiteSpace: 'wrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n display: 'block',\r\n maxWidth: '250px'\r\n },\r\n tableFooter: {\r\n width: '100%'\r\n },\r\n footer: {\r\n display: 'flex',\r\n },\r\n tableHeadRow: {\r\n\r\n },\r\n tableHead: {\r\n height: '42px',\r\n borderRight: '2px solid #e6ecf0',\r\n },\r\n titleSearch: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n icons: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n imageStyle:{\r\n marginTop: '15px',\r\n height: '100px',\r\n width: '100px'\r\n }\r\n}));","import TextField from '@mui/material/TextField';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { dataService } from '../../../../Services/data/data.service';\r\n\r\nfunction DropdownLocations(props) {\r\n const [locations, setLocations] = useState([]);\r\n const [selectedLocation, setSelectedLocation] = useState(null);\r\n\r\n useEffect(() => {\r\n let tempLocations = [];\r\n if (props.projectCopy === null) {\r\n dataService.getProjectLocationsByUserId(props.Login.userid, props.fromDate, props.toDate).then(result => {\r\n if (result.length > 0) {\r\n tempLocations = result.map(x => ({ location: x.resourceDescription }));\r\n setLocations(result.map(x => ({ location: x.resourceDescription })));\r\n if (props.projectCopy !== null && props.projectCopy !== undefined && tempLocations.length > 0 && props.projectCopy.projectId !== null) {\r\n let index = tempLocations.find(x => x.location === props.projectCopy.resource);\r\n if (index) {\r\n setSelectedLocation(index.location);\r\n }\r\n }\r\n }\r\n });\r\n } else {\r\n tempLocations.push({location: props.projectCopy.resource})\r\n setLocations(tempLocations);\r\n if (props.projectCopy !== null && props.projectCopy !== undefined && props.projectCopy.projectId !== null) {\r\n setSelectedLocation(props.projectCopy.resource);\r\n }\r\n }\r\n\r\n\r\n }, [props.refresh])\r\n\r\n return (\r\n
\r\n {\r\n locations.length > 0 && selectedLocation !== null ?\r\n
\r\n {\r\n props.action(newValue)\r\n }}\r\n inputValue={selectedLocation}\r\n\r\n getOptionLabel={(option) => option.location || \"\"}\r\n renderInput={(params) => }\r\n />\r\n
\r\n :\r\n
\r\n {\r\n props.action(newValue)\r\n }}\r\n\r\n getOptionLabel={(option) => option.location || \"\"}\r\n renderInput={(params) => }\r\n />\r\n
\r\n }
\r\n );\r\n\r\n}\r\n\r\nexport default DropdownLocations","import TextField from '@mui/material/TextField';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { dataService } from '../../../../Services/data/data.service';\r\n\r\nfunction DropdownProjectNames(props) {\r\n const [projectNames, setProjectNames] = useState([]);\r\n const [selectedProject, setSelectedProject] = useState(null);\r\n\r\n useEffect(() => {\r\n if (props.projectCopy === null) {\r\n dataService.getProjectNamesByUserId(props.Login.userid, props.fromDate, props.toDate).then(result => {\r\n if (result.length > 0) {\r\n setProjectNames(result.map(x => ({ projectName: x.projectName })));\r\n }\r\n });\r\n } else {\r\n let tempProjects = [];\r\n tempProjects.push({projectName: props.projectCopy.projectName})\r\n setProjectNames(tempProjects);\r\n if (props.projectCopy !== null && props.projectCopy !== undefined && props.projectCopy.projectId !== null) {\r\n setSelectedProject(props.projectCopy.projectName);\r\n }\r\n }\r\n\r\n }, [props.refresh]);\r\n \r\n return (\r\n
\r\n {\r\n projectNames.length > 0 && selectedProject !== null ?\r\n
\r\n {\r\n props.action(newValue)\r\n }}\r\n inputValue={selectedProject}\r\n\r\n getOptionLabel={(option) => option.projectName || \"\"}\r\n renderInput={(params) => }\r\n />\r\n
\r\n :\r\n
\r\n {\r\n props.action(newValue)\r\n }}\r\n\r\n getOptionLabel={(option) => option.projectName || \"\"}\r\n renderInput={(params) => }\r\n />\r\n
\r\n }
\r\n\r\n );\r\n}\r\n\r\nexport default DropdownProjectNames","import React from \"react\";\r\nimport TextField from '@mui/material/TextField';\r\n//import AdapterDateFns from '@mui/lab/AdapterDateFns';\r\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\n//import LocalizationProvider from '@mui/lab/LocalizationProvider';\r\n//import DatePicker from '@mui/lab/DatePicker';\r\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\r\n\r\nfunction MyDateTimePicker(props) {\r\n return (\r\n \r\n {\r\n props.action(event)\r\n }}\r\n renderInput={(params) => }\r\n />\r\n \r\n );\r\n}\r\nexport default MyDateTimePicker;","import React, { useEffect, useState, createRef } from \"react\";\r\nimport { makeStyles } from '@material-ui/core';\r\nimport { Chart, CommonSeriesSettings, Legend, ArgumentAxis, Label, Series, Tooltip, ValueAxis, Grid, MinorGrid, CommonPaneSettings, Export, Border, ZoomAndPan, VisualRange, } from 'devextreme-react/chart';\r\nimport { controlTypes } from '../../../../Config/constants';\r\n\r\nexport default function FilterListRow(props) {\r\n const [labelData, setLabelData] = useState([]);\r\n useEffect(() => {\r\n setLabelData([]);\r\n }, [props.timeRange, props.refresh, props.endValue, props.startValue]);\r\n\r\n function getRGB(c) {\r\n return parseInt(c, 16) || c\r\n }\r\n\r\n function getsRGB(c) {\r\n return getRGB(c) / 255 <= 0.03928\r\n ? getRGB(c) / 255 / 12.92\r\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4)\r\n }\r\n\r\n function getLuminance(hexColor) {\r\n if (hexColor.includes('#') && hexColor !== undefined) {\r\n return (\r\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\r\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\r\n 0.0722 * getsRGB(hexColor.substr(-2))\r\n )\r\n } else {\r\n return (\r\n 0.2126 * hexColor +\r\n 0.7152 * hexColor +\r\n 0.0722 * hexColor\r\n )\r\n }\r\n }\r\n\r\n function getContrast(f, b) {\r\n const L1 = getLuminance(f)\r\n const L2 = getLuminance(b)\r\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05)\r\n }\r\n\r\n function getTextColor(bgColor) {\r\n if (bgColor === null) {\r\n return '#ffffff';\r\n } else {\r\n const whiteContrast = getContrast(bgColor, '#ffffff')\r\n const blackContrast = getContrast(bgColor, '#000000')\r\n return whiteContrast > blackContrast ? '#ffffff' : '#000000';\r\n }\r\n }\r\n\r\n function customizeValueAxis(e) {\r\n if (e.valueText.includes('PM') || e.valueText.includes('AM')) {\r\n let date = new Date(e.value);\r\n let hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();\r\n let minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();\r\n let seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();\r\n let time = hours + \":\" + minutes + \":\" + seconds;\r\n let htmlItem = '';\r\n htmlItem += '
' + time + '

';\r\n return htmlItem;\r\n }\r\n else {\r\n if (e.valueText.includes('s')) { return e.valueText }\r\n else {\r\n let date = new Date(e.value);\r\n let strDay = date.toLocaleDateString('en-UK', {\r\n weekday: 'long',\r\n });\r\n let htmlItem = '';\r\n let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();\r\n let month = date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth();\r\n let year = date.getFullYear();\r\n htmlItem += '
' + strDay + '

';\r\n htmlItem += '
' + day + '/' + month + '/' + year + '
';\r\n return htmlItem;\r\n }\r\n }\r\n }\r\n\r\n function customizeTooltip(pointInfo) {\r\n let strTime = pointInfo.valueText;\r\n let insertedOn = pointInfo.point.data.insertedOn;\r\n let updatedOn = pointInfo.point.data.updatedOn;\r\n\r\n let times = strTime.split(' - ');\r\n let startTime = times[0];\r\n let endTime = times[1];\r\n let value = '';\r\n let strStartTime = convertToTimeString(startTime);\r\n let strEndTime = convertToTimeString(endTime);\r\n let time = '';\r\n let commentText = pointInfo.point.data.commentText;\r\n let commentImage = pointInfo.point.data.commentImage;\r\n\r\n if (pointInfo.point.data.typeId === controlTypes.STOPWATCH) {\r\n strStartTime = convertToTimeString(insertedOn);\r\n strEndTime = convertToTimeString(updatedOn);\r\n\r\n\r\n value = pointInfo.point.data.measurementValue;\r\n time = strStartTime + ' - ' + strEndTime;\r\n } else {\r\n value = pointInfo.point.data.measurementValue;\r\n time = strStartTime;\r\n }\r\n if (pointInfo.point.data.typeId === controlTypes.CAMERA) {\r\n let imghtml = '';\r\n if (props.imgData.some(x => x.imageId === pointInfo.point.data.image)) {\r\n imghtml += '
Project: ' + pointInfo.point.data.projectName + '
';\r\n imghtml += '
Company: ' + pointInfo.point.data.companyName + '
';\r\n imghtml += '
Location: ' + pointInfo.point.data.resource + '
';\r\n imghtml += '
Time: ' + time + '
';\r\n if (pointInfo.point.data.commentText !== '' && pointInfo.point.data.commentText !== null) {\r\n imghtml += '
Comment: ' + commentText + '
';\r\n }\r\n imghtml += '';\r\n } else {\r\n imghtml += '
Project: ' + pointInfo.point.data.projectName + '
';\r\n imghtml += '
Company: ' + pointInfo.point.data.companyName + '
';\r\n imghtml += '
Location: ' + pointInfo.point.data.resource + '
';\r\n imghtml += '
Time: ' + time + '
';\r\n if (pointInfo.point.data.commentText !== '' && pointInfo.point.data.commentText !== null) {\r\n imghtml += '
Comment: ' + commentText + '
';\r\n }\r\n imghtml += ''\r\n }\r\n return { text: `${pointInfo.argumentText}
${time}`, html: imghtml, visible: true }\r\n } else {\r\n let text = '';\r\n text += '
Project: ' + pointInfo.point.data.projectName + '
';\r\n text += '
Company: ' + pointInfo.point.data.companyName + '
';\r\n text += '
Location: ' + pointInfo.point.data.resource + '
';\r\n text += '
Description: ' + pointInfo.argumentText + '
';\r\n text += '
' + pointInfo.point.data.type + ' value: ' + value + '
';\r\n text += '
Time: ' + time + '
';\r\n if (pointInfo.point.data.commentText !== '' && pointInfo.point.data.commentText !== null) {\r\n text += '
Comment: ' + commentText + '
';\r\n }\r\n if (pointInfo.point.data.commentImage !== '' && pointInfo.point.data.commentImage !== null) {\r\n text += '
Comment Image:
';\r\n text += '';\r\n }\r\n return { html: text }\r\n }\r\n }\r\n\r\n function customizeSeries(pointInfo) {\r\n return { color: 'blue' }\r\n }\r\n\r\n function customizePoint(pointInfo) {\r\n // setLabelData([]);\r\n if (pointInfo.data.typeId !== controlTypes.CAMERA) {\r\n return { color: this.data.color, border: { color: 'grey', width: 1, visible: true, dashStyle: 'dot', opacity: 1 } }\r\n } else {\r\n return { image: { url: \"data:image/png;base64,\" + pointInfo.data.thumbnail, width: 50, height: 50 }, visible: true };\r\n }\r\n }\r\n\r\n function convertToTimeString(time) {\r\n let dateTime = new Date(time);\r\n let strTime = dateTime.toTimeString();\r\n strTime = strTime.split(' ')[0];\r\n return strTime;\r\n }\r\n\r\n function customizeText(e) {\r\n let tempLabelObj = labelData;\r\n let tempObj = {};\r\n let text = '';\r\n let color = '';\r\n if (e.point.data.color !== undefined) {\r\n color = getTextColor(e.point.data.color);\r\n } else {\r\n color = 'black';\r\n }\r\n if (e.point.data.typeId === 2) {\r\n //Stopwatch\r\n // if (tempLabelObj.length === 0 || !tempLabelObj.some(x => x.id === e.point.data.id)) {\r\n if ((tempLabelObj.length === 0 || !tempLabelObj.some(x => x.id === e.point.data.id)) && e.point.data.measurementValue !== \"\") {\r\n tempObj = { id: e.point.data.id };\r\n tempLabelObj.push(tempObj);\r\n setLabelData(tempLabelObj);\r\n return `${text += '
' + e.point.data.measurementValue + '
'}`;\r\n }\r\n } else {\r\n return `${text += '
' + e.point.data.measurementValue + '
'}`;\r\n }\r\n }\r\n\r\n\r\n\r\n const chartRef = createRef();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* SC: Series for the stopwatches */}\r\n \r\n \r\n )\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n\r\n}));\r\n","import React, { useEffect, useState } from \"react\";\r\nimport RangeSelector, { Size, Scale, SliderMarker, MinorTick } from 'devextreme-react/range-selector';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport IconButton from '@mui/material/IconButton';\r\n// import TimeRange from 'react-timeline-range-slider'\r\nfunction TimeRangeChart(props) {\r\n useEffect(() => {\r\n }, []);\r\n const [startValue, setStartValue] = useState(props.timeRangeDates.fromDate);\r\n const [endValue, setEndValue] = useState(props.timeRangeDates.toDate);\r\n\r\n const updateVisualRange = (e) => {\r\n //Update date range values (This will select and deselect all measurements between these dates)\r\n props.updateDataRange(e.value);\r\n }\r\n const handlePreviousDay = () => {\r\n let tempStartValue = new Date(props.timeRangeDates.fromDate - 86400000);\r\n let tempEndValue = new Date(props.timeRangeDates.toDate - 86400000);\r\n setStartValue(tempStartValue);\r\n setEndValue(tempEndValue);\r\n props.handlePreviousDay();\r\n\r\n }\r\n const handleNextDay = () => {\r\n let tempStartValue = new Date(props.timeRangeDates.fromDate + 86400000);\r\n let tempEndValue = new Date(props.timeRangeDates.toDate + 86400000);\r\n setStartValue(tempStartValue);\r\n setEndValue(tempEndValue);\r\n props.handleNextDay();\r\n\r\n }\r\n const dateFormatter = (date) => {\r\n const hour = date.getHours();\r\n const minute = date.getMinutes();\r\n return `${(\"0\" + (date.getDate())).slice(-2)}/${(\"0\" + (date.getMonth() + 1)).slice(-2)}/${date.getFullYear()} ${(\"0\" + (hour)).slice(-2)}:${(\"0\" + (minute)).slice(-2)}`;\r\n\r\n\r\n //let tempTomorrow = new Date(date.getDate() + 86400000);\r\n }\r\n\r\n return (\r\n //
\r\n //
\r\n // \r\n //
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n updateVisualRange(e)} defaultValue={[props.timeRangeDates.fromDate, props.timeRangeDates.toDate]}>\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} export default TimeRangeChart;\r\n","import React from 'react';\r\n\r\nconst Style = {\r\n color: \"#1D3557\",\r\n fontSize: \"16px\"\r\n }\r\n\r\nfunction DatePickerText(props) {\r\n return (\r\n
\r\n

{props.Text}

\r\n
\r\n )\r\n}\r\n\r\nexport default DatePickerText;","export function fromNewDateFormatToYYYYMMDDSlash(newDate) {\r\n\r\n let addZeroToMonth = false\r\n\r\n let addZeroToDay = false\r\n\r\n if (new Date(newDate).getDate() < 10) {\r\n addZeroToDay = true\r\n }\r\n\r\n if (new Date(newDate).getMonth() + 1 < 10) {\r\n addZeroToMonth = true\r\n }\r\n\r\n let date = new Date(newDate).getFullYear() + \"/\" + (addZeroToMonth ? \"0\" : \"\") + String(new Date(newDate).getMonth() + 1) + \"/\" + (addZeroToDay ? \"0\" : \"\") + new Date(newDate).getDate();\r\n\r\n return date\r\n}\r\n\r\nexport function parseNewDateToDDMMYYY(newDate){\r\n return `${(\"0\" + (newDate.getDate())).slice(-2)}/${(\"0\" + (newDate.getMonth() + 1)).slice(-2)}/${newDate.getFullYear()} ${(\"0\" + (newDate.getHours())).slice(-2)}:${(\"0\" + (newDate.getMinutes())).slice(-2)}:${(\"0\" + (newDate.getSeconds())).slice(-2)}`;\r\n\r\n}\r\n\r\nexport function parseNewDateToDDMMYYYnoTime(newDate){\r\n return `${(\"0\" + (newDate.getDate())).slice(-2)}/${(\"0\" + (newDate.getMonth() + 1)).slice(-2)}/${newDate.getFullYear()}`;\r\n\r\n}\r\nexport function parseNewDateToYYMMDDDash(newDate){\r\n return `${newDate.getFullYear()}-${(\"0\" + (newDate.getMonth() + 1)).slice(-2)}-${(\"0\" + (newDate.getDate())).slice(-2)} ${(\"0\" + (newDate.getHours())).slice(-2)}:${(\"0\" + (newDate.getMinutes())).slice(-2)}:${(\"0\" + (newDate.getSeconds())).slice(-2)}`;\r\n\r\n}\r\n\r\nexport function isDateObject(date){\r\n if(date instanceof Date){\r\n return true\r\n }\r\n else{\r\n return false\r\n }\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport TitlePage from \"../../Shared/TitlePage\";\r\nimport ButtonNormalText from \"../../Shared/Buttons/ButtonNormalText\";\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport TableResults from \"./Components/TableResults\";\r\nimport { dataService } from \"../../../Services/data/data.service\";\r\nimport { Button, Grid } from \"@mui/material\";\r\nimport { CSVLink } from \"react-csv\";\r\nimport Divider from '@mui/material/Divider';\r\nimport DropdownLocations from \"./Components/DropdownLocations\";\r\nimport DropdownProjectNames from \"./Components/DropdownProjects\";\r\nimport MyDateTimePicker from \"../../Shared/DateSelection/DateTimePicker\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { ProjectFilterTypes } from '../../../Config/constants';\r\nimport { IconButton } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\nimport moment from 'moment'\r\nimport { controlTypes } from '../../../Config/constants';\r\nimport TimeLineChart from './Components/TimeLineChart'\r\nimport TimeRangeChart from './Components/TimeRangeChart'\r\nimport DatePickerText from \"../../Shared/DateSelection/DatePickerText\";\r\nimport { parseNewDateToYYMMDDDash } from '../../../Utils/dateHelper';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport RefreshIcon from '@mui/icons-material/Refresh';\r\nimport Typography from '@mui/material/Typography';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport ButtonGroup from '@mui/material/ButtonGroup';\r\nimport { Spin } from \"react-cssfx-loading\";\r\n\r\nconst ExpandMore = styled((props) => {\r\n const { expand, ...other } = props;\r\n return ;\r\n})(({ theme, expand }) => ({\r\n \"&:hover\": { backgroundColor: \"#C3996B\" },\r\n padding: 0,\r\n color: 'white',\r\n transform: !expand ? 'rotate(180deg)' : 'rotate(0deg)',\r\n marginLeft: 'auto',\r\n transition: theme.transitions.create('transform', {\r\n duration: theme.transitions.duration.shortest,\r\n }),\r\n}));\r\n\r\nfunction ResultsPage(props) {\r\n const classes = useStyles();\r\n const [measurementRows, setMeasurementRows] = useState([]);\r\n const GetUserID = props.Login.userid;\r\n const [filters, setFilters] = useState([]);\r\n const [filterOn, setFilterOn] = useState(false);\r\n const [selectedFilter, setSelectedFilter] = useState(10);\r\n const [types, setTypes] = useState([]);\r\n const [selectedProject, setSelectedProject] = useState(false);\r\n const [timeLineData, setChartData] = useState({});\r\n const [filteredData, setFilteredData] = useState({});\r\n const [timeRangeData, setTimeRangeData] = useState([]);\r\n const [imgData, setImageData] = useState([]);\r\n const [exportActive, setExportActive] = useState(false);\r\n const [isChecked, setIsChecked] = useState(false); \r\n const [location, setLocation] = useState('');\r\n const [projectName, setProjectName] = useState('');\r\n const [openSearch, setOpenSearch] = useState(false);\r\n const [refresh, setRefresh] = useState(false);\r\n const [hideProjectFilters, setHideProjectFilters] = useState(false)\r\n const anchorRef = React.useRef(null);\r\n const [isLoading, setLoading] = useState(true);\r\n const [timeRangeDates, setTimeRangeDates] = useState({ fromDate: new Date(Date.now() - 86400000), toDate: new Date(Date.now())});\r\n\r\n useEffect(() => {\r\n if (props.projectCopy.projectId === null || props.projectCopy.projectId === 0 || props.projectCopy.projectId === \"\") {\r\n dataService.getTypes().then(results => {\r\n setTypes(results.sort((a, b) => a.description.localeCompare(b.description)));\r\n });\r\n let TempMeasurementRows;\r\n dataService.getMeasurementsByUserIdDateLocationName(GetUserID, parseNewDateToYYMMDDDash(timeRangeDates.fromDate), parseNewDateToYYMMDDDash(timeRangeDates.toDate), location, projectName).then(results => {\r\n TempMeasurementRows = (results.map(\r\n y => ({\r\n checked: true,\r\n projectId: y.projectId,\r\n toDate: y.toDate,\r\n fromDate: y.fromDate,\r\n color: y.color,\r\n id: y.id,\r\n typeId: y.typeId,\r\n companyId: y.companyId,\r\n qrCode: y.qrCode,\r\n companyName: y.companyName,\r\n detailId: y.projectDetailID,\r\n projectName: y.projectName,\r\n resourceName: y.resourceName,\r\n description: y.description,\r\n startTime: y.startTime,\r\n stopTime: y.stopTime,\r\n insertedOn: y.startTime,\r\n updatedOn: y.stopTime,\r\n measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n running: (y.running === true ? 'True' : 'False'),\r\n thumbnail: y.thumbnail,\r\n imageId: y.imageId,\r\n commentText: y.commentText,\r\n commentImage: y.commentImage,\r\n commentId: y.commentId\r\n })));\r\n setMeasurementRows(TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime)));\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n chartData(TempMeasurementRows.flat());\r\n });\r\n } else if (!props.projectCopy.report || props.projectCopy.report === undefined) {\r\n let TempMeasurementRows;\r\n dataService.getMeasurementById(GetUserID, props.projectCopy.projectId).then(results => {\r\n TempMeasurementRows = (results.map(\r\n y => ({\r\n checked: true,\r\n projectId: y.projectId,\r\n toDate: y.toDate,\r\n fromDate: y.fromDate,\r\n color: y.color,\r\n id: y.id,\r\n typeId: y.typeId,\r\n companyId: y.companyId,\r\n qrCode: y.qrCode,\r\n companyName: y.companyName,\r\n detailId: y.projectDetailID,\r\n projectName: y.projectName,\r\n resourceName: y.resourceName,\r\n description: y.description,\r\n startTime: y.startTime,\r\n stopTime: y.stopTime,\r\n insertedOn: y.startTime,\r\n updatedOn: y.stopTime,\r\n measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n running: y.running,\r\n imageId: y.imageId,\r\n thumbnail: y.thumbnail,\r\n commentText: y.commentText,\r\n commentImage: y.commentImage,\r\n commentId: y.commentId\r\n })));\r\n var sortedMeasurements = TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime));\r\n var sortedMeasurementsDesc = TempMeasurementRows.flat().sort((a, b) => a.startTime.localeCompare(b.startTime));\r\n var dateFirstMeasurement;\r\n var dateLastMeasurement;\r\n\r\n if (sortedMeasurements.length > 0) {\r\n dateFirstMeasurement = new Date(sortedMeasurements[sortedMeasurements.length - 1].startTime);\r\n dateLastMeasurement = new Date(sortedMeasurementsDesc[sortedMeasurementsDesc.length - 1].startTime);\r\n } else {\r\n dateFirstMeasurement = new Date();\r\n dateLastMeasurement = new Date();\r\n\r\n }\r\n let tempFromDate = new Date(dateLastMeasurement.getTime() - 86400000);\r\n let tempToDate = dateLastMeasurement;\r\n setTimeRangeDates({ fromDate: tempFromDate, toDate: tempToDate});\r\n sortedMeasurements = sortedMeasurements.filter(x => new Date(x.insertedOn) <= tempToDate && new Date(x.insertedOn) >= tempFromDate);\r\n setMeasurementRows(sortedMeasurements);\r\n setExportActive(true);\r\n setHideProjectFilters(true);\r\n setSelectedProject(true);\r\n chartData(sortedMeasurements.flat());\r\n });\r\n } else if (props.projectCopy.report) {\r\n const [date, time] = props.projectCopy.toDate.split(' ');\r\n const [toDay, toMonth, toYear] = date.split('/');\r\n const [toHours, toMinutes, toSeconds] = time.split(':');\r\n\r\n let tempToDate = new Date(+toYear, toMonth - 1, +toDay, toHours, toMinutes, toSeconds);\r\n let TempMeasurementRows;\r\n let tempFromDate = new Date(tempToDate - 86400000);\r\n\r\n setProjectName(props.projectCopy.projectName);\r\n setLocation(props.projectCopy.resource);\r\n dataService.getMeasurementById(GetUserID, props.projectCopy.projectId).then(results => {\r\n let filteredResults = results.filter(x => new Date(x.startTime) >= tempFromDate && new Date(x.startTime) <= tempToDate);\r\n TempMeasurementRows = (filteredResults.map(\r\n y => ({\r\n checked: true,\r\n projectId: y.projectId,\r\n toDate: y.toDate,\r\n fromDate: y.fromDate,\r\n color: y.color,\r\n id: y.id,\r\n typeId: y.typeId,\r\n companyId: y.companyId,\r\n qrCode: y.qrCode,\r\n companyName: y.companyName,\r\n detailId: y.projectDetailID,\r\n projectName: y.projectName,\r\n resourceName: y.resourceName,\r\n description: y.description,\r\n startTime: y.startTime,\r\n stopTime: y.stopTime,\r\n insertedOn: y.startTime,\r\n updatedOn: y.stopTime,\r\n measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n running: (y.running === true ? 'True' : 'False'),\r\n thumbnail: y.thumbnail,\r\n imageId: y.imageId,\r\n commentText: y.commentText,\r\n commentImage: y.commentImage,\r\n commentId: y.commentId\r\n })));\r\n setTimeRangeDates({ fromDate: tempFromDate, toDate: tempToDate});\r\n setMeasurementRows(TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime)));\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n chartData(TempMeasurementRows.flat());\r\n });\r\n }\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const limitString = (str, limit) => {\r\n if (str.length > limit) {\r\n return str.substring(0, limit) + \"...\";\r\n } else {\r\n return str;\r\n }\r\n }\r\n\r\n const chartData = (data) => {\r\n let tempdata = [];\r\n let tempObj = {};\r\n setLoading(true);\r\n \r\n data.map((x => {\r\n let startDate = new Date(x.startTime);\r\n let tempEndDate = new Date(x.startTime);\r\n let insertedOn = new Date(x.startTime);\r\n let updatedOn = new Date(x.startTime);\r\n\r\n if (x.typeId === controlTypes.STOPWATCH) {\r\n if(x.updatedOn !== undefined){\r\n updatedOn = x.updatedOn;\r\n }\r\n if (x.stopTime.length > 0 || x.stopTime !== null) {\r\n tempEndDate = new Date(x.stopTime);\r\n\r\n }\r\n if(x.insertedOn !== undefined){\r\n insertedOn = x.insertedOn;\r\n }\r\n tempObj = { commentText: x.commentText, commentImage: x.commentImage, checked: x.checked, id: x.id, startDate: startDate, insertedOn: insertedOn,updatedOn: updatedOn, endDate: tempEndDate, companyName: x.companyName, measurementValue: x.measurementValue, type: 'Stopwatch', projectName: x.projectName, resource: x.resourceName, typeId: x.typeId, description: limitString(x.description, 15), value: x.dateValue, counter: null, color: x.color, chartType: 'rangeBar', argumentField: 'description', detailId: x.detailId };\r\n } else if (x.typeId === controlTypes.COUNTER) {\r\n tempObj = { commentText: x.commentText, commentImage: x.commentImage, checked: x.checked, id: x.id, startDate: startDate, endDate: tempEndDate, companyName: x.companyName, measurementValue: x.measurementValue, type: 'Counter', projectName: x.projectName, resource: x.resourceName, typeId: x.typeId, value: x.integerValue, counter: x.measurementValue, counterDescription: limitString(x.description, 15), color: x.color, chartType: 'scatter', argumentField: \"counterDescription\" };\r\n } else if (x.typeId === controlTypes.FREETEXT) {\r\n tempObj = { commentText: x.commentText, commentImage: x.commentImage, checked: x.checked, id: x.id, startDate: startDate, endDate: tempEndDate, companyName: x.companyName, measurementValue: x.measurementValue, type: 'Free text', projectName: x.projectName, resource: x.resourceName, typeId: x.typeId, value: x.textValue, counter: null, freetextDescription: limitString(x.description, 15), color: x.color };\r\n } else if (x.typeId === controlTypes.DATALIST) {\r\n tempObj = { commentText: x.commentText, commentImage: x.commentImage, checked: x.checked, id: x.id, startDate: startDate, endDate: tempEndDate, companyName: x.companyName, measurementValue: x.measurementValue, type: 'Data list', projectName: x.projectName, resource: x.resourceName, typeId: x.typeId, datalistDescription: limitString(x.description, 15), counter: null, color: x.color };\r\n } else if (x.typeId === controlTypes.CAMERA) {\r\n tempObj = { commentText: x.commentText, commentImage: x.commentImage, checked: x.checked, id: x.id, startDate: startDate, endDate: tempEndDate, companyName: x.companyName, measurementValue: x.measurementValue, type: 'Image', projectName: x.projectName, resource: x.resourceName, typeId: x.typeId, image: x.imageId, thumbnail: x.thumbnail, cameraDescription: limitString(x.description, 15), counter: null, color: x.color };\r\n } else if (x.typeId === controlTypes.SCANNER) {\r\n tempObj = { commentText: x.commentText, commentImage: x.commentImage, checked: x.checked, id: x.id, startDate: startDate, endDate: tempEndDate, companyName: x.companyName, measurementValue: x.measurementValue, type: 'Data list', projectName: x.projectName, resource: x.resourceName, typeId: x.typeId, datalistDescription: limitString(x.description, 15), counter: null, color: x.color };\r\n } else if (x.typeId === controlTypes.EXTERNALAPI) {\r\n tempObj = { commentText: x.commentText, commentImage: x.commentImage, checked: x.checked, id: x.id, startDate: startDate, endDate: tempEndDate, companyName: x.companyName, measurementValue: x.measurementValue, type: 'External API', projectName: x.projectName, resource: x.resourceName, typeId: x.typeId, value: x.externalApiValues, externalApiDescription: limitString(x.description, 15), counter: null, color: x.color };\r\n }\r\n\r\n tempdata.push(tempObj);\r\n }));\r\n setLoading(false);\r\n setChartData(tempdata);\r\n setTimeRangeData(tempdata);\r\n }\r\n\r\n const getMeasurementValue = (TypeId, Text, Int, Time, DataListValue, ImageLink, ExternalApiValue) => {\r\n switch (TypeId) {\r\n case 1: return Int;\r\n case 2:\r\n if (Int > 0) {\r\n return Time;\r\n } else {\r\n return '';\r\n }\r\n case 3: return Text;\r\n case 4: return DataListValue;\r\n case 5: return Text;\r\n case 6: return ImageLink;\r\n case 7: return ExternalApiValue;\r\n // eslint-disable-next-line \r\n }\r\n }\r\n\r\n const onCheckChanged = (id) => {\r\n setIsChecked(true)\r\n let tempMeasurementRows = [...measurementRows];\r\n tempMeasurementRows.find(x => x.id === id).checked = !tempMeasurementRows.find(x => x.id === id).checked;\r\n setMeasurementRows(tempMeasurementRows);\r\n if (tempMeasurementRows.flat().filter(x => x.checked === true).length > 0) {\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n }\r\n else {\r\n setExportActive(false);\r\n setSelectedProject(false);\r\n }\r\n chartData(tempMeasurementRows.flat());\r\n }\r\n\r\n const selectAll = (selectAll) => {\r\n let tempMeasurementRows = [...measurementRows];\r\n tempMeasurementRows.map(y => y.checked = !selectAll);\r\n setMeasurementRows(tempMeasurementRows);\r\n chartData(tempMeasurementRows.flat());\r\n if (tempMeasurementRows.flat().filter(x => x.checked === true).length > 0) {\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n }\r\n else {\r\n setExportActive(false);\r\n setSelectedProject(false);\r\n }\r\n }\r\n\r\n const filter = [\r\n { number: 1, column: \"companyName\", sortOrder: \"ASC\" },\r\n { number: 2, column: \"companyName\", sortOrder: \"DESC\" },\r\n { number: 3, column: \"projectName\", sortOrder: \"ASC\" },\r\n { number: 4, column: \"projectName\", sortOrder: \"DESC\" },\r\n { number: 5, column: \"resourceName\", sortOrder: \"ASC\" },\r\n { number: 6, column: \"resourceName\", sortOrder: \"DESC\" },\r\n { number: 7, column: \"description\", sortOrder: \"ASC\" },\r\n { number: 8, column: \"description\", sortOrder: \"DESC\" },\r\n { number: 9, column: \"startTime\", sortOrder: \"ASC\" },\r\n { number: 10, column: \"startTime\", sortOrder: \"DESC\" },\r\n ];\r\n\r\n const dynamicSorting = (property) => {\r\n var sortOrder = 1;\r\n if (property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n let asc = false;\r\n let desc = false;\r\n /* SC: Filter now works both ways (ASC, DESC) */\r\n if (filter.find(x => x.number === selectedFilter).column === property) {\r\n if (filter.find(x => x.number === selectedFilter).sortOrder === 'ASC') {\r\n desc = true;\r\n asc = false;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'DESC').number);\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'ASC').number);\r\n }\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'ASC').number);\r\n }\r\n if (asc === true) {\r\n /* ASC */\r\n if (property === 'startTime') {\r\n return function (a, b) {\r\n var aMoment = moment(a[property], \"DD/MM/YYYY, h:mm:ss a\");\r\n var bMoment = moment(b[property], \"DD/MM/YYYY, h:mm:ss a'\");\r\n var result = aMoment - bMoment;\r\n return result;\r\n }\r\n } else {\r\n return function (a, b) {\r\n var result = (a[property].toLowerCase() > b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n }\r\n } else {\r\n /* DESC */\r\n if (property === 'startTime') {\r\n return function (a, b) {\r\n var aMoment = moment(a[property], \"DD/MM/YYYY, h:mm:ss a\");\r\n var bMoment = moment(b[property], \"DD/MM/YYYY, h:mm:ss a'\");\r\n var result = bMoment - aMoment;\r\n return result;\r\n }\r\n } else {\r\n return function (a, b) {\r\n var result = (a[property].toLowerCase() < b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const handleSorting = (sortType) => {\r\n let tempMeasurementRows = [...measurementRows];\r\n setMeasurementRows(tempMeasurementRows.sort(dynamicSorting(sortType)));\r\n }\r\n\r\n const headers = [\r\n { label: \"Customer\", key: \"companyName\" },\r\n { label: \"Project name\", key: \"projectName\" },\r\n { label: \"Location name\", key: \"resourceName\" },\r\n { label: \"Description\", key: \"description\" },\r\n { label: \"Value\", key: \"measurementValue\" },\r\n { label: \"Start Time\", key: \"startTime\" },\r\n { label: \"Running\", key: \"running\" },\r\n { label: \"Comment\", key: \"commentText\" },\r\n ]\r\n\r\n const toggleFilter = () => {\r\n if (filterOn) {\r\n setFilters([])\r\n }\r\n setFilterOn(!filterOn)\r\n }\r\n\r\n const updateFilters = (type, event) => {\r\n let tempFilters = [...filters]\r\n\r\n if (tempFilters.some(x => x.type === type)) {\r\n let index = tempFilters.indexOf(tempFilters.find(x => x.type === type))\r\n tempFilters.splice(index, 1)\r\n tempFilters.unshift({ type: type, filterValue: event.target.value })\r\n }\r\n else {\r\n tempFilters.unshift({ type: type, filterValue: event.target.value })\r\n }\r\n setFilters(tempFilters);\r\n filterResults(tempFilters);\r\n }\r\n\r\n const filterResults = (thisFilters) => {\r\n let varFilteredResults = [...measurementRows]\r\n var i;\r\n for (i = 0; i < thisFilters.length; i++) {\r\n let filter = thisFilters[i];\r\n switch (filter.type) {\r\n case ProjectFilterTypes.CUSTOMER:\r\n varFilteredResults = varFilteredResults.filter(x => x.companyName.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n case ProjectFilterTypes.PROJECT_NAME:\r\n varFilteredResults = varFilteredResults.filter(x => x.projectName.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n case ProjectFilterTypes.LOCATION_NAME:\r\n varFilteredResults = varFilteredResults.filter(x => x.resourceName.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n case ProjectFilterTypes.DESCRIPTION:\r\n varFilteredResults = varFilteredResults.filter(x => x.description.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n default:\r\n ;\r\n }\r\n }\r\n setMeasurementRows(varFilteredResults)\r\n }\r\n\r\n const handleVisualRange = (data) => {\r\n setTimeRangeData(data);\r\n }\r\n\r\n const updateDataRange = (data) => {\r\n let tempToDate = new Date(data[1]);\r\n let tempFromDate = new Date(data[0]);\r\n let tempRows = [...measurementRows];\r\n tempRows.map(x => {\r\n if ((new Date(x.startTime) >= tempFromDate && new Date(x.startTime) <= tempToDate)) {\r\n if(x.stopTime === ''){\r\n x.checked = true;\r\n\r\n }else{\r\n if ((new Date(x.stopTime) >= tempFromDate && new Date(x.stopTime) <= tempToDate)) {\r\n x.checked = true;\r\n }else{\r\n x.checked = true;\r\n if(new Date(x.startTime) < tempFromDate){\r\n x.startTime = tempFromDate;\r\n }\r\n if(new Date(x.stopTime) > tempToDate){\r\n x.stopTime = tempToDate;\r\n }\r\n }\r\n }\r\n } else {\r\n if(x.stopTime === ''){\r\n x.checked = false;\r\n }else{\r\n if((new Date(x.stopTime) >= tempFromDate && new Date(x.stopTime) <= tempToDate)){\r\n x.checked = true; \r\n if(new Date(x.startTime) < tempFromDate){\r\n x.startTime = tempFromDate;\r\n }\r\n if(new Date(x.stopTime) > tempToDate){\r\n x.stopTime = tempToDate;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n console.log('tempRows , ', tempRows)\r\n\r\n chartData(tempRows.flat());\r\n setMeasurementRows(tempRows);\r\n\r\n }\r\n const getDataByDates = (tempFromDate, temptoDate) => {\r\n let TempMeasurementRows;\r\n\r\n dataService.getMeasurementsByUserIdDateLocationName(GetUserID, parseNewDateToYYMMDDDash(tempFromDate), parseNewDateToYYMMDDDash(temptoDate), location, projectName).then(results => {\r\n TempMeasurementRows = (results.map(\r\n y => ({\r\n checked: true,\r\n projectId: y.projectId,\r\n toDate: y.toDate,\r\n fromDate: y.fromDate,\r\n color: y.color,\r\n id: y.id,\r\n typeId: y.typeId,\r\n companyId: y.companyId,\r\n qrCode: y.qrCode,\r\n companyName: y.companyName,\r\n detailId: y.projectDetailID,\r\n projectName: y.projectName,\r\n resourceName: y.resourceName,\r\n description: y.description,\r\n startTime: y.startTime,\r\n stopTime: y.stopTime,\r\n measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n running: (y.running === true ? 'True' : 'False'),\r\n thumbnail: y.thumbnail,\r\n imageId: y.imageId,\r\n commentText: y.commentText,\r\n commentImage: y.commentImage,\r\n commentId: y.commentId\r\n })));\r\n\r\n setMeasurementRows(TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime)));\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n chartData(TempMeasurementRows.flat());\r\n // setRefresh(!refresh);\r\n });\r\n };\r\n\r\n // const handleSelectVisualRange = (data) => {\r\n // let dayBeforeFromDate = new Date(data[0]);\r\n // let dayBeforeToDate = new Date(data[1]);\r\n // console.log(dayBeforeFromDate, dayBeforeToDate);\r\n // // setToDate(dayBeforeToDate);\r\n // // setFromDate(dayBeforeFromDate);\r\n // let TempMeasurementRows;\r\n // dataService.getMeasurementsByUserIdDateLocationName(GetUserID, parseNewDateToDDMMYYYDash(dayBeforeFromDate), parseNewDateToDDMMYYYDash(dayBeforeToDate), location, projectName).then(results => {\r\n // TempMeasurementRows = (results.map(\r\n // y => ({\r\n // checked: true,\r\n // projectId: y.projectId,\r\n // toDate: y.toDate,\r\n // fromDate: y.fromDate,\r\n // color: y.color,\r\n // id: y.id,\r\n // typeId: y.typeId,\r\n // companyId: y.companyId,\r\n // qrCode: y.qrCode,\r\n // companyName: y.companyName,\r\n // detailId: y.projectDetailID,\r\n // projectName: y.projectName,\r\n // resourceName: y.resourceName,\r\n // description: y.description,\r\n // startTime: y.startTime,\r\n // stopTime: y.stopTime,\r\n // measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n // running: (y.running === true ? 'True' : 'False'),\r\n // thumbnail: y.thumbnail,\r\n // imageId: y.imageId,\r\n // commentText: y.commentText,\r\n // commentImage: y.commentImage,\r\n // commentId: y.commentId\r\n // })));\r\n\r\n // setMeasurementRows(TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime)));\r\n // setExportActive(true);\r\n // setSelectedProject(true);\r\n // chartData(TempMeasurementRows.flat());\r\n // // setRefresh(!refresh);\r\n // }); \r\n // }\r\n\r\n const handleIsChecked = (e) => {\r\n setIsChecked(e);\r\n }\r\n\r\n const setTheDate = (event) => {\r\n var yesterday = new Date(new Date(event));\r\n yesterday.setDate(yesterday.getDate() + 1);\r\n setTimeRangeDates({ fromDate: new Date(event), toDate: yesterday});\r\n }\r\n\r\n const handleSetLocation = (event) => {\r\n setLocation(event.map(x => x.location).join(\",\"));\r\n }\r\n\r\n const handleSetProjectName = (event) => {\r\n setProjectName(event.map(x => x.projectName).join(\",\"));\r\n }\r\n\r\n const handleOpenSearch = () => {\r\n setOpenSearch(!openSearch);\r\n }\r\n\r\n const handleNextDay = () => {\r\n var tempFromDate = new Date(timeRangeDates.toDate);\r\n var tempToDate = new Date(timeRangeDates.toDate.getTime() + 86400000);\r\n setTimeRangeDates({ fromDate: tempFromDate, toDate: tempToDate });\r\n let TempMeasurementRows;\r\n dataService.getMeasurementsByUserIdDateLocationName(GetUserID, parseNewDateToYYMMDDDash(tempFromDate), parseNewDateToYYMMDDDash(tempToDate), location, projectName).then(results => {\r\n TempMeasurementRows = (results.map(\r\n y => ({\r\n checked: true,\r\n projectId: y.projectId,\r\n toDate: y.toDate,\r\n fromDate: y.fromDate,\r\n color: y.color,\r\n id: y.id,\r\n typeId: y.typeId,\r\n companyId: y.companyId,\r\n qrCode: y.qrCode,\r\n companyName: y.companyName,\r\n detailId: y.projectDetailID,\r\n projectName: y.projectName,\r\n resourceName: y.resourceName,\r\n description: y.description,\r\n startTime: y.startTime,\r\n stopTime: y.stopTime,\r\n measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n running: (y.running === true ? 'True' : 'False'),\r\n thumbnail: y.thumbnail,\r\n imageId: y.imageId,\r\n commentText: y.commentText,\r\n commentImage: y.commentImage,\r\n commentId: y.commentId\r\n })));\r\n setMeasurementRows(TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime)));\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n chartData(TempMeasurementRows.flat());\r\n setRefresh(!refresh);\r\n });\r\n }\r\n\r\n const handlePreviousDay = () => {\r\n //-24 hours, so the Todate becomes the fromdate\r\n var tempFromDate = new Date(timeRangeDates.fromDate.getTime() - 86400000);\r\n var tempToDate = new Date(timeRangeDates.fromDate);\r\n\r\n setTimeRangeDates({ fromDate: tempFromDate, toDate: tempToDate });\r\n\r\n let TempMeasurementRows;\r\n dataService.getMeasurementsByUserIdDateLocationName(GetUserID, parseNewDateToYYMMDDDash(tempFromDate), parseNewDateToYYMMDDDash(tempToDate), location, projectName).then(results => {\r\n TempMeasurementRows = (results.map(\r\n y => ({\r\n checked: true,\r\n projectId: y.projectId,\r\n toDate: y.toDate,\r\n fromDate: y.fromDate,\r\n color: y.color,\r\n id: y.id,\r\n typeId: y.typeId,\r\n companyId: y.companyId,\r\n qrCode: y.qrCode,\r\n companyName: y.companyName,\r\n detailId: y.projectDetailID,\r\n projectName: y.projectName,\r\n resourceName: y.resourceName,\r\n description: y.description,\r\n startTime: y.startTime,\r\n stopTime: y.stopTime,\r\n insertedOn: y.startTime,\r\n updatedOn: y.stopTime,\r\n measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n running: (y.running === true ? 'True' : 'False'),\r\n thumbnail: y.thumbnail,\r\n imageId: y.imageId,\r\n commentText: y.commentText,\r\n commentImage: y.commentImage,\r\n commentId: y.commentId\r\n })));\r\n setMeasurementRows(TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime)));\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n chartData(TempMeasurementRows.flat());\r\n setRefresh(!refresh);\r\n });\r\n }\r\n\r\n\r\n const handleSearch = () => {\r\n let TempMeasurementRows;\r\n dataService.getMeasurementsByUserIdDateLocationName(GetUserID, parseNewDateToYYMMDDDash(timeRangeDates.fromDate), parseNewDateToYYMMDDDash(timeRangeDates.toDate), location, projectName).then(results => {\r\n console.log(results);\r\n TempMeasurementRows = (results.map(\r\n y => ({\r\n checked: true,\r\n projectId: y.projectId,\r\n toDate: y.toDate,\r\n fromDate: y.fromDate,\r\n color: y.color,\r\n id: y.id,\r\n typeId: y.typeId,\r\n companyId: y.companyId,\r\n qrCode: y.qrCode,\r\n companyName: y.companyName,\r\n detailId: y.projectDetailID,\r\n projectName: y.projectName,\r\n resourceName: y.resourceName,\r\n description: y.description,\r\n startTime: y.startTime,\r\n stopTime: y.stopTime,\r\n insertedOn: y.startTime,\r\n updatedOn: y.stopTime,\r\n measurementValue: getMeasurementValue(y.typeId, y.textValue, y.integerValue, y.dateValue, y.dataListValue, y.imageLink, y.externalApiValues),\r\n running: (y.running === true ? 'True' : 'False'),\r\n thumbnail: y.thumbnail,\r\n imageId: y.imageId,\r\n commentText: y.commentText,\r\n commentImage: y.commentImage,\r\n commentId: y.commentId\r\n })));\r\n setMeasurementRows(TempMeasurementRows.flat().sort((b, a) => a.startTime.localeCompare(b.startTime)));\r\n setExportActive(true);\r\n setSelectedProject(true);\r\n chartData(TempMeasurementRows.flat());\r\n setRefresh(!refresh);\r\n });\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n {exportActive ?\r\n \r\n } content=\"Export Results To CSV\" />\r\n \r\n :\r\n } content=\"Export Results To CSV\" />\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n {!hideProjectFilters &&\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 {/* setSelectVisualRange={handleSelectVisualRange} */}\r\n \r\n
\r\n\r\n
\r\n \r\n Your results window is 24 hours from your timestamp.\r\n \r\n
\r\n
\r\n {isLoading ?\r\n
:\r\n
\r\n \r\n {selectedProject && timeLineData.length > 0 ? x.checked === true)} imgData={imgData}> : }\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\nexport default ResultsPage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n paddingLeft: \"1.5rem\",\r\n paddingRight: \"1.5rem\",\r\n paddingBottom: \"1.5rem\",\r\n paddingTop: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"5%\"\r\n },\r\n loadingChart:{\r\n height: '70vh',\r\n width: '100%',\r\n position: 'relative',\r\n borderRadius: \"8px\",\r\n backgroundColor: 'white',\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n exportContainer: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n marginLeft: '1.5rem',\r\n alignItems: 'flex-end',\r\n flexWrap: 'wrap',\r\n },\r\n dateSelection: {\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n filterBlock: {\r\n display: 'flex',\r\n marginBottom: '15px',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap',\r\n justifyContent: 'flex-start',\r\n gap: \"15px\"\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-evenly',\r\n }\r\n },\r\n filterItem: {\r\n [theme.breakpoints.up('sm')]: {\r\n marginTop: '25px'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '15px',\r\n width: '100%',\r\n textAlign: 'center',\r\n justifyContent: 'center',\r\n }\r\n },\r\n filterButton: {\r\n backgroundColor: \"#C3996B !important\"\r\n },\r\n stylingBlock: {\r\n backgroundColor: '#f0f0f0',\r\n borderRadius: '6px',\r\n boxShadow: 'inset -3px -3px 7px #ffffffb0, inset 3px 3px 5px rgba(94, 104, 121, 0.692)',\r\n padding: \"25px\"\r\n },\r\n buttons: {\r\n paddingBottom: \"15px\",\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap'\r\n }\r\n }\r\n}));","import React from 'react';\r\nimport { Route, Redirect } from 'react-router-dom';\r\n\r\nexport const PrivateRoute = ({ component: Component, loggedInState, ...rest }) => (\r\n {\r\n\r\n // not logged in so redirect to login page with the return url\r\n if(!loggedInState){\r\n return \r\n }\r\n\r\n // authorised so return component\r\n return \r\n\r\n }} />\r\n\r\n)\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport TextField from '@mui/material/TextField';\r\n\r\nfunction TextfieldInput(props) {\r\n return (\r\n props.action(event)} />\r\n \r\n )\r\n}\r\n\r\n\r\nexport default TextfieldInput;","import React from \"react\";\r\nimport TextField from '@mui/material/TextField';\r\nimport AdapterDateFns from '@mui/lab/AdapterDateFns';\r\n//import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\n//import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport LocalizationProvider from '@mui/lab/LocalizationProvider';\r\nimport DatePicker from '@mui/lab/DatePicker';\r\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\r\n\r\nfunction MyDatePicker(props) {\r\n return (\r\n \r\n {\r\n props.action(event)\r\n }}\r\n renderInput={(params) => }\r\n />\r\n \r\n );\r\n}\r\nexport default MyDatePicker;","import React, { useState, useEffect } from \"react\";\r\nimport DatePickerText from './DatePickerText';\r\nimport MyDatePicker from './DatePicker';\r\nimport Button from '@mui/material/Button';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Paper from '@mui/material/Paper';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\r\nimport './DateSelectionStyle.css'\r\n\r\nfunction DateSelectionFuture(props) {\r\n var today = new Date();\r\n const [open, setOpen] = useState(false);\r\n const [custom, setCustom] = useState(true);\r\n const [weekSelected, setWeekSelected] = useState(false);\r\n const [monthSelected, setMonthSelected] = useState(true);\r\n const [yearSelected, setYearSelected] = useState(false);\r\n const [fromDate, setFromDate] = useState(props.FromDate);\r\n const [toDate, setToDate] = useState(props.ToDate);\r\n\r\n const handleClickAway = () => {\r\n setOpen(false);\r\n };\r\n useEffect(() => {\r\n let diff = getNumberOfDays(props.FromDate, props.ToDate);\r\n if(sameDay(props.FromDate, new Date())){\r\n if(diff === 7){\r\n setWeekSelected(true);\r\n setMonthSelected(false);\r\n setYearSelected(false);\r\n setCustom(false);\r\n } else if(diff === 30){\r\n setWeekSelected(false);\r\n setMonthSelected(true);\r\n setYearSelected(false);\r\n setCustom(false);\r\n } else if(diff === 365){\r\n setWeekSelected(false);\r\n setMonthSelected(false);\r\n setYearSelected(true);\r\n setCustom(false);\r\n } else {\r\n setWeekSelected(false);\r\n setMonthSelected(false);\r\n setYearSelected(false);\r\n setCustom(true);\r\n }\r\n }else{\r\n setWeekSelected(false);\r\n setMonthSelected(false);\r\n setYearSelected(false);\r\n setCustom(true);\r\n\r\n }\r\n \r\n }, [fromDate, toDate]);\r\n\r\n \r\n function sameDay(d1, d2) {\r\n return d1.getFullYear() === d2.getFullYear() &&\r\n d1.getMonth() === d2.getMonth() &&\r\n d1.getDate() === d2.getDate();\r\n }\r\n\r\n function getNumberOfDays(start, end){\r\n const date1 = new Date(start);\r\n const date2 = new Date(end);\r\n\r\n // One day in milliseconds\r\n const oneDay = 1000 * 60 * 60 * 24;\r\n\r\n // Calculating the time difference between two dates\r\n const diffInTime = date2.getTime() - date1.getTime();\r\n\r\n // Calculating the no. of days between two dates\r\n const diffInDays = Math.round(diffInTime / oneDay);\r\n\r\n return diffInDays;\r\n}\r\n\r\n\r\n\r\n const setTheFromDate = (event) => {\r\n props.setDates(new Date(event), new Date(props.ToDate));\r\n props.setTheFromDate(event)\r\n }\r\n\r\n const setTheToDate = (event) => { \r\n props.setDates(new Date(props.FromDate), new Date(event));\r\n props.setTheToDate(event)\r\n }\r\n\r\n const handleOpen = () => {\r\n setOpen(!open);\r\n }\r\n\r\n const handleSeven = () => {\r\n let relevantDays = new Date(today);\r\n relevantDays.setDate(today.getDate() + 7);\r\n props.setDates(today, relevantDays);\r\n setWeekSelected(true);\r\n setYearSelected(false);\r\n setMonthSelected(false);\r\n setCustom(false);\r\n }\r\n\r\n const handleThirty = () => {\r\n let relevantDays = new Date(today);\r\n relevantDays.setDate(today.getDate() + 30);\r\n props.setDates(today, relevantDays);\r\n setMonthSelected(true);\r\n setYearSelected(false);\r\n setWeekSelected(false);\r\n setCustom(false);\r\n }\r\n\r\n const handleYear = () => {\r\n let relevantDays = new Date(today);\r\n relevantDays.setDate(today.getDate() + 365);\r\n props.setDates(today, relevantDays);\r\n setYearSelected(true);\r\n setMonthSelected(false);\r\n setWeekSelected(false);\r\n setCustom(false);\r\n }\r\n\r\n const handleCustom = () => {\r\n setCustom(!custom);\r\n setMonthSelected(false);\r\n setWeekSelected(false);\r\n setYearSelected(false);\r\n }\r\n\r\n return (\r\n \r\n
\r\n {props.FromDate.toDateString() + \" - \" + props.ToDate.toDateString()}\r\n {open ?\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n {custom ?\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
\r\n );\r\n}\r\nexport default DateSelectionFuture;","import React from 'react';\r\n\r\nconst Style = {\r\n color: \"#696969\",\r\n fontSize: \"15px\"\r\n}\r\n\r\nfunction DescriptionItem(props) {\r\n return (\r\n

{props.Text}

\r\n )\r\n}\r\n\r\nexport default DescriptionItem;","import React from 'react';\r\nimport TextField from '@mui/material/TextField';\r\nimport Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete';\r\n\r\nfunction DropdownCompanyAdd(props) {\r\n\r\n const dropdownList = props.companies.map(x => { return { label: x.name, value: x.id } })\r\n const filter = createFilterOptions();\r\n\r\n return (\r\n {\r\n const filtered = filter(options, params);\r\n const { inputValue } = params;\r\n // Suggest the creation of a new value\r\n const isExisting = options.some((option) => inputValue === option.label);\r\n if (inputValue !== '' && !isExisting) {\r\n filtered.push({\r\n inputValue,\r\n label: `Add \"${inputValue}\"`,\r\n });\r\n }\r\n return filtered;\r\n }}\r\n freeSolo\r\n value = {props.value}\r\n options={dropdownList.sort((a, b) => a.label.localeCompare(b.label))}\r\n getOptionLabel={(option) => {\r\n // Value selected with enter, right from the input\r\n if (typeof option === 'string') {\r\n return option;\r\n }\r\n // Add \"xxx\" option created dynamically\r\n if (option.inputValue) {\r\n return option.inputValue;\r\n }\r\n // Regular option\r\n return option.label;\r\n }}\r\n inputValue={props.value? props.value:\"\"}\r\n onInputChange={(e) => props.action(e)}\r\n renderOption={(props, option) =>
  • {option.label}
  • }\r\n onChange={(event, newValue) => {\r\n if (typeof newValue === 'string') {\r\n props.action(newValue)\r\n props.action2(newValue)\r\n } else if (newValue && newValue.inputValue) {\r\n props.action2(newValue)\r\n props.action(newValue)\r\n } else {\r\n props.action(event)\r\n }\r\n\r\n }} renderInput={(params) => props.action(event)} />}\r\n />\r\n );\r\n}\r\n\r\nexport default DropdownCompanyAdd","import TextField from '@mui/material/TextField';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\n\r\nfunction DropdownResources(props) {\r\n\r\n // Getting the Array List\r\n const dropdownList = props.resources.map(x => { return { label: x.resourceDescription, value: x.id } })\r\n // Filtering the Array list for any duplicates\r\n const filterd = Array.from(new Set(dropdownList.map(a => a.label)))\r\n .map(label => {\r\n return dropdownList.find(a => a.label === label)\r\n })\r\n\r\n return (\r\n {\r\n if (typeof newValue === 'string') {\r\n props.action(newValue)\r\n } else if (newValue && newValue.inputValue) {\r\n props.action(newValue)\r\n } else {\r\n props.action(event)\r\n }\r\n }}\r\n options={filterd.sort((a, b) => a.label.localeCompare(b.label))}\r\n renderInput={(params) => props.action(event)}/>}\r\n />\r\n );\r\n}\r\n\r\nexport default DropdownResources","import React from 'react';\r\nimport Button from '@mui/material/Button'\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\n\r\nfunction ButtonSave(props){\r\n \r\n const theme = createTheme({\r\n palette: {\r\n neutral: {\r\n main: '#C3996B',\r\n contrastText: '#fff',\r\n },\r\n },\r\n });\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst ButtonStyle = {\r\n margin: '5px',\r\n marginTop: '15px !important',\r\n\r\n}\r\n\r\nexport default ButtonSave;","import React, { useEffect, useState } from 'react';\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Select from '@mui/material/Select';\r\nimport ListSubheader from '@mui/material/ListSubheader';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\r\nimport IconButton from '@mui/material/IconButton';\r\n\r\nfunction DropdownType(props) {\r\n const [select, setSelect] = useState(\"\");\r\n const [list, setList] = useState([]);\r\n const [apis, setapis] = useState([]);\r\n const [openList, setOpenList] = useState(false);\r\n const [openApi, setOpenApi] = useState(false);\r\n\r\n useEffect(() => {\r\n dataService.getLists(props.Login.userid).then(result => {\r\n setList(result.sort((a, b) => a.name.localeCompare(b.name)));\r\n });\r\n \r\n dataService.getApis(props.Login.userid).then(result => {\r\n setapis(result.sort((a, b) => a.name.localeCompare(b.name)));\r\n });\r\n\r\n if (props.row !== undefined) {\r\n setOpenList(true);\r\n setOpenApi(true);\r\n setSelect(props.row);\r\n }\r\n // eslint-disable-next-line \r\n }, [])\r\n\r\n const handleSelect = (event) => {\r\n setSelect(event.target.value);\r\n props.action(event, props.id);\r\n };\r\n\r\n const handleOpenList = () => {\r\n setOpenList(!openList);\r\n };\r\n\r\n const handleOpenApi = () => {\r\n setOpenApi(!openApi);\r\n };\r\n\r\n return (\r\n \r\n {select ? null : Type}\r\n handleSelect(e)}\r\n MenuProps={{ PaperProps: { sx: { maxHeight: 210 } } }}\r\n >\r\n Type's\r\n Counter\r\n Free text\r\n Scanner\r\n Stopwatch\r\n Take Picture\r\n\r\n List\r\n \r\n \r\n \r\n \r\n {openList && list.map((row, index) => (\r\n props.actionDataList(props.id, row)} value={row.name} index={index} >{\"Dropdown - \" + row.name}\r\n ))}\r\n \r\n Api\r\n \r\n \r\n \r\n \r\n {openApi && apis.map((row, index) => (\r\n props.actionExternalApi(props.id, row)} value={row.name} index={index} >{\"Api - \" + row.name}\r\n ))}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default DropdownType\r\n","import React, { useState } from \"react\";\r\nimport { ChromePicker } from 'react-color';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nfunction ColorPicker(props) {\r\n const classes = useStyles();\r\n const [openPicker, setOpenPicker] = useState(false);\r\n const [usedColor, setColor] = useState(props.color ? props.color : \"#000\");\r\n\r\n const openColorPicker = () => {\r\n setOpenPicker(true)\r\n }\r\n\r\n const closeColorPicker = () => {\r\n setOpenPicker(false)\r\n }\r\n\r\n const handleChange = (data) => {\r\n setColor(data.hex)\r\n props.action(data.hex, props.id)\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n {openPicker ?
    \r\n
    \r\n \r\n
    : null}\r\n
    \r\n )\r\n\r\n}\r\n\r\nexport default ColorPicker\r\n\r\nconst useStyles = makeStyles((usedColor) => ({\r\n color: {\r\n width: '36px',\r\n height: '14px',\r\n borderRadius: '2px',\r\n },\r\n swatch: {\r\n padding: '5px',\r\n background: '#fff',\r\n borderRadius: '1px',\r\n boxShadow: '0 0 0 1px rgba(0,0,0,.1)',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n popover: {\r\n position: 'absolute',\r\n zIndex: '2',\r\n },\r\n cover: {\r\n position: 'fixed',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n left: '0px',\r\n },\r\n}));","import React, { useEffect, useState } from \"react\";\r\nimport Table from '@mui/material/Table';\r\nimport Fab from '@mui/material/Fab';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport DropdownType from \"../Dropdowns/DropdownType\";\r\nimport ButtonNormalText from \"../Buttons/ButtonNormalText\";\r\nimport TextField from '@mui/material/TextField';\r\nimport { TableContainer, TableRow } from '@mui/material';\r\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\";\r\nimport './TableStyle.css';\r\nimport Radio from '@mui/material/Radio';\r\nimport { dataService } from \"../../../Services/data/data.service\";\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport IconButton from '@mui/material/IconButton';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport Select from '@mui/material/Select';\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Paper from '@mui/material/Paper';\r\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\r\nimport ColorPicker from \"../ColorPicker\";\r\nimport { controlTypes } from \"../../../Config/constants\";\r\nimport InputAdornment from '@mui/material/InputAdornment';\r\nimport Input from '@mui/material/Input';\r\nimport ToggleButton from '@mui/material/ToggleButton';\r\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\r\nimport RemoveIcon from '@mui/icons-material/Remove';\r\nimport Tooltip from '@mui/material/Tooltip';\r\n\r\n\r\nfunction TableDragResources(props) {\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(false);\r\n const [types, setTypes] = useState([]);\r\n const [lists, setLists] = useState([]);\r\n const [apis, setApis] = useState([]);\r\n const [expandTable, setExpandTable] = useState(false);\r\n\r\n useEffect(() => {\r\n if (types.length === 0 || types === undefined) {\r\n dataService.getTypes().then(results => {\r\n setTypes(results);\r\n });\r\n }\r\n\r\n dataService.getLists(props.Login.userid).then(result => {\r\n setLists(result.sort((a, b) => a.name.localeCompare(b.name)));\r\n });\r\n\r\n dataService.getApis(props.Login.userid).then(result => {\r\n setApis(result.sort((a, b) => a.name.localeCompare(b.name)));\r\n });\r\n // eslint-disable-next-line \r\n }, []);\r\n\r\n const handleDialogOpen = () => {\r\n setOpen(true);\r\n }\r\n\r\n const handleDialogClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n const selectType = (row) => {\r\n switch (row.type) {\r\n case 1: return \"Counter\";\r\n case 2: return \"Stopwatch\";\r\n case 3: return \"Text\";\r\n case 4:\r\n if (lists !== undefined && lists.length > 0) {\r\n return lists.find(x => x.id === row.dataListId).name;\r\n } break;\r\n case 5: return \"Scanner\";\r\n case 6: return \"Picture\";\r\n case 7:\r\n if (apis !== undefined && apis.length > 0 && row.externalApiId !== null) {\r\n return apis.find(x => x.id === row.externalApiId).name;\r\n } break;\r\n // eslint-disable-next-line \r\n }\r\n }\r\n\r\n const selectTypeId = (row) => {\r\n switch (row.type) {\r\n case 1: return 1;\r\n case 2: return 2;\r\n case 3: return 3;\r\n case 4:\r\n if (lists !== undefined && lists.length > 0) {\r\n return lists.find(x => x.id === row.dataListId).name;\r\n } break;\r\n case 5: return 5;\r\n case 6: return 6;\r\n case 7:\r\n if (apis !== undefined && apis.length > 0 && row.externalApiId !== null) {\r\n return apis.find(x => x.id === row.externalApiId).name;\r\n } break;\r\n // eslint-disable-next-line \r\n }\r\n }\r\n\r\n const setType = (event, id) => {\r\n if (event.target.value < 9) {\r\n let tempArray = props.rows.map(x => ({ ...x }))\r\n if (event.target.value !== (controlTypes.CAMERA || controlTypes.COUNTER || controlTypes.SCANNER)) {\r\n tempArray.find(x => x.Id === id).comment = false;\r\n }\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).type = event.target.value;\r\n tempArray.find(x => x.Id === id).typeId = event.target.value;\r\n if (tempArray.find(x => x.Id === id).color === undefined) {\r\n switch (event.target.value) {\r\n case 1:\r\n tempArray.find(x => x.Id === id).color = \"#faead9\";\r\n tempArray.find(x => x.Id === id).name = \"Counter\";\r\n break;\r\n case 2:\r\n tempArray.find(x => x.Id === id).color = \"#b7cbec\";\r\n tempArray.find(x => x.Id === id).name = \"Stopwatch\";\r\n break;\r\n case 3:\r\n tempArray.find(x => x.Id === id).color = \"#e1ffe2\";\r\n tempArray.find(x => x.Id === id).name = \"Text\";\r\n break;\r\n case 5:\r\n tempArray.find(x => x.Id === id).color = \"#e1ffe2\";\r\n tempArray.find(x => x.Id === id).name = \"Scanner\";\r\n break;\r\n case 6:\r\n tempArray.find(x => x.Id === id).color = \"#84ff69\";\r\n tempArray.find(x => x.Id === id).name = \"Picture\";\r\n break;\r\n // eslint-disable-next-line \r\n }\r\n }\r\n } else {\r\n tempArray.find(x => x.edit).type = event.target.value;\r\n tempArray.find(x => x.edit).typeId = event.target.value;\r\n if (tempArray.find(x => x.Id === id).color === undefined) {\r\n switch (event.target.value) {\r\n case 1:\r\n tempArray.find(x => x.Id === id).color = \"#faead9\";\r\n tempArray.find(x => x.Id === id).name = \"Counter\";\r\n break;\r\n case 2:\r\n tempArray.find(x => x.Id === id).color = \"#b7cbec\";\r\n tempArray.find(x => x.Id === id).name = \"Stopwatch\";\r\n break;\r\n case 3:\r\n tempArray.find(x => x.Id === id).color = \"#e1ffe2\";\r\n tempArray.find(x => x.Id === id).name = \"Text\";\r\n break;\r\n case 5:\r\n tempArray.find(x => x.Id === id).color = \"#e1ffe2\";\r\n tempArray.find(x => x.Id === id).name = \"Scanner\";\r\n break;\r\n case 6:\r\n tempArray.find(x => x.Id === id).color = \"#84ff69\";\r\n tempArray.find(x => x.Id === id).name = \"Picture\";\r\n break;\r\n // eslint-disable-next-line \r\n }\r\n }\r\n }\r\n props.setRows(tempArray);\r\n }\r\n }\r\n\r\n const setTypeDataList = (id, DataListrow) => {\r\n let tempArray = props.rows.map(x => ({ ...x }))\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).type = 4;\r\n tempArray.find(x => x.Id === id).typeId = 4;\r\n tempArray.find(x => x.Id === id).color = \"#fab1b1\";\r\n tempArray.find(x => x.Id === id).dataListId = DataListrow.id;\r\n tempArray.find(x => x.Id === id).name = \"List - \" + DataListrow.name;\r\n } else {\r\n tempArray.find(x => x.edit ).type = 4;\r\n tempArray.find(x => x.edit ).typeId = 4;\r\n tempArray.find(x => x.Id === id).dataListId = \"#fab1b1\";\r\n tempArray.find(x => x.Id === id).name = \"List - \" + DataListrow.name;\r\n }\r\n props.setRows(tempArray);\r\n }\r\n\r\n const setTypeExternalApi = (id, ExternalApirow) => {\r\n let tempArray = props.rows.map(x => ({ ...x }))\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).type = 7;\r\n tempArray.find(x => x.Id === id).typeId = 7;\r\n tempArray.find(x => x.Id === id).color = \"#52ed47\";\r\n tempArray.find(x => x.Id === id).externalApiId = ExternalApirow.id;\r\n tempArray.find(x => x.Id === id).name = \"Api - \" + ExternalApirow.name;\r\n } else {\r\n tempArray.find(x => x.edit ).type = 7;\r\n tempArray.find(x => x.edit ).typeId = 7;\r\n tempArray.find(x => x.Id === id).color = \"#52ed47\";\r\n tempArray.find(x => x.Id === id).externalApiId = ExternalApirow.id;\r\n tempArray.find(x => x.Id === id).name = \"Api - \" + ExternalApirow.name;\r\n }\r\n props.setRows(tempArray);\r\n }\r\n\r\n const setDescription = (event, id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).description = event.target.value;\r\n } else {\r\n tempArray.find(x => x.edit ).description = event.target.value;\r\n }\r\n props.setRows(tempArray);\r\n }\r\n const setPrice = (event, id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n if(event.target.value === ''){\r\n tempArray.find(x => x.Id === id).price = '';\r\n\r\n }else{\r\n tempArray.find(x => x.Id === id).price = parseFloat(event.target.value);\r\n\r\n }\r\n } else {\r\n if(event.target.value === ''){\r\n tempArray.find(x => x.edit).price = '';\r\n\r\n }else{\r\n tempArray.find(x => x.edit).price = parseFloat(event.target.value);\r\n\r\n }\r\n }\r\n props.setRows(tempArray);\r\n }\r\n const handleCostProfit = (event, id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).costProfit = event;\r\n if(event === '+'){\r\n tempArray.find(x => x.Id === id).isProfit = true;\r\n }else{\r\n tempArray.find(x => x.Id === id).isProfit = false;\r\n }\r\n } else {\r\n tempArray.find(x => x.edit).costProfit = event;\r\n if(event === '+'){\r\n tempArray.find(x => x.Id === id).isProfit = true;\r\n }else{\r\n tempArray.find(x => x.Id === id).isProfit = false;\r\n }\r\n }\r\n props.setRows(tempArray);\r\n };\r\n\r\n\r\n const GenerateID = () => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n const ids = tempArray.map(object => {\r\n return object.Id;\r\n });\r\n const max = Math.max(...ids);\r\n if (tempArray.length === 0) {\r\n return 1;\r\n }\r\n else {\r\n let index = max;\r\n index++;\r\n return index;\r\n }\r\n }\r\n\r\n const editProjectRow = (id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n tempArray.find(x => x.Id === id).edit = true;\r\n props.setRows(tempArray);\r\n }\r\n\r\n const saveProjectRow = (id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n if (tempArray.find(x => x.Id === id).description === \"\" || tempArray.find(x => x.Id === id).type === null) {\r\n handleDialogOpen();\r\n } else {\r\n tempArray.find(x => x.Id === id).edit = false;\r\n\r\n props.setRows(tempArray);\r\n props.makeSave(tempArray);\r\n }\r\n }\r\n\r\n const deleteProjectRow = (id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n let index = tempArray.indexOf(tempArray.find(x => x.Id === id));\r\n tempArray.splice(index, 1);\r\n props.setRows(tempArray);\r\n props.makeSave(tempArray);\r\n }\r\n\r\n const addRow = () => {\r\n var tempArray = props.rows.map(x => ({ ...x }))\r\n if (tempArray.find(x => x.type === null || x.description === \"\") === undefined) {\r\n let Rowid = { Id: GenerateID(), description: \"\", type: null, edit: true, name: \"\", sequence: GenerateID(), comment: false, newRow: true, price: 0, costProfit: '+', isProfit: true };\r\n let PrevId = GenerateID() - 1;\r\n if (tempArray.length !== 0) {\r\n if (tempArray.find(x => x.Id === PrevId).description !== \"\" && tempArray.find(x => x.Id === PrevId).type !== null) {\r\n tempArray.find(x => x.Id === PrevId).edit = false;\r\n tempArray.push(Rowid);\r\n props.setRows(tempArray);\r\n }\r\n else {\r\n tempArray.push(Rowid);\r\n props.setRows(tempArray);\r\n }\r\n }\r\n else {\r\n tempArray.push(Rowid);\r\n props.setRows(tempArray);\r\n }\r\n }\r\n }\r\n\r\n const handleColor = (event, id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).color = event;\r\n } else {\r\n tempArray.find(x => x.edit).color = event;\r\n }\r\n props.setRows(tempArray);\r\n }\r\n\r\n const handleComment = (id) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).comment = !tempArray.find(x => x.Id === id).comment;\r\n } else {\r\n tempArray.find(x => x.edit).comment = !tempArray.find(x => x.Id === id).comment;\r\n }\r\n props.setRows(tempArray);\r\n }\r\n\r\n const MoveSequence = (source, destination) => {\r\n let tempArray = props.rows.map(x => ({ ...x }));\r\n tempArray.forEach(function (value, i) {\r\n value.sequence = i;\r\n });\r\n tempArray[source].sequence = -1;\r\n if (source > destination) {\r\n tempArray.filter(x => x.sequence >= destination && x.sequence !== -1 && x.sequence < source).forEach(x => {\r\n x.sequence++;\r\n });\r\n }\r\n else if (source < destination) {\r\n tempArray.filter(x => x.sequence <= destination && x.sequence !== -1 && x.sequence > source).forEach(x => {\r\n x.sequence--;\r\n });\r\n }\r\n\r\n tempArray.find(x => x.sequence === -1).sequence = destination;\r\n tempArray.sort((a, b) => a.sequence - b.sequence);\r\n props.setRows(tempArray);\r\n Shrink();\r\n }\r\n\r\n const Expand = () => {\r\n setExpandTable(true);\r\n }\r\n\r\n const Shrink = () => {\r\n setExpandTable(false);\r\n }\r\n\r\n function handleOnDragEnd(result) {\r\n if (result.destination) {\r\n MoveSequence(result.source.index, result.destination.index);\r\n }\r\n if (!result.destination) return;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {(provided) => (\r\n \r\n {props.rows.map((row, index) => {\r\n return (\r\n \r\n {(provided) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {provided.placeholder}\r\n \r\n )}\r\n \r\n )\r\n })\r\n }\r\n {expandTable ?\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 {\"Error\"}\r\n \r\n \r\n \r\n Some fields are empty.\r\n \r\n \r\n \r\n Close\r\n \r\n \r\n
    #DescriptionTypeCommentColorAction
    \r\n
    \r\n {index + 1}\r\n
    \r\n
    (Expand())} onMouseUp={() => (Shrink())} className={classes.dragTd} {...provided.dragHandleProps}>\r\n \r\n \r\n {row.edit ?// eslint-disable-next-line\r\n 0 ? row.description : ''} onChange={(event) => setDescription(event, row.Id)} /> :\r\n \r\n }\r\n {row.edit ?\r\n :// eslint-disable-next-line\r\n types.length === 0 ? null : }\r\n \r\n {row.edit ?// eslint-disable-next-line\r\n setPrice(event, row.Id)} InputProps={{\r\n startAdornment: ,\r\n endAdornment: {selectType(row) === 'Stopwatch' ? 'price/hour' : 'price/event'},\r\n inputMode: 'numeric'\r\n }} /> :\r\n €,\r\n endAdornment: {selectType(row) === 'Stopwatch' ? 'price/hour' : 'price/event'},\r\n inputMode: 'numeric'\r\n }} />\r\n\r\n }\r\n \r\n \r\n handleCostProfit('+', row.Id)} disabled={row.edit ? false : true}>\r\n \r\n \r\n \r\n \r\n\r\n handleCostProfit('-', row.Id)} disabled={row.edit ? false : true}>\r\n \r\n \r\n \r\n \r\n \r\n {row.edit && (row.type === controlTypes.COUNTER || row.type === controlTypes.SCANNER || row.type === controlTypes.CAMERA) ?\r\n handleComment(row.Id)} checked={row.comment} /> :\r\n }\r\n \r\n {row.edit ?\r\n y.Id === row.Id).color} id={row.Id} action={handleColor} /> :\r\n
    \r\n
    y.Id === row.Id).color }}>\r\n
    \r\n
    }\r\n
    \r\n {row.edit ?\r\n saveProjectRow(row.Id)} className={classes.editButton} size=\"large\">\r\n \r\n :\r\n editProjectRow(row.Id)} className={classes.editButton} size=\"large\">\r\n \r\n \r\n }\r\n \r\n deleteProjectRow(row.Id)} className={classes.functionButton} color='error' size=\"large\">\r\n \r\n \r\n
    \r\n -\r\n \r\n \r\n \r\n \r\n Description\r\n (null\r\n )} disabled />\r\n \r\n \r\n \r\n \r\n\r\n €,\r\n endAdornment: price/event,\r\n inputMode: 'numeric'\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\r\nexport default TableDragResources;\r\n\r\nconst useStyles = makeStyles({\r\n tableContent: {\r\n paddingTop: \"15px\",\r\n },\r\n tableHead: {\r\n marginBottom: \"15px\",\r\n },\r\n addRow: {\r\n opacity: \"0.3\"\r\n },\r\n tableTd: {\r\n padding: \"5px\",\r\n },\r\n tableRow: {\r\n tableLayout: \"fixed\",\r\n },\r\n indexTd: {\r\n display: 'table-cell',\r\n borderRight: '2px solid rgb(224, 224, 224)',\r\n width: '25px',\r\n background: 'rgba(0, 0, 0, 0.54)',\r\n color: 'white',\r\n zIndex: '2',\r\n },\r\n emptydrag: {\r\n padding: '17px !important',\r\n border: '0'\r\n },\r\n listOrder: {\r\n paddingLeft: '5px',\r\n paddingRight: '5px',\r\n },\r\n dragTd: {\r\n border: '0',\r\n width: '24px',\r\n },\r\n dragIcon: {\r\n float: 'left',\r\n },\r\n descriptionField: {\r\n width: \"100%\",\r\n },\r\n editButton: {\r\n fontSize: '2rem !important',\r\n color: '#0B4097 !important',\r\n },\r\n functionButton: {\r\n fontSize: '2rem !important',\r\n },\r\n ColorPickerBorder: {\r\n padding: '5px',\r\n width: '46px',\r\n height: '24px',\r\n borderRadius: '2px',\r\n boxShadow: '0 0 0 1px rgba(0,0,0,.1)',\r\n background: 'white',\r\n marginBottom: '5px'\r\n },\r\n ColorPicker: {\r\n width: '36px',\r\n height: '14px',\r\n borderRadius: '2px',\r\n },\r\n});","import React, { useEffect, useState } from 'react';\r\nimport TextfieldInput from '../../Shared/TextField';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport DateSelectionFuture from \"../../Shared/DateSelection/DateSelectionFuture\";\r\nimport DescriptionItem from '../../Shared/DescriptionItem';\r\nimport DropdownCompanyAdd from './Components/DropdownCopmanyAdd';\r\nimport DropdownResources from '../../Shared/Dropdowns/DropdownResources';\r\nimport ButtonSave from '../../Shared/Buttons/ButtonSave';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Grid } from '@mui/material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport TableDragResources from '../../Shared/Tables/TableDragResources';\r\n\r\nfunction CreatePage(props) {\r\n\r\n const classes = useStyles();\r\n var today = new Date();\r\n var nextMonth = new Date();\r\n nextMonth.setDate(nextMonth.getDate() + 30);\r\n const [FromDate, setFromDate] = useState(today);\r\n const [ToDate, setToDate] = useState(nextMonth);\r\n const [ResourceName, setResourceName] = useState(\"\");\r\n const [CompanyName, setCompanyName] = useState(\"\");\r\n const [CompanyId, setCompanyId] = useState(null);\r\n const [ProjectName, setProjectName] = useState(\"\");\r\n const [companies, setCompanies] = useState([]);\r\n const [resources, setResources] = useState([]);\r\n const [projectrows, setProjectRows] = useState([]);\r\n const history = useHistory();\r\n const GetUserID = props.Login.userid;\r\n const [types, setTypes] = useState([]);\r\n const [helperTextProjectName, setHelperTextProjectName] = useState(null);\r\n const [helperTextCompany, setHelperTextCompany] = useState(null);\r\n const [helperTextResourceDescription, setHelperTextResourceDescription] = useState(null);\r\n const [errorProjectName, setErrorProjectName] = useState(false);\r\n const [errorCompany, setErrorCompany] = useState(false);\r\n const [errorResourceDescription, setErrorResourceDescription] = useState(false);\r\n const [emptyDetails, setEmptyDetails] = useState(false);\r\n \r\n useEffect(() => { \r\n dataService.getCompanies(props.Login.userid).then(results => {\r\n setCompanies(results);\r\n })\r\n dataService.getResources(GetUserID).then(results => {\r\n setResources(results);\r\n });\r\n dataService.getTypes().then(results => {\r\n setTypes(results.sort((a, b) => a.description.localeCompare(b.description)));\r\n });\r\n }, []);\r\n\r\n const setProject = (event) => {\r\n setProjectName(event.target.value);\r\n }\r\n\r\n const setTheFromDate = (event) => {\r\n if (event !== FromDate) {\r\n setFromDate(event);\r\n }\r\n }\r\n\r\n const setTheToDate = (event) => {\r\n if (event !== ToDate) {\r\n setToDate(event);\r\n }\r\n }\r\n\r\n const setDates = (fromDate, toDate) => {\r\n setToDate(toDate);\r\n setFromDate(fromDate);\r\n }\r\n\r\n const setNewCompanyFunction = (event) => {\r\n dataService.saveCompany(event.inputValue, props.Login.userid).then(results => {\r\n let newCompany = { id: results.id, name: results.name };\r\n let tempCompanies = [...companies];\r\n tempCompanies.push(newCompany);\r\n setCompanies(tempCompanies);\r\n setCompanyId(results.id);\r\n setCompanyName(results.name);\r\n })\r\n }\r\n\r\n const setCompany = (event) => {\r\n if (event.inputValue) {\r\n if (companies.some(x => x.name === event.inputValue)) {\r\n setCompanyId(companies.find(x => x.name === event.inputValue).id);\r\n setCompanyName(event.inputValue);\r\n }\r\n }\r\n else {\r\n if (event.target.textContent) {\r\n if (companies.some(x => x.name === event.target.textContent)) {\r\n setCompanyId(companies.find(x => x.name === event.target.textContent).id);\r\n setCompanyName(event.target.textContent);\r\n }\r\n }\r\n else {\r\n\r\n if (companies.some(x => x.name === event.target.value)) {\r\n setCompanyId(companies.find(x => x.name === event.target.value).id);\r\n }\r\n setCompanyName(event.target.value);\r\n }\r\n }\r\n\r\n }\r\n\r\n const setResource = (event) => {\r\n if (event.inputValue) {\r\n setResourceName(event.inputValue);\r\n }\r\n else {\r\n if (event.target.textContent) {\r\n setResourceName(event.target.textContent);\r\n }\r\n else {\r\n setResourceName(event.target.value);\r\n }\r\n }\r\n }\r\n\r\n const save = (newProjectrows) => {\r\n setProjectRows(newProjectrows);\r\n }\r\n\r\n const sendToApi = () => {\r\n if (ProjectName === \"\" || ResourceName === \"\" || CompanyId === \"\" || CompanyName === \"\" || FromDate === \"\" || ToDate === \"\" || ResourceName == null || FromDate == null || ToDate == null) {\r\n if (ProjectName === \"\") {\r\n setHelperTextProjectName(\"Please enter a project name.\");\r\n setErrorProjectName(true);\r\n }\r\n else {\r\n setHelperTextProjectName(null)\r\n setErrorProjectName(false)\r\n }\r\n if (ResourceName === \"\" || ResourceName === null) {\r\n setHelperTextResourceDescription(\"Please Select or enter a Loaction.\");\r\n setErrorResourceDescription(true);\r\n }\r\n else {\r\n setHelperTextResourceDescription(null);\r\n setErrorResourceDescription(false);\r\n }\r\n if (CompanyId === \"\" || CompanyId === null || CompanyName === \"\" || CompanyName === null) {\r\n setHelperTextCompany(\"Please Select or Create a Company.\");\r\n setErrorCompany(true);\r\n }\r\n else {\r\n setHelperTextCompany(null);\r\n setErrorCompany(false);\r\n }\r\n }\r\n else { \r\n setHelperTextResourceDescription(null);\r\n setErrorResourceDescription(false);\r\n setHelperTextCompany(null);\r\n setErrorCompany(false);\r\n setHelperTextProjectName(null);\r\n setErrorProjectName(false);\r\n setEmptyDetails(false); \r\n if (projectrows.length === 0 || projectrows.find(x => x.Id).edit === true) {\r\n setEmptyDetails(true);\r\n }\r\n else {\r\n let i = 1;\r\n let projectDetails = projectrows.map(x => ({ description: x.description, typeId: x.type, type: x.type, sequence: i++, color: x.color, dataListId: x.dataListId, HasComment: x.comment, externalApiId: x.externalApiId, price: x.price, isProfit: x.isProfit }));\r\n dataService.createNewProject(props.Login.userid, ProjectName, ResourceName, CompanyId, CompanyName, FromDate, ToDate, projectDetails).then(result => {\r\n if (result.success === true) {\r\n toast.success('Project was saved successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n let tempProjectName = ProjectName\r\n props.actions.projectIdAction(result.createmodel.projectID);\r\n props.actions.projectQrAction(result.createmodel.qrCode);\r\n props.actions.projectNameAction(tempProjectName);\r\n });\r\n let tempCompanyName = CompanyName;\r\n let tempCompanyId = CompanyId;\r\n let tempResourceName = ResourceName;\r\n let tempFromDate = FromDate;\r\n let tempToDate = ToDate;\r\n let tempProjectName = ProjectName;\r\n props.actions.companyAction(tempCompanyName);\r\n props.actions.companyIdAction(tempCompanyId);\r\n props.actions.resourceAction(tempResourceName);\r\n props.actions.fromDateAction(tempFromDate);\r\n props.actions.toDateAction(tempToDate);\r\n props.actions.projectNameAction(tempProjectName);\r\n history.push(\"/modify\");\r\n }\r\n\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n {emptyDetails === true ?\r\n
    \r\n \r\n \r\n \r\n

    Please create atleast one item.

    \r\n
    \r\n :\r\n
    \r\n \r\n \r\n \r\n
    }\r\n
    \r\n {/* */}\r\n } content=\"Save\" onClick={sendToApi} />\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default CreatePage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"90%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n height: '91%'\r\n },\r\n qrButton: {\r\n backgroundColor: \"#C3996B\"\r\n },\r\n buttonContainer: {\r\n marginTop: '15px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n projectOptions: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap'\r\n }\r\n },\r\n projectOption: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: \"250px\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n marginRight: '25px',\r\n }\r\n}));","import React, { useEffect } from 'react';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport { Link } from 'react-router-dom';\r\nimport Button from '@mui/material/Button';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nfunction ConfigurationPage(props) {\r\n\r\n const classes = useStyles();\r\n useEffect(() => {\r\n }, []);\r\n\r\n\r\n return (\r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n {/* \r\n */} Create a new dropdown.\r\n
    \r\n \r\n \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {/* \r\n */} Manage existing dropdowns. (Edit, delete,...)\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 */} Create a new API.\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 */} Manage existing APIs. (Edit or delete.)\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\nexport default ConfigurationPage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n borderRadius: \"8px\",\r\n [theme.breakpoints.up('lg')]: {\r\n maxWidth: \"50%\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n maxWidth: \"60%\",\r\n },\r\n\r\n [theme.breakpoints.down('md')]: {\r\n maxWidth: \"90%\",\r\n\r\n },\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"25px\"\r\n },\r\n\r\n\r\n titleTextStyle: {\r\n display: \"flex\",\r\n marginLeft: \"20px\",\r\n },\r\n boxStyle: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n paddingTop: \"18px\",\r\n paddingBottom: \"18px\",\r\n marginBottom: '25px',\r\n paddingLeft: '30px',\r\n paddingRight: '30px',\r\n\r\n },\r\n menuItem: {\r\n color: '#1D3557',\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '1rem',\r\n width: '50% !important',\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100% !important',\r\n fontSize: '1.2rem',\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n\r\n iconStyle: {\r\n verticalAlign: \"-8px\",\r\n marginRight: \"4px\"\r\n },\r\n link: {\r\n [theme.breakpoints.down('sm')]: {\r\n marginLeft: '5%',\r\n width: '50% !important',\r\n minWidth: '50% !important',\r\n },\r\n },\r\n linkButton: {\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n minHeight: \"46.8px\",\r\n height: \"90%\",\r\n padding: \"10px\",\r\n fontSize: \"1rem\",\r\n },\r\n\r\n [theme.breakpoints.up('lg')]: {\r\n width: '250px',\r\n minWidth: \"250px\",\r\n height: \"40px\",\r\n fontSize: \"1.2rem\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n width: '200px',\r\n minWidth: \"200px\",\r\n fontSize: \"1.2rem\",\r\n },\r\n\r\n background: \"#C3996B !important\",\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n hstyle: {\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: \"2rem\",\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n fontSize: \"2.5rem\",\r\n },\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: 'white',\r\n whiteSpace: 'nowrap'\r\n // color: \"#1D3557\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"5%\",\r\n paddingRight: \"5%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#C3996B !important\",\r\n justifyContent: \"space-between\",\r\n color: 'white'\r\n\r\n },\r\n headerLeft: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n width: '33%'\r\n },\r\n headerMiddle: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n\r\n },\r\n headerRight: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n color: 'white'\r\n },\r\n arrowBack: {\r\n padding: '15px',\r\n cursor: 'pointer'\r\n },\r\n\r\n}));","import React, { useState, useEffect } from \"react\";\r\nimport TitlePage from \"../../../Shared/TitlePage\";\r\nimport { Grid } from \"@mui/material\";\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Button from '@mui/material/Button';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\nimport TextField from '@mui/material/TextField';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport { getAuth, sendEmailVerification, updatePassword, onAuthStateChanged } from \"firebase/auth\";\r\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\r\nimport { dataService } from '../../../../Services/data/data.service';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport LockIcon from '@mui/icons-material/Lock';\r\nimport Visibility from '@mui/icons-material/Visibility';\r\nimport VisibilityOff from '@mui/icons-material/VisibilityOff';\r\nimport InputAdornment from '@mui/material/InputAdornment';\r\n\r\ntoast.configure();\r\n\r\nfunction UserSettingsPage(props) {\r\n const classes = useStyles();\r\n const [verified, setVerified] = useState(false);\r\n const [changePassword, setChangePassword] = useState(false);\r\n const [lastName, setLastName] = useState(props.Login.lastName);\r\n const [firstName, setFirstName] = useState(props.Login.userName);\r\n const [password, setPassword] = useState(\"\");\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const handleClickShowPassword = () => setShowPassword(!showPassword);\r\n const handleMouseDownPassword = () => setShowPassword(!showPassword);\r\n\r\n useEffect(() => {\r\n const auth = getAuth();\r\n onAuthStateChanged(auth, (user) => {\r\n if (user) {\r\n // User is signed in, see docs for a list of available properties\r\n // https://firebase.google.com/docs/reference/js/firebase.User\r\n const uid = user.uid;\r\n // ...\r\n setVerified(user.emailVerified);\r\n } else {\r\n // User is signed out\r\n // ...\r\n }\r\n });\r\n let user = auth.currentUser;\r\n\r\n \r\n\r\n }, []);\r\n console.log('verified ', verified)\r\n const handleCheckBox = (e) => {\r\n setChangePassword(!changePassword);\r\n }\r\n const handleVerificationMail = () => {\r\n const tempAuth = getAuth();\r\n\r\n sendEmailVerification(tempAuth.currentUser)\r\n .then(() => {\r\n // Email verification sent!\r\n // ...\r\n });\r\n }\r\n const handleSaveChanges = () => {\r\n const auth = getAuth();\r\n\r\n const user = auth.currentUser;\r\n if (changePassword === true) {\r\n updatePassword(user, password).then(() => {\r\n // Update successful.\r\n }).catch((error) => {\r\n // An error ocurred\r\n // ...\r\n });\r\n }\r\n if (firstName !== \"\" || lastName !== \"\") {\r\n dataService.updateUserData(user.email, firstName, lastName).then(response => {\r\n if (response.success === true) {\r\n props.actions.setUserName(firstName);\r\n props.actions.setLastName(lastName);\r\n toast.success('User updated succefully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n\r\n\r\n })\r\n }\r\n\r\n }\r\n\r\n const changeLastName = (event) => {\r\n setLastName(event.target.value);\r\n }\r\n\r\n const changeFirstName = (event) => {\r\n setFirstName(event.target.value);\r\n }\r\n\r\n const handleChangePassword = (event) => {\r\n setPassword(event.target.value);\r\n }\r\n\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n {verified ?
    \r\n

    Verified user:

    \r\n
    :\r\n
    \r\n You're not verified yet!: \r\n
    \r\n\r\n }\r\n\r\n\r\n
    \r\n Email\r\n \r\n \r\n
    \r\n
    \r\n First name\r\n changeFirstName(event)}\r\n\r\n value={firstName}\r\n fullWidth={true}\r\n\r\n >\r\n \r\n
    \r\n
    \r\n Last name\r\n changeLastName(event)}\r\n\r\n value={lastName}\r\n fullWidth={true}\r\n >\r\n \r\n
    \r\n
    \r\n Change password handleCheckBox(e)}>\r\n\r\n handleChangePassword(event)}\r\n\r\n fullWidth={true}\r\n disabled={changePassword === false}\r\n InputProps={{\r\n startAdornment:\r\n \r\n \r\n ,\r\n endAdornment: (\r\n \r\n \r\n {showPassword ? : }\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\nexport default UserSettingsPage;\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n }, verifiedRow: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'end',\r\n alignItems: 'center'\r\n }, buttonStyle: {\r\n marginLeft: '15px !important',\r\n backgroundColor: '#C3996B !important',\r\n }, labelText: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n marginBottom: '10px',\r\n marginTop: '20px',\r\n fontWeight: '400',\r\n fontSize: '1rem',\r\n color: 'rgb(105, 105, 105) !important'\r\n\r\n }, verifiedText: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n fontWeight: '400',\r\n fontSize: '1rem',\r\n color: 'rgb(105, 105, 105) !important'\r\n\r\n }, logInButton: {\r\n backgroundColor: \"#C3996B !important\",\r\n marginTop: '15px !important',\r\n display: 'flex'\r\n },\r\n titleTextStyle: {\r\n marginLeft: \"20px\",\r\n },\r\n titleSection: {\r\n width: \"100%\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"10%\",\r\n paddingRight: \"10%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#FFFFFF\",\r\n justifyContent: \"space-between\"\r\n },\r\n dateAndCreateDiv: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'end',\r\n flexWrap: 'wrap',\r\n\r\n\r\n },\r\n activeFor: {\r\n color: \"#696969\",\r\n fontSize: \"15px\",\r\n },\r\n backIcon: {\r\n padding: \"20px\",\r\n cursor: \"pointer\"\r\n },\r\n iconItem: {\r\n display: 'flex !important',\r\n alignItems: 'center !important'\r\n },\r\n textField: {\r\n marginTop: '10px',\r\n marginBottom: '10px'\r\n },\r\n disabledTextField: {\r\n backgroundColor: '#dddddd'\r\n }\r\n\r\n\r\n});","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Typography } from '@material-ui/core';\r\nimport { useHistory } from 'react-router-dom';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { parseNewDateToDDMMYYY, parseNewDateToDDMMYYYnoTime } from \"../../../../Utils/dateHelper\";\r\nimport Divider from '@mui/material/Divider';\r\n\r\nexport default function TableHighLow(props) {\r\n const [mostCommonDate, setMostCommonDate] = useState('/');\r\n const [leastCommonDate, setLeastCommonDate] = useState('/');\r\n const [averagePrice, setAveragePrice] = useState({ average: '/', price: '/' });\r\n\r\n\r\n useEffect(() => {\r\n findMostCommonDate(props.detail.measurements);\r\n findLeastCommonDate(props.detail.measurements);\r\n getAllActiveDates(props.detail.measurements);\r\n\r\n }, [])\r\n\r\n const classes = useStyles();\r\n const history = useHistory();\r\n\r\n function padTo2Digits(num) {\r\n return num.toString().padStart(2, '0');\r\n }\r\n\r\n function convertMsToTime(milliseconds) {\r\n let seconds = Math.floor(milliseconds / 1000);\r\n let minutes = Math.floor(seconds / 60);\r\n let hours = Math.floor(minutes / 60);\r\n\r\n seconds = seconds % 60;\r\n minutes = minutes % 60;\r\n hours = hours % 24;\r\n\r\n return `${padTo2Digits(hours)}:${padTo2Digits(minutes)}:${padTo2Digits(\r\n seconds,\r\n )}`;\r\n }\r\n\r\n const findMostCommonDate = (measurements) => {\r\n let tempMostDates = measurements.map(measurement => parseNewDateToDDMMYYYnoTime(new Date(Date.parse(measurement.insertedOn))));\r\n let dateMap = new Map();\r\n tempMostDates.forEach(date => {\r\n if (dateMap.has(date)) {\r\n dateMap.set(date, dateMap.get(date) + 1);\r\n }\r\n else {\r\n dateMap.set(date, 1);\r\n }\r\n });\r\n let mostCommonDate = \"\";\r\n let mostCommonCount = 0;\r\n dateMap.forEach((count, date) => {\r\n if (count > mostCommonCount) {\r\n mostCommonDate = date;\r\n mostCommonCount = count;\r\n }\r\n });\r\n setMostCommonDate(mostCommonDate);\r\n }\r\n\r\n const findLeastCommonDate = (measurements) => {\r\n let tempLeastDate = measurements.map(measurement => parseNewDateToDDMMYYYnoTime(new Date(Date.parse(measurement.insertedOn))));\r\n let dateMap = new Map();\r\n tempLeastDate.forEach(date => {\r\n if (dateMap.has(date)) {\r\n dateMap.set(date, dateMap.get(date) + 1);\r\n }\r\n else {\r\n dateMap.set(date, 1);\r\n }\r\n });\r\n let leastCommonDate = \"\";\r\n let leastCommonCount = 99999;\r\n dateMap.forEach((count, date) => {\r\n if (count < leastCommonCount) {\r\n leastCommonDate = date;\r\n leastCommonCount = count;\r\n }\r\n });\r\n setLeastCommonDate(leastCommonDate);\r\n }\r\n\r\n const getAllActiveDates = (measurements) => {\r\n if (measurements.length > 0) {\r\n let tempDates = measurements.map(measurement => parseNewDateToDDMMYYYnoTime(new Date(Date.parse(measurement.insertedOn))));\r\n let arrUniqueValues = getUniqueValuesFromArray(tempDates);\r\n let arrEventsPerDay = [];\r\n arrUniqueValues.forEach((strMeasurementDate) => {\r\n var dateParts = strMeasurementDate.split(\"/\");\r\n var tempFromDate = new Date(+dateParts[2], dateParts[1] - 1, +dateParts[0]);\r\n var tempToDate = new Date(+dateParts[2], dateParts[1] - 1, +dateParts[0]).addHours(24);\r\n let objFilteredMeasurements = measurements.filter(x => new Date(x.insertedOn) >= tempFromDate && new Date(x.insertedOn) <= tempToDate);\r\n let total;\r\n if (objFilteredMeasurements[0].typeId === 2) {\r\n //Som van de tijden\r\n total = objFilteredMeasurements.reduce((a, v) => a = a + v.integerValue, 0);\r\n } else {\r\n //Som van het aantal events\r\n total = objFilteredMeasurements.length;\r\n }\r\n arrEventsPerDay.push({ date: tempFromDate, total: total });\r\n\r\n });\r\n let intSumOfTotal = arrEventsPerDay.reduce((a, b) => a + b.total, 0);\r\n let floatAvgOfTotal = (intSumOfTotal / arrEventsPerDay.length) || 0;\r\n\r\n let numberPrice = 0;\r\n if (measurements[0].typeId === 2) {\r\n let avgHour = floatAvgOfTotal / 3600;\r\n numberPrice = avgHour * props.detail.price;\r\n floatAvgOfTotal = new Date(floatAvgOfTotal * 1000).toISOString().substring(11, 19)\r\n } else {\r\n numberPrice = floatAvgOfTotal * props.detail.price;\r\n\r\n }\r\n let averageObject = { average: floatAvgOfTotal, price: numberPrice.toLocaleString('nl-BE', {minimumFractionDigits: 2,maximumFractionDigits: 2}) };\r\n setAveragePrice({ average: floatAvgOfTotal, price: numberPrice.toLocaleString('nl-BE', {minimumFractionDigits: 2,maximumFractionDigits: 2}) });\r\n } else {\r\n setAveragePrice({ average: '/', price: '/' });\r\n }\r\n\r\n\r\n\r\n }\r\n Date.prototype.addHours = function (h) {\r\n this.setHours(this.getHours() + h);\r\n return this;\r\n }\r\n\r\n const getUniqueValuesFromArray = (array) => {\r\n var newArray = [];\r\n var newArray = array.filter(function (elem, pos) {\r\n return array.indexOf(elem) == pos;\r\n });\r\n return newArray;\r\n }\r\n\r\n const findEventsWithDate = (measurements, date) => {\r\n if (date !== '/' && date !== undefined) {\r\n let events = measurements.filter(measurement => parseNewDateToDDMMYYYnoTime(new Date(Date.parse(measurement.insertedOn))) === date);\r\n if (events[0].typeId === 2) {\r\n //Stopwatch type\r\n let sum = 0;\r\n let filterEvents = events.filter(x => x.stopValue !== null);\r\n\r\n filterEvents.forEach(event => {\r\n let start = new Date(Date.parse(event.startValue));\r\n let stop = new Date(Date.parse(event.stopValue));\r\n let diff = stop.getTime() - start.getTime();\r\n sum += diff;\r\n });\r\n return (convertMsToTime(sum));\r\n }\r\n else {\r\n return (events.length);\r\n }\r\n }\r\n\r\n }\r\n\r\n const findPrice = (value, detail) => {\r\n if (value !== '/' && value !== undefined) {\r\n if (detail.controlTypeID === 2 && (typeof value) === 'string') { \r\n const [hours, minutes, seconds] = value.split(':');\r\n // minutes are worth 60 seconds. Hours are worth 60 minutes.\r\n let totalSeconds = convertToSeconds(hours, minutes, seconds);\r\n let tempTotal = ((detail.price / 3600) * totalSeconds);\r\n return tempTotal.toLocaleString('nl-BE', {minimumFractionDigits: 2,maximumFractionDigits: 2});\r\n } else {\r\n let tempTotal = (value * detail.price);\r\n\r\n return tempTotal.toLocaleString('nl-BE', {minimumFractionDigits: 2,maximumFractionDigits: 2});\r\n }\r\n }\r\n\r\n // const events = measurements.filter(measurement => parseNewDateToDDMMYYYnoTime(new Date(Date.parse(measurement.insertedOn))) === date);\r\n // if (events[0].startValue !== null && events[0].stopValue !== null) {\r\n // let sum = 0;\r\n // events.forEach(event => {\r\n // const start = new Date(Date.parse(event.startValue));\r\n // const stop = new Date(Date.parse(event.stopValue));\r\n // const diff = stop.getTime() - start.getTime();\r\n // sum += diff;\r\n // });\r\n // return (convertMsToTime(sum));\r\n // }\r\n // else {\r\n // return (events.length);\r\n // }\r\n }\r\n\r\n function convertToSeconds(hours, minutes, seconds) {\r\n return Number(hours) * 60 * 60 + Number(minutes) * 60 + Number(seconds);\r\n }\r\n const handleResultsRedirect = (StartDate) => {\r\n var datearray = StartDate.split(\"/\");\r\n var newdate = datearray[1] + '/' + datearray[0] + '/' + datearray[2];\r\n props.actions.projectNameAction(props.projectName);\r\n props.actions.resourceAction(props.location);\r\n console.log('StartDate ', StartDate)\r\n let fromData = Date.parse(newdate);\r\n let toDate = Date.parse(newdate) + 86400000;\r\n let toDateString = parseNewDateToDDMMYYY(new Date(toDate));\r\n console.log('toDateString ', toDateString)\r\n\r\n props.actions.fromDateAction(StartDate);\r\n props.actions.toDateAction(toDateString);\r\n props.actions.projectReportAction(true);\r\n history.push(\"/results\");\r\n }\r\n\r\n return (\r\n
    \r\n
    handleResultsRedirect(mostCommonDate)}>\r\n
    \r\n Date: \r\n {mostCommonDate}\r\n
    \r\n
    \r\n {props.detail.measurements[0].stopValue !== null ? 'Time: ' : 'Events: '}\r\n {findEventsWithDate(props.detail.measurements, mostCommonDate)}\r\n
    \r\n
    \r\n Effect in €: \r\n € {findPrice(findEventsWithDate(props.detail.measurements, mostCommonDate), props.detail)}\r\n
    \r\n
    \r\n High\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {/* {console.log(averagePrice)} */}\r\n \r\n\r\n
    \r\n
    \r\n {props.detail.measurements[0].stopValue !== null ? 'Average time: ' : 'Average events: '}\r\n {averagePrice.average.toLocaleString('nl-BE', {minimumFractionDigits: 2,maximumFractionDigits: 2})}\r\n
    \r\n
    \r\n Effect in €: \r\n € {averagePrice.price}\r\n
    \r\n
    \r\n Average\r\n
    \r\n
    \r\n \r\n
    handleResultsRedirect(leastCommonDate)}>\r\n
    \r\n Date: \r\n {leastCommonDate}\r\n
    \r\n
    \r\n {props.detail.measurements[0].stopValue !== null ? 'Time: ' : 'Events: '}\r\n {findEventsWithDate(props.detail.measurements, leastCommonDate)}\r\n
    \r\n
    \r\n Effect in €: \r\n € {findPrice(findEventsWithDate(props.detail.measurements, leastCommonDate), props.detail)}\r\n
    \r\n
    \r\n Low\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\r\n bar: {\r\n [theme.breakpoints.up('lg')]: {\r\n minWidth: \"70%\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n minWidth: \"60%\",\r\n },\r\n [theme.breakpoints.down('md')]: {\r\n minWidth: \"65%\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: \"70%\",\r\n },\r\n },\r\n headerContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n flexDirection: 'row',\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n flexDirection: 'row',\r\n width: '100%',\r\n paddingTop: '20px',\r\n paddingBottom: '20px',\r\n paddingRight: '8px',\r\n paddingLeft: '8px',\r\n '&:hover': {\r\n background: '#e8e6e6',\r\n cursor: 'pointer',\r\n }\r\n },\r\n averageContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n flexDirection: 'row',\r\n width: '100%',\r\n paddingTop: '20px',\r\n paddingBottom: '20px',\r\n paddingRight: '8px',\r\n paddingLeft: '8px',\r\n\r\n },\r\n dateContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n flexDirection: 'row',\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n flexFlow: 'space-around',\r\n borderRadius: \"8px\",\r\n gap: \"20px 30px\",\r\n [theme.breakpoints.up('lg')]: {\r\n maxWidth: \"50%\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n maxWidth: \"60%\",\r\n },\r\n [theme.breakpoints.down('md')]: {\r\n maxWidth: \"90%\",\r\n },\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"25px\"\r\n },\r\n titleTextStyle: {\r\n display: \"flex\",\r\n marginLeft: \"20px\",\r\n },\r\n eventBoxStyle: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n flexDirection: \"column\",\r\n height: '100%',\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100%',\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n width: '100%',\r\n },\r\n },\r\n menuItem: {\r\n color: '#1D3557',\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '1rem',\r\n width: '100% !important',\r\n marginBottom: '15px'\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100% !important',\r\n fontSize: '1.2rem',\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n\r\n iconStyle: {\r\n verticalAlign: \"-8px\",\r\n marginRight: \"4px\"\r\n },\r\n link: {\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n },\r\n },\r\n linkButton: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n [theme.breakpoints.down('sm')]: {\r\n minHeight: \"46.8px\",\r\n height: \"90%\",\r\n padding: \"10px\",\r\n fontSize: \"1rem\",\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n height: \"40px\",\r\n fontSize: \"1.2rem\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n fontSize: \"1.2rem\",\r\n },\r\n background: \"#C3996B !important\",\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n hstyle: {\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: \"2rem\",\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n fontSize: \"2.5rem\",\r\n },\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: 'white',\r\n whiteSpace: 'nowrap'\r\n },\r\n titleStyle: {\r\n paddingLeft: \"5%\",\r\n paddingRight: \"5%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#C3996B !important\",\r\n justifyContent: \"space-between\",\r\n color: 'white'\r\n },\r\n headerLeft: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n width: '33%'\r\n },\r\n headerMiddle: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n },\r\n headerRight: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n color: 'white'\r\n },\r\n arrowBack: {\r\n padding: '15px',\r\n cursor: 'pointer'\r\n },\r\n taplrLogo: {\r\n width: '150px',\r\n cursor: 'pointer'\r\n }\r\n}));","import React, { useState, useEffect } from 'react';\r\nimport PieChart, {\r\n Series,\r\n Label,\r\n Connector,\r\n Size,\r\n Export,\r\n Tooltip,\r\n Legend,\r\n} from 'devextreme-react/pie-chart';\r\n\r\nexport default function EventChart(props) {\r\n\r\n useEffect(() => {\r\n }, [])\r\n\r\n const customizePoint = (pointInfo) => {\r\n return { color: pointInfo.data.color };\r\n };\r\n const customizeText = (text) => {\r\n if (text.point.data.minuteamount !== undefined) {\r\n return text.point.data.minuteamount;\r\n } else {\r\n return text.originalValue;\r\n\r\n }\r\n // return {color: pointInfo.data.color};\r\n };\r\n\r\n const customizeTooltip = (pointinfo) => {\r\n let detailName = pointinfo.argument;\r\n let htmlText = '';\r\n htmlText += '' + detailName + '
    '\r\n // if(seriesName === 'Total'){\r\n if (pointinfo.point.data !== null) {\r\n htmlText += '
    ' + pointinfo.percentText + ' - ' + (pointinfo.point.data.type === 2 ? pointinfo.point.data.minuteamount : pointinfo.value + ' events') + '
    ';\r\n }\r\n return {\r\n html: htmlText,\r\n };\r\n }\r\n const onLegendClick = ({ points }) => {\r\n points[0].isVisible() ? points[0].hide() : points[0].show();\r\n\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n );\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport {\r\n Chart,\r\n Title,\r\n CommonSeriesSettings,\r\n Series,\r\n ArgumentAxis,\r\n ValueAxis,\r\n Format,\r\n Label,\r\n Tooltip,\r\n Export,\r\n Crosshair,\r\n TickInterval,\r\n} from 'devextreme-react/chart';\r\nimport Button from 'devextreme-react/button';\r\n\r\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\r\nimport ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp';\r\n\r\nexport default function FinancialChart(props) {\r\n const [chartRef, setChartRef] = useState(null);\r\n\r\n useEffect(() => {\r\n let chartRef = React.createRef();\r\n setChartRef(chartRef);\r\n }, []);\r\n\r\n function customizeAnnotation(pointinfo) {\r\n let color = pointinfo.data.color;\r\n return {\r\n color: color\r\n }\r\n }\r\n\r\n function customizeTooltip(pointinfo) {\r\n let seriesName = pointinfo.seriesName;\r\n let htmlText = '';\r\n htmlText += '' + seriesName + '
    ';\r\n // if(seriesName === 'Total'){\r\n let imgUrl = '';\r\n if (pointinfo.point.data !== null) {\r\n if (pointinfo.point.data.isProfit) {\r\n imgUrl = process.env.PUBLIC_URL + \"/images/greenarrow.png\";\r\n } else {\r\n imgUrl = process.env.PUBLIC_URL + \"/images/arrowdown.png\";\r\n }\r\n let valueTextConverted = pointinfo.valueText.replace(',', '');\r\n let priceConverted = pointinfo.point.data.price;\r\n htmlText += '\"Taplr € ' + parseFloat(valueTextConverted).toLocaleString('nl-BE', {minimumFractionDigits: 2,maximumFractionDigits: 2}) + '
    '\r\n if(seriesName === 'Total'){\r\n htmlText += '' + (pointinfo.point.data.originalMeasurement) + ''\r\n }\r\n htmlText += '' + (pointinfo.point.data.thismeasurement !== undefined ? pointinfo.point.data.thismeasurement : '') + ' (' + (pointinfo.point.data.isProfit ? ' + ' : ' - ') + '€' + priceConverted.toLocaleString('nl-BE', {minimumFractionDigits: 2,maximumFractionDigits: 2}) + ')';\r\n }\r\n return {\r\n html: htmlText,\r\n };\r\n }\r\n function legendClickHandler(e) {\r\n const series = e.target;\r\n if (series.isVisible()) {\r\n series.hide();\r\n } else {\r\n series.show();\r\n }\r\n }\r\n function customizePoint(e) {\r\n let color = e.data.color;\r\n\r\n return {\r\n color: color,\r\n size: 6,\r\n }\r\n\r\n\r\n }\r\n function customizeSeriesPoint(e) {\r\n let color = e.data.color;\r\n return {\r\n visible: false\r\n }\r\n\r\n }\r\n function customizeCrosshairLabel(e) {\r\n if(typeof e.value === 'number'){\r\n return '€ ' + e.point.originalValue.toFixed(2).replace('.', ',');\r\n\r\n }else{\r\n return (new Date(e.point.data.date)).toTimeString().split(' ')[0];\r\n }\r\n\r\n }\r\n return (\r\n
    \r\n {props.financialChartData !== null && props.projectDetailNames.length > 0 ?\r\n x.isVisible)} onLegendClick={legendClickHandler} customizePoint={customizePoint} customizeAnnotation={customizeAnnotation}>\r\n \r\n \r\n \r\n \r\n <CommonSeriesSettings argumentField=\"date\" type=\"line\" />\r\n <Format type=\"fixedPoint\" precision={2} />\r\n {props.projectDetailNames.map(x =>\r\n <Series valueField={x.name + '_price'} name={x.name} color={x.color} customizePoint={customizeSeriesPoint} key={x.name}>\r\n {/* <Label visible={true} >\r\n <Connector visible={true} />\r\n </Label> */}\r\n </Series>\r\n )}\r\n <ArgumentAxis argumentType=\"datetime\" />\r\n <ValueAxis position=\"right\">\r\n <TickInterval hours={1}></TickInterval>\r\n </ValueAxis>\r\n <Export enabled={true} />\r\n\r\n {/* <ZoomAndPan\r\n valueAxis=\"both\"\r\n argumentAxis=\"both\"\r\n dragToZoom={true}\r\n allowMouseWheel={true}\r\n panKey=\"shift\" /> */}\r\n <Crosshair\r\n enabled={true}>\r\n <Label visible={true} customizeText={customizeCrosshairLabel} />\r\n </Crosshair>\r\n </Chart>\r\n : ''}\r\n\r\n </div>\r\n );\r\n\r\n}\r\n","import * as React from 'react';\r\nimport Table from '@mui/material/Table';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport TableCell from '@mui/material/TableCell';\r\nimport TableContainer from '@mui/material/TableContainer';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport Paper from '@mui/material/Paper';\r\nimport { parseNewDateToDDMMYYYnoTime } from \"../../../../Utils/dateHelper\";\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport RemoveIcon from '@mui/icons-material/Remove';\r\nimport NoResults from '../../../../../src/Images/NoResults.png'\r\n\r\n\r\n\r\n\r\nexport default function PriceTable(props) {\r\n return (\r\n <div component={Paper}>\r\n <Table aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n <TableCell>Event</TableCell>\r\n <TableCell align=\"right\">First occurence</TableCell>\r\n <TableCell align=\"right\">Last occurence</TableCell>\r\n <TableCell align=\"right\">Amount</TableCell>\r\n <TableCell align=\"right\">Price per hour/event</TableCell>\r\n <TableCell align=\"right\">Total price</TableCell>\r\n\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {props.priceData.length === 0 ?\r\n <tr>\r\n <td colspan=\"9\" style={{ paddingTop: '15px', paddingBottom: '15px' }}>\r\n <div style={{ display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center' }}>\r\n <span style={{ fontSize: '16px', fontWeight: '500', color: '#1D3557', textAlign: 'center' }}>No results available for <br />these filter criteria</span>\r\n\r\n <img style={{ marginTop: '15px', height: '100px', width: '100px'}} src={NoResults} alt=\"\" />\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n : <React.Fragment></React.Fragment>}\r\n {props.priceData.map((measurement) => (\r\n <TableRow key={measurement.id} sx={{ '&:last-child td, &:last-child th': { border: 0 } }}>\r\n <TableCell component=\"th\" scope=\"row\">{measurement.detailDescription}</TableCell>\r\n <TableCell align=\"right\">{parseNewDateToDDMMYYYnoTime(new Date(measurement.first))}</TableCell>\r\n <TableCell align=\"right\">{parseNewDateToDDMMYYYnoTime(new Date(measurement.last))}</TableCell>\r\n <TableCell align=\"right\">{measurement.type !== 2 ? measurement.amount : measurement.minuteamount}</TableCell>\r\n <TableCell align=\"right\">{\"€ \" + (measurement.price).toLocaleString('nl-BE', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</TableCell>\r\n <TableCell style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }} align=\"right\">\r\n {\"€ \" + measurement.totalPrice.toLocaleString('nl-BE', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {measurement.isProfit ? <AddIcon style={{ color: 'rgb(40, 167, 69)' }}></AddIcon> : <RemoveIcon style={{ color: 'rgb(220, 53, 69)' }}></RemoveIcon>}\r\n </TableCell>\r\n\r\n </TableRow>\r\n ))}\r\n\r\n <TableRow>\r\n <TableCell colSpan={5} style={{ fontWeight: \"bold\" }}><span style={{ float: 'right' }}>Total</span></TableCell>\r\n <TableCell style={{ fontWeight: \"bold\" }} align=\"right\">{\"€ \" + props.totalPrice.toLocaleString('nl-BE', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</TableCell>\r\n </TableRow>\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n}\r\n","export default __webpack_public_path__ + \"static/media/counterStyle.1d31a17b.svg\";","import React, { useEffect, useState } from \"react\";\r\nimport RangeSelector, { Size, Scale, SliderMarker, MinorTick } from 'devextreme-react/range-selector';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport IconButton from '@mui/material/IconButton';\r\n\r\nclass TimeRangeChartCopy extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n console.log(props)\r\n this.state = {\r\n startValue: props.timeRangeDates.fromDate,\r\n endValue: props.timeRangeDates.toDate,\r\n };\r\n //Functions in the props\r\n this.handlePreviousDay = this.props.handlePreviousDay(this);\r\n this.handleNextDay = this.props.handleNextDay(this);\r\n this.updateDataRange = this.props.updateDataRange(this);\r\n\r\n //Functions on this page\r\n this.thisPageUpdateVisualRange = this.thisPageUpdateVisualRange.bind(this);\r\n this.thisPageHandlePreviousDay = this.thisPageHandlePreviousDay.bind(this);\r\n this.thisPageHandleNextDay = this.thisPageHandleNextDay.bind(this);\r\n this.dateFormatter = this.dateFormatter.bind(this);\r\n };\r\n\r\n render() {\r\n return (\r\n\r\n <div style={{ display: 'flex', width: '100%' }}>\r\n <div style={{ marginTop: 'auto', marginBottom: 'auto', width: '3%' }}>\r\n <Tooltip title=\"Previous 24 hours\" arrow>\r\n <IconButton style={{ backgroundColor: \"#C3996B\", marginLeft: '10px', color: \"white\" }} sx={{ boxShadow: 3 }} onClick={this.thisPageHandlePreviousDay} size={\"small\"}>\r\n <ChevronLeftIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n <div style={{ width: '93%' }}>\r\n {console.log(this.state.startValue, ' ---------- ', this.state.endValue)}\r\n <RangeSelector id=\"range-selector\" selectedRangeColor=\"#C3996B\" onValueChanged={(e) => this.thisPageUpdateVisualRange(e)} defaultValue={[this.state.startValue, this.state.endValue]}>\r\n <Scale startValue={this.state.startValue} endValue={this.state.endValue} tickInterval={\"hours\"} >\r\n\r\n <MinorTick visible={false} />\r\n </Scale>\r\n <SliderMarker format={this.dateFormatter} />\r\n <Size height={50} />\r\n </RangeSelector>\r\n </div>\r\n <div style={{ marginTop: 'auto', marginBottom: 'auto', width: '3%' }}>\r\n <Tooltip title=\"Next 24 hours\" arrow>\r\n <IconButton style={{ backgroundColor: \"#C3996B\", marginRight: '10px', color: \"white\" }} sx={{ boxShadow: 3 }} onClick={this.thisPageHandleNextDay} size={\"small\"}>\r\n <ChevronRightIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n\r\n </div>\r\n\r\n );\r\n\r\n }\r\n thisPageUpdateVisualRange(data) {\r\n //Update date range values (This will select and deselect all measurements between these dates)\r\n this.props.updateDataRange(data.value);\r\n console.log('this.state ', this.state)\r\n }\r\n thisPageHandlePreviousDay() {\r\n console.log('handlePreviousDay ?????????????????????????????????????????????????????')\r\n let tempStartValue = new Date(this.state.startValue - 86400000);\r\n let tempEndValue = new Date(this.state.endValue - 86400000);\r\n\r\n this.setState({\r\n startValue: tempStartValue,\r\n endValue: tempEndValue,\r\n });\r\n this.props.handlePreviousDay();\r\n\r\n }\r\n thisPageHandleNextDay() {\r\n let tempStartValue = new Date(this.state.startValue + 86400000);\r\n let tempEndValue = new Date(this.state.endValue + 86400000);\r\n this.setState({\r\n startValue: tempStartValue,\r\n endValue: tempEndValue,\r\n });\r\n this.props.handleNextDay();\r\n\r\n }\r\n dateFormatter(date) {\r\n const hour = date.getHours();\r\n const minute = date.getMinutes();\r\n console.log(date)\r\n return `${(\"0\" + (date.getDate())).slice(-2)}/${(\"0\" + (date.getMonth() + 1)).slice(-2)}/${date.getFullYear()} ${(\"0\" + (hour)).slice(-2)}:${(\"0\" + (minute)).slice(-2)}`;\r\n //let tempTomorrow = new Date(date.getDate() + 86400000);\r\n }\r\n}\r\n\r\nexport default TimeRangeChartCopy;\r\n","export default __webpack_public_path__ + \"static/media/timerStyle.5e0c407b.svg\";","export default __webpack_public_path__ + \"static/media/Freetext.2e9e1bf2.svg\";","export default __webpack_public_path__ + \"static/media/DataList.bb134880.svg\";","export default __webpack_public_path__ + \"static/media/barcodeScanner.0267fae4.svg\";","export default __webpack_public_path__ + \"static/media/camera.0b5040aa.svg\";","export default __webpack_public_path__ + \"static/media/api.b2c89c28.svg\";","export default __webpack_public_path__ + \"static/media/Pie.41cda26a.svg\";","export default __webpack_public_path__ + \"static/media/chart.61ee9072.svg\";","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useHistory } from 'react-router-dom';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Typography } from '@mui/material';\r\nimport Divider from '@mui/material/Divider';\r\nimport TableHighLow from './Components/TableHighLow';\r\nimport EventChart from './Components/EventChart';\r\nimport FinancialChart from './Components/FinancialChart.jsx';\r\nimport Button from '@mui/material/Button';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { styled } from '@mui/material/styles';\r\nimport PriceTable from './Components/PriceTable';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport RemoveIcon from '@mui/icons-material/Remove';\r\nimport TimeRangeChart from '../Results/Components/TimeRangeChart'\r\nimport TimeRangeChartCopy from '../Results/Components/TimeRangeChart copy'\r\n\r\nimport { controlTypes } from '../../../Config/constants';\r\nimport { parseNewDateToDDMMYYY } from '../../../Utils/dateHelper';\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\r\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\r\nimport Tooltip from '@mui/material/Tooltip';\r\n\r\nimport Counter from '../../../../src/Images/counterStyle.svg';\r\nimport Stopwatch from '../../../../src/Images/timerStyle.svg';\r\nimport FreeText from '../../../../src/Images/Freetext.svg';\r\nimport DataList from '../../../../src/Images/DataList.svg';\r\nimport Scanner from '../../../../src/Images/barcodeScanner.svg';\r\nimport Image from '../../../../src/Images/camera.svg';\r\nimport API from '../../../../src/Images/api.svg';\r\nimport NoResults from '../../../../src/Images/NoResults.png'\r\n\r\n\r\nimport { Spin } from \"react-cssfx-loading\";\r\nimport SentimentVeryDissatisfiedIcon from '@mui/icons-material/SentimentVeryDissatisfied';\r\nimport chartImg from '../../../../src/Images/chart.svg'\r\n//import pieChart from '../../../../src/Images/PieChart.png'\r\n\r\nimport pieChart from '../../../../src/Images/Pie.svg'\r\n\r\nimport ErrorIcon from '@mui/icons-material/Error';\r\nimport Pdf from \"react-to-pdf\";\r\n\r\nimport ReactDOM from \"react-dom\";\r\nimport html2canvas from 'html2canvas';\r\n\r\nconst ExpandMore = styled((props) => {\r\n const { expand, ...other } = props;\r\n return <IconButton {...other} />;\r\n})(({ theme, expand }) => ({\r\n \"&:hover\": { backgroundColor: \"#C3996B\" },\r\n padding: 0,\r\n color: 'white',\r\n transform: !expand ? 'rotate(180deg)' : 'rotate(0deg)',\r\n marginLeft: 'auto',\r\n transition: theme.transitions.create('transform', {\r\n duration: theme.transitions.duration.shortest,\r\n }),\r\n}));\r\n\r\nfunction ProjectReportPage(props) {\r\n const classes = useStyles();\r\n const GetUserID = props.Login.userid;\r\n\r\n const [project, setProject] = useState(null);\r\n const [data, setData] = useState([]);\r\n const [timeData, setTimeData] = useState([]);\r\n const [timeLineData, setChartData] = useState({});\r\n const [timeRangeData, setTimeRangeData] = useState([]);\r\n const [openSearch, setOpenSearch] = useState(false);\r\n const [measurementPrices, setMeasurementPrices] = useState([]);\r\n const [priceData, setPriceData] = useState([]);\r\n const [allPriceData, setAllPriceData] = useState([]);\r\n\r\n const [totalPrice, setTotalPrice] = useState(0);\r\n const [financialData, setFinancialData] = useState([]);\r\n const [financialChartData, setFinancialChartData] = useState([]);\r\n const [projectDetailNames, setDetailsNames] = useState({});\r\n const [totalFinancial, setTotalFinancialData] = useState({});\r\n const [overviewData, setOverviewData] = useState({});\r\n const [measurementRows, setMeasurementRows] = useState([]);\r\n const [allData, setAllData] = useState([]);\r\n const [isLoading, setLoading] = useState(true);\r\n const [timeRangeDates, setTimeRangeDates] = useState({ fromDate: new Date(Date.now() - 86400000), toDate: new Date(Date.now()) });\r\n const history = useHistory();\r\n const ref = React.createRef();\r\n const HighLowRef = React.createRef();\r\n\r\n\r\n\r\n useEffect(() => {\r\n //Get project data by ID\r\n dataService.getProjectByProjectIdUserId(props.projectCopy.projectId, props.Login.userid).then(res => {\r\n //This is the project data that was found for the given id\r\n setProject(res[0]);\r\n handleProject(res[0]);\r\n\r\n });\r\n let TempMeasurementRows;\r\n\r\n\r\n }, [])\r\n\r\n function convertHMS(value) {\r\n const sec = parseInt(value, 10); // convert value to number if it's string\r\n let hours = Math.floor(sec / 3600); // get hours\r\n let minutes = Math.floor((sec - (hours * 3600)) / 60); // get minutes\r\n let seconds = sec - (hours * 3600) - (minutes * 60); // get seconds\r\n // add 0 if value < 10; Example: 2 => 02\r\n if (hours < 10) { hours = \"0\" + hours; }\r\n if (minutes < 10) { minutes = \"0\" + minutes; }\r\n if (seconds < 10) { seconds = \"0\" + seconds; }\r\n return hours + ':' + minutes + ':' + seconds; // Return is HH : MM : SS\r\n }\r\n\r\n const handleProject = (project) => {\r\n let thisProject = project;\r\n let tempFinancialData = [];\r\n let tempTotalFinancialData = [];\r\n let tempMeasurementsCollection = [];\r\n let chartMeasurementCollection = [];\r\n\r\n //Loop through all details and just toss all measurements together, afterwards flatten and sort by date\r\n for (let i = 0; i < thisProject.details.length; i++) {\r\n tempMeasurementsCollection.push(thisProject.details[i].measurements);\r\n }\r\n\r\n tempMeasurementsCollection = tempMeasurementsCollection.flat();\r\n tempMeasurementsCollection = tempMeasurementsCollection.sort((a, b) => new Date(a.insertedOn) - new Date(b.insertedOn));\r\n\r\n\r\n setMeasurementRows(tempMeasurementsCollection);\r\n //Get last measurement so we can decide the last date for the rangeslider\r\n let fromAndToDate = constructFromAndToDate(tempMeasurementsCollection);\r\n let tempToDate = fromAndToDate[1];\r\n let tempFromDate = fromAndToDate[0];\r\n\r\n chartMeasurementCollection = tempMeasurementsCollection.filter(x => new Date(x.insertedOn) >= new Date(tempFromDate) && new Date(x.insertedOn) <= new Date(tempToDate));\r\n constructPriceData(thisProject, tempFromDate, tempToDate);\r\n setTimeRangeDates({ fromDate: tempFromDate, toDate: tempToDate });\r\n\r\n let projectDetails = thisProject.details;\r\n //Creates an object with all detail and their color (needed for the chart)\r\n let detailNames = constructDetailCollection(projectDetails);\r\n\r\n //Construct the data that will be displayed in the financial chart\r\n let tempChartData = constructChartData(projectDetails, chartMeasurementCollection);\r\n\r\n\r\n let orderTest = tempFinancialData.sort((a, b) => new Date(a.date) - new Date(b.date));\r\n setAllData(orderTest);\r\n setDetailsNames(detailNames);\r\n setTotalFinancialData(tempTotalFinancialData);\r\n setFinancialData(tempChartData);\r\n setFinancialChartData(tempChartData);\r\n setLoading(false);\r\n };\r\n\r\n const constructDetailCollection = (details) => {\r\n let temporaryCollection = [];\r\n for (let i = 0; i < details.length; i++) {\r\n let thisProjectDetail = details[i];\r\n temporaryCollection.push({ name: thisProjectDetail.description, color: thisProjectDetail.color });\r\n }\r\n //Empty array for all details, also add a total to display in the graph\r\n temporaryCollection.push({ name: 'Total', color: '#c7c9c8' });\r\n\r\n return temporaryCollection;\r\n }\r\n\r\n const constructChartData = (projectDetails, chartDataCollection) => {\r\n let tempTotalData = [];\r\n let total = 0;\r\n let startTime = chartDataCollection.length > 0 ? chartDataCollection[0].insertedOn : new Date();\r\n let count = 0;\r\n\r\n //First we loop through all measurements to calculate the TOTAL LINE\r\n chartDataCollection.map(thisMeasurement => {\r\n let isStopwatch = false;\r\n let thisDetail = projectDetails.find(x => x.id === thisMeasurement.projectDetailID);\r\n if (thisDetail !== undefined) {\r\n\r\n\r\n if (thisDetail.controlTypeID === 2) {\r\n isStopwatch = true;\r\n }\r\n let price = 0;\r\n let price_per = thisDetail.price !== null ? thisDetail.price : 0;\r\n let tempMeasurementData = {};\r\n var dif;\r\n var priceToAdd;\r\n if (isStopwatch) {\r\n let startDate = new Date(thisMeasurement.startValue);\r\n let stopDate = new Date(thisMeasurement.stopValue);\r\n if (stopDate > startDate) {\r\n dif = (stopDate.getTime() - startDate.getTime()) / 1000;\r\n\r\n } else {\r\n dif = 0;\r\n }\r\n priceToAdd = ((thisDetail.price / 3600) * dif);\r\n\r\n } else {\r\n priceToAdd = price_per;\r\n }\r\n if (thisDetail.isProfit) {\r\n price = priceToAdd;\r\n total += priceToAdd;\r\n } else {\r\n price = priceToAdd;\r\n total -= priceToAdd;\r\n }\r\n if (count === 0) {\r\n tempMeasurementData = { id: thisMeasurement.id, measurement: 'Total', date: startTime, price: 0, profitAdded: 0, isVisible: true, 'Total_price': 0, color: thisDetail.color, isProfit: thisDetail.isProfit, originalMeasurement: thisDetail.description };\r\n tempTotalData.push(tempMeasurementData);\r\n\r\n }\r\n tempMeasurementData = { id: thisMeasurement.id, measurement: 'Total', date: thisMeasurement.insertedOn, price: priceToAdd, profitAdded: priceToAdd, isVisible: true, 'Total_price': total, color: thisDetail.color, isProfit: thisDetail.isProfit, originalMeasurement: thisDetail.description };\r\n tempTotalData.push(tempMeasurementData);\r\n count++;\r\n }\r\n });\r\n\r\n let tempDetailData = [];\r\n\r\n //Loop through the details and their measurements to get each unique detail line\r\n projectDetails.map(thisDetail => {\r\n let isStopwatch = false;\r\n let detailCount = 0;\r\n\r\n if (thisDetail.controlTypeID === 2) {\r\n //Stopwatch\r\n isStopwatch = true;\r\n }\r\n let thisMeasurements = chartDataCollection.filter(x => x.projectDetailID === thisDetail.id);\r\n let price = 0;\r\n let total = 0;\r\n let price_per = thisDetail.price !== null ? thisDetail.price : 0;\r\n let startTime = chartDataCollection.length > 0 ? chartDataCollection[0].insertedOn : new Date();\r\n\r\n if (thisMeasurements.length > 0) {\r\n let variablename = thisDetail.description + '_price';\r\n thisMeasurements.map(thisMeasurement => {\r\n let tempMeasurementData = {};\r\n var dif;\r\n var priceToAdd;\r\n if (isStopwatch) {\r\n let startDate = new Date(thisMeasurement.startValue);\r\n let stopDate = new Date(thisMeasurement.stopValue);\r\n if (stopDate > startDate) {\r\n dif = (stopDate.getTime() - startDate.getTime()) / 1000;\r\n } else {\r\n dif = 0;\r\n }\r\n priceToAdd = ((thisDetail.price / 3600) * dif);\r\n } else {\r\n priceToAdd = price_per;\r\n }\r\n\r\n if (thisDetail.isProfit) {\r\n price = priceToAdd;\r\n total += priceToAdd;\r\n } else {\r\n price = priceToAdd;\r\n total -= priceToAdd;\r\n }\r\n if (detailCount === 0) {\r\n tempMeasurementData = { detailCount: 0, id: thisMeasurement.id, measurement: thisDetail.description, date: startTime, price: 0, profitAdded: 0, isVisible: true, [variablename]: 0, color: thisDetail.color, isProfit: thisDetail.isProfit };\r\n tempDetailData.push(tempMeasurementData);\r\n\r\n }\r\n tempMeasurementData = { id: thisMeasurement.id, measurement: thisDetail.description, date: thisMeasurement.insertedOn, price: priceToAdd, profitAdded: priceToAdd, isVisible: true, [variablename]: total, color: thisDetail.color, isProfit: thisDetail.isProfit };\r\n tempDetailData.push(tempMeasurementData);\r\n detailCount++;\r\n });\r\n }\r\n\r\n\r\n });\r\n let combinedData = tempTotalData.concat(tempDetailData);\r\n return combinedData;\r\n }\r\n\r\n const constructPriceData = (thisProject, thisFromDate, thisToDate) => {\r\n let amountOfMeasurements = [];\r\n let detailDescriptions = [];\r\n let measurementColors = [];\r\n let tempMeasurementPrices = [];\r\n let tempPriceData = [];\r\n let tempFinancialData = [];\r\n let tempTimeData = [];\r\n let tempOverviewData = [];\r\n let total = 0;\r\n //Loop through details\r\n let projectDetails = thisProject.details;\r\n\r\n for (let i = 0; i < projectDetails.length; i++) {\r\n //If measurements have stopValue they are a stopwatch\r\n let thisDetail = projectDetails[i];\r\n let filteredMeasurements = thisDetail.measurements.filter(x => new Date(x.insertedOn) >= new Date(thisFromDate) && new Date(x.insertedOn) <= new Date(thisToDate));\r\n if (filteredMeasurements.length > 0) {\r\n //events\r\n //Check if stopvalue than type 2 is stopwatch\r\n let detailType = filteredMeasurements[0].stopValue !== null ? 2 : 1;\r\n amountOfMeasurements.push(filteredMeasurements.length);\r\n detailDescriptions.push(projectDetails.description);\r\n measurementColors.push(projectDetails.color);\r\n tempMeasurementPrices.push({\r\n measurementId: filteredMeasurements[0].id !== 0 ? filteredMeasurements[0].id : filteredMeasurements[0].externalApiId,\r\n price: 0\r\n });\r\n setMeasurementPrices(tempMeasurementPrices);\r\n let lowestDate = new Date(filteredMeasurements[0].insertedOn);\r\n let totalMeasurementPrice = 0;\r\n let totalTime = 0;\r\n let tempTotal = 0;\r\n\r\n if (detailType === 2) {\r\n for (let j = 0; j < filteredMeasurements.length; j++) {\r\n let startDate = new Date(filteredMeasurements[j].startValue);\r\n let stopDate = new Date(filteredMeasurements[j].stopValue);\r\n var dif;\r\n if (stopDate > startDate) {\r\n dif = (stopDate.getTime() - startDate.getTime()) / 1000;\r\n\r\n } else {\r\n dif = 0;\r\n }\r\n totalTime += dif;\r\n let tempTotalPrice = (thisDetail.price / 3600) * dif;\r\n let tempMeasurementData = { date: filteredMeasurements[j].startValue, price: tempTotalPrice };\r\n tempFinancialData.push(tempMeasurementData);\r\n\r\n }\r\n totalMeasurementPrice = (thisDetail.price / 3600) * totalTime;\r\n tempTotal = totalMeasurementPrice;\r\n\r\n } else {\r\n\r\n tempTotal = (filteredMeasurements.length * (thisDetail.price !== null ? thisDetail.price : 0));\r\n }\r\n for (let j = 0; j < filteredMeasurements.length; j++) {\r\n if (new Date(filteredMeasurements[j].insertedOn) < lowestDate) {\r\n lowestDate = new Date(filteredMeasurements[j].insertedOn);\r\n }\r\n }\r\n let highestDate = new Date(filteredMeasurements[0].insertedOn);\r\n for (let j = 0; j < filteredMeasurements.length; j++) {\r\n\r\n if (new Date(filteredMeasurements[j].insertedOn) > highestDate) {\r\n highestDate = new Date(filteredMeasurements[j].insertedOn);\r\n }\r\n let tempMeasurementData = { date: filteredMeasurements[j].insertedOn, price: (j + 1) * thisProject.details[i].price, color: thisProject.details[i].color };\r\n tempFinancialData.push(tempMeasurementData);\r\n\r\n }\r\n\r\n tempPriceData.push({\r\n price: thisProject.details[i].price !== null ? thisProject.details[i].price : 0,\r\n totalPrice: tempTotal,\r\n isProfit: thisProject.details[i].isProfit !== null ? thisProject.details[i].isProfit : true,\r\n detailDescription: thisProject.details[i].description,\r\n first: lowestDate,\r\n last: highestDate,\r\n amount: (detailType !== 2 ? filteredMeasurements.length : totalTime),\r\n color: thisProject.details[i].color,\r\n type: detailType,\r\n minuteamount: (detailType !== 2 ? null : convertHMS(totalTime)),\r\n });\r\n if (thisProject.details[i].isProfit) {\r\n total += tempTotal;\r\n } else {\r\n total -= tempTotal;\r\n }\r\n }\r\n };\r\n\r\n setAllPriceData(tempPriceData)\r\n setTotalPrice(total);\r\n setOverviewData(tempPriceData);\r\n setPriceData(tempPriceData);\r\n }\r\n const constructFromAndToDate = (measurementData) => {\r\n let tempToDate;\r\n if (measurementData.length > 0) {\r\n tempToDate = new Date(measurementData[measurementData.length - 1].insertedOn);\r\n } else {\r\n tempToDate = new Date();\r\n }\r\n let tempFromDate = new Date(tempToDate - 86400000);\r\n return [tempFromDate, tempToDate];\r\n }\r\n\r\n const handleVisualRange = (data) => {\r\n setTimeRangeData(data);\r\n }\r\n\r\n const handlePreviousDay = () => {\r\n let tempFrom = timeRangeDates.fromDate;\r\n let tempTo = timeRangeDates.toDate;\r\n let newFromDate = new Date(new Date(tempFrom) - (24 * 60 * 60 * 1000));\r\n let newToDate = new Date(new Date(tempTo) - (24 * 60 * 60 * 1000));\r\n setTimeRangeDates({ fromDate: newFromDate, toDate: newToDate });\r\n handleDifferentDate(newFromDate, newToDate);\r\n\r\n }\r\n\r\n const handleNextDay = () => {\r\n let tempFrom = timeRangeDates.fromDate;\r\n let tempTo = timeRangeDates.toDate;\r\n let newFromDate = new Date(new Date(tempFrom).getTime() + 60 * 60 * 24 * 1000);\r\n let newToDate = new Date(new Date(tempTo).getTime() + 60 * 60 * 24 * 1000);\r\n setTimeRangeDates({ fromDate: newFromDate, toDate: newToDate });\r\n handleDifferentDate(newFromDate, newToDate);\r\n\r\n }\r\n\r\n const navigateToModifyDetail = (id) => {\r\n console.log(project)\r\n props.actions.companyAction(project.companyName);\r\n props.actions.companyIdAction(project.companyId);\r\n props.actions.resourceAction(project.resourceDescription);\r\n props.actions.fromDateAction(project.timeRangeBegin)\r\n props.actions.toDateAction(project.timeRangeEnd);\r\n props.actions.detailsAction(project.details);\r\n props.actions.projectIdAction(project.id);\r\n props.actions.projectNameAction(project.projectName);\r\n props.actions.projectQrAction(project.qrCode);\r\n history.push(\"/modify\");\r\n }\r\n\r\n const handleDifferentDate = (tempFromDate, tempToDate) => {\r\n let thisProject = project;\r\n let tempFinancialData = [];\r\n let tempTotalFinancialData = [];\r\n let tempMeasurementsCollection = [];\r\n let chartMeasurementCollection = [];\r\n\r\n\r\n //Loop through all details and just toss all measurements together, afterwards flatten and sort by date\r\n for (let i = 0; i < thisProject.details.length; i++) {\r\n tempMeasurementsCollection.push(thisProject.details[i].measurements);\r\n }\r\n\r\n tempMeasurementsCollection = tempMeasurementsCollection.flat();\r\n tempMeasurementsCollection = tempMeasurementsCollection.sort((a, b) => new Date(a.insertedOn) - new Date(b.insertedOn));\r\n chartMeasurementCollection = tempMeasurementsCollection.filter(x => (new Date(x.insertedOn) >= new Date(tempFromDate) && new Date(x.insertedOn) <= new Date(tempToDate)) || (new Date(x.endDate) >= new Date(tempFromDate) && new Date(x.endDate) <= new Date(tempToDate)));\r\n constructPriceData(thisProject, tempFromDate, tempToDate);\r\n\r\n //Creates an object with all detail and their color (needed for the chart)\r\n let projectDetails = thisProject.details;\r\n\r\n //Creates an object with all detail and their color (needed for the chart)\r\n let detailNames = constructDetailCollection(projectDetails);\r\n\r\n //Construct the data that will be displayed in the financial chart\r\n let tempChartData = constructChartData(projectDetails, chartMeasurementCollection);\r\n let orderTest = tempFinancialData.sort((a, b) => new Date(a.date) - new Date(b.date));\r\n setAllData(orderTest);\r\n setDetailsNames(detailNames);\r\n setTotalFinancialData(tempTotalFinancialData);\r\n setFinancialData(tempChartData);\r\n setFinancialChartData(tempChartData);\r\n }\r\n const updateDataRange = (data) => {\r\n let tempFromDate = new Date(data[0]);\r\n let tempToDate = new Date(data[1]);\r\n handleDifferentDate(tempFromDate, tempToDate);\r\n\r\n }\r\n const limitString = (str, limit) => {\r\n if (str.length > limit) {\r\n return str.substring(0, limit) + \"...\";\r\n } else {\r\n return str;\r\n }\r\n }\r\n const handleDownloadImage = async (toDownload) => {\r\n let element;\r\n let fileName ;\r\n if(toDownload === 'HighLow'){\r\n element = HighLowRef.current;\r\n fileName = 'HighLow.jpg';\r\n }else{\r\n element = ref.current; \r\n fileName = 'Summary.jpg';\r\n\r\n\r\n }\r\n const canvas = await html2canvas(element);\r\n\r\n const data = canvas.toDataURL('image/jpg');\r\n const link = document.createElement('a');\r\n\r\n if (typeof link.download === 'string') {\r\n link.href = data;\r\n link.download = fileName;\r\n\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } else {\r\n window.open(data);\r\n }\r\n };\r\n const getImageUrl = (detail) => {\r\n let source;\r\n switch (detail.controlTypeID) {\r\n case 1:\r\n source = Counter;\r\n break;\r\n case 2:\r\n source = Stopwatch;\r\n\r\n break;\r\n case 3:\r\n source = FreeText;\r\n break;\r\n case 4:\r\n source = DataList;\r\n break;\r\n case 5:\r\n source = Scanner;\r\n break;\r\n case 6:\r\n source = Image;\r\n break;\r\n case 7:\r\n source = API;\r\n break;\r\n default:\r\n // code block\r\n }\r\n return source;\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Financial dashboard\" backbutton={true} {...props} />\r\n {/* {overviewData.length === 0 ? <div className={classes.noDataAvailable}>There is no data to display</div> : */}\r\n <div>\r\n {project !== null &&\r\n <div className={classes.header}>\r\n <div className={classes.fullHeader}>\r\n <Typography variant='h5' className={classes.projectTitle}>\r\n {project.projectName}\r\n </Typography>\r\n <div>\r\n <div className={classes.extraInfo}><b style={{ marginRight: '10px' }}>Location:</b> <p>{project.resourceDescription}</p></div>\r\n <div className={classes.extraInfo}><b style={{ marginRight: '10px' }}>Company:</b> <p>{project.companyName}</p></div>\r\n </div>\r\n </div>\r\n\r\n </div>}\r\n\r\n <div className={classes.financialDashboardStyle}>\r\n\r\n <div className={classes.boxStyle} ref={HighLowRef}>\r\n <div className={classes.filterTitle} variant=\"contained\" content=\"Options\" >\r\n <span>High/Low for this project</span>\r\n {/* <Pdf targetRef={HighLowRef} filename=\"code-example.pdf\">\r\n {({ toPdf }) => <Button style={{ backgroundColor: 'white', color: '#C3996B', marginRight: '10px' }} onClick={toPdf}>Generate Pdf</Button>}\r\n </Pdf> */}\r\n <Button style={{ backgroundColor: 'white', color: '#C3996B' }} onClick={() => handleDownloadImage('HighLow')} data-html2canvas-ignore=\"true\">Export</Button>\r\n </div>\r\n\r\n {isLoading ? <div className={classes.loadingBalls}><Spin width=\"100px\" height=\"100px\" color=\"#C3996B\"></Spin></div> : project ? project.details.map(detail => {\r\n if (detail.measurements.length > 0 && detail.price > 0) {\r\n return (\r\n <div key={'TableHighLow_' + detail.id} className={classes.highLowItem}>\r\n <div className={classes.headerContainer}>\r\n <div className={classes.detailHeader}>\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\", marginRight: '10px' }} src={getImageUrl(detail)}></img> {detail.description}\r\n </div>\r\n {detail.isProfit ? <AddIcon style={{ color: 'rgb(40, 167, 69)' }}></AddIcon> : <RemoveIcon style={{ color: 'rgb(220, 53, 69)' }}></RemoveIcon>}\r\n\r\n </div>\r\n <Divider></Divider>\r\n <TableHighLow {...props} detail={detail} projectName={project.projectName} location={project.resourceDescription} />\r\n </div>\r\n )\r\n }\r\n else {\r\n return (\r\n <React.Fragment></React.Fragment>\r\n )\r\n }\r\n }\r\n ) : <React.Fragment></React.Fragment>}\r\n\r\n {(measurementRows.length === 0 && !isLoading) && <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', height: '100%', justifyContent: 'center' }}>\r\n <span style={{ display: 'flex', textAlign: 'center', fontSize: '16px', fontWeight: '500', color: '#1D3557' }}>There are no events for this project. <br/> Start tapping away!</span> \r\n <img className={classes.noHighLow} src={NoResults}></img>\r\n</div>}\r\n \r\n </div>\r\n {isLoading ? <div className={classes.loadingChart}><Spin width=\"100px\" height=\"100px\" color=\"#C3996B\"></Spin></div> :\r\n\r\n <div className={classes.rightSideStyle}>\r\n <div className={classes.rightSideTitle}>Data between {parseNewDateToDDMMYYY(timeRangeDates.fromDate)} and {parseNewDateToDDMMYYY(timeRangeDates.toDate)}</div>\r\n <div style={{ backgroundColor: 'white', marginBottom: '15px', borderRadius: '8px', paddingTop: '20px', paddingBottom: '20px', margin: '15px' }}>\r\n\r\n {/* {project ? <TimeRangeChartCopy updateDataRange={updateDataRange} handleNextDay={handleNextDay} handlePreviousDay={handlePreviousDay}\r\n timeRangeDates={timeRangeDates}></TimeRangeChartCopy> :\r\n <div style={{ marginBottom: \"40px\" }}>\r\n </div>\r\n } */}\r\n {project ? <TimeRangeChart updateDataRange={updateDataRange} handleNextDay={handleNextDay} handlePreviousDay={handlePreviousDay}\r\n timeRangeDates={timeRangeDates}></TimeRangeChart> :\r\n <div style={{ marginBottom: \"40px\" }}>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n {financialChartData !== undefined && financialChartData.length > 0 ? <div className={classes.financialChart}>\r\n <FinancialChart financialChartData={financialChartData} projectDetailNames={projectDetailNames} project={project}></FinancialChart></div> :\r\n\r\n <div style={{ backgroundColor: 'white', height: '91%', padding: '25px', borderRadius: '8px', margin: '15px' }}>\r\n <div style={{ height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column', }}>\r\n <div style={{ height: '100%', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column' }}>\r\n <div className={classes.noDataIcons}>\r\n <img className={classes.imageStyle} src={pieChart} alt=\"\" />\r\n <ErrorIcon sx={{ fontSize: 100, color: '#dc3545', position: 'absolute', right: '0', bottom: '0' }} className={classes.errorIcon}></ErrorIcon>\r\n </div>\r\n <p style={{ marginTop: '30px', fontSize: '16px', fontWeight: '500', color: '#1D3557' }}>No data to display between {parseNewDateToDDMMYYY(timeRangeDates.fromDate)} and {parseNewDateToDDMMYYY(timeRangeDates.toDate)}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n }\r\n\r\n {priceData !== undefined && financialChartData.length > 0 ?\r\n <div className={classes.chartBoxStyle}>\r\n <div className={classes.pieStyle} style={{ marginRight: '10px' }}>\r\n {priceData.filter(x => x.type !== 2).length > 0 ? <EventChart data={priceData.filter(x => x.type !== 2)} title={\"Event overview\"} /> :\r\n <div style={{ height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column' }}>\r\n <div style={{ height: '100%', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column' }}>\r\n <div className={classes.noDataIcons}>\r\n <img className={classes.imageStyle} src={pieChart} alt=\"\" />\r\n <ErrorIcon sx={{ fontSize: 100, color: '#dc3545', position: 'absolute', right: '0', bottom: '0' }} className={classes.errorIcon}></ErrorIcon>\r\n </div>\r\n <p style={{ marginTop: '30px' }}>There were no event measurements during this timespan</p>\r\n </div>\r\n </div>\r\n\r\n }\r\n </div>\r\n <div className={classes.pieStyle}>\r\n {priceData.filter(x => x.type === 2).length > 0 ? <EventChart data={priceData.filter(x => x.type === 2)} title={\"Time overview\"} /> :\r\n <div style={{ height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column' }}>\r\n <div style={{ height: '100%', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column' }}>\r\n <div className={classes.noDataIcons}>\r\n <img className={classes.imageStyle} src={pieChart} alt=\"\" />\r\n <ErrorIcon sx={{ fontSize: 100, color: '#dc3545', position: 'absolute', right: '0', bottom: '0' }} className={classes.errorIcon}></ErrorIcon>\r\n </div>\r\n <p style={{ marginTop: '30px' }}>There were no stopwatch measurements during this timespan</p>\r\n </div>\r\n </div>\r\n\r\n }\r\n </div>\r\n </div> : ''}\r\n\r\n <div className={classes.tableContainer} ref={ref}>\r\n <div className={classes.calculateBoxStyle}>\r\n <div className={classes.filterTitle} variant=\"contained\" content=\"Options\" >\r\n <span>Summary</span>\r\n <div >\r\n <Button style={{ backgroundColor: 'white', color: '#C3996B', marginRight: '10px' }} onClick={() => handleDownloadImage('Summary')} data-html2canvas-ignore=\"true\">Export</Button>\r\n <Button onClick={() => navigateToModifyDetail(project.id)} style={{ backgroundColor: 'white', color: '#C3996B' }}>\r\n Modify\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <PriceTable totalPrice={totalPrice} priceData={priceData} ></PriceTable>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n {/* } */}\r\n </div>\r\n )\r\n}\r\nexport default ProjectReportPage;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noDataAvailable: {\r\n width: '80%',\r\n backgroundColor: 'white',\r\n borderRadius: '8px',\r\n fontSize: '20px',\r\n marginRight: 'auto',\r\n marginLeft: 'auto',\r\n paddingTop: '20px',\r\n paddingBottom: '20px',\r\n color: '#dc3545',\r\n paddingLeft: '15px'\r\n },\r\n bar: {\r\n [theme.breakpoints.up('lg')]: {\r\n minWidth: \"70%\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n minWidth: \"60%\",\r\n },\r\n [theme.breakpoints.down('md')]: {\r\n minWidth: \"65%\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: \"70%\",\r\n },\r\n },\r\n\r\n headerContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n flexDirection: 'row',\r\n backgroundColor: '#ede6df',\r\n padding: '10px'\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignContent: 'center',\r\n flexDirection: 'row',\r\n },\r\n dateContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n width: '100%',\r\n flexDirection: 'row',\r\n },\r\n header: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n marginBottom: '15px'\r\n },\r\n fullHeader: {\r\n width: '80%',\r\n [theme.breakpoints.down('lg')]: {\r\n width: \"90%\",\r\n },\r\n [theme.breakpoints.down('md')]: {\r\n width: \"95%\",\r\n },\r\n backgroundColor: '#C3996B',\r\n padding: '15px',\r\n color: 'white',\r\n borderRadius: '8px',\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n\r\n },\r\n projectTitle: {\r\n fontWeight: '500 !important'\r\n\r\n },\r\n extraInfo: {\r\n display: 'flex',\r\n justifyContent: 'end'\r\n },\r\n\r\n financialDashboardStyle: {\r\n display: 'flex',\r\n width: '80%',\r\n [theme.breakpoints.down('lg')]: {\r\n width: \"90%\",\r\n },\r\n [theme.breakpoints.down('md')]: {\r\n width: \"95%\",\r\n flexDirection: 'column'\r\n },\r\n height: '100%',\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginBottom: \"15px\"\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n flexFlow: 'space-around',\r\n borderRadius: \"8px\",\r\n gap: \"20px 30px\",\r\n width: '70%',\r\n // [theme.breakpoints.up('lg')]: {\r\n // maxWidth: \"70%\",\r\n // },\r\n // [theme.breakpoints.down('lg')]: {\r\n // maxWidth: \"70%\",\r\n // },\r\n // [theme.breakpoints.down('md')]: {\r\n // maxWidth: \"90%\",\r\n // },\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"25px\"\r\n },\r\n titleTextStyle: {\r\n display: \"flex\",\r\n marginLeft: \"20px\",\r\n },\r\n noDataIcons: {\r\n position: 'relative'\r\n },\r\n errorIcon: {\r\n position: 'absolute',\r\n right: '25%',\r\n bottom: '25%'\r\n },\r\n imageStyle: {\r\n height: '100%',\r\n width: '100%',\r\n filter: 'invert(87%) sepia(15%) saturate(124%) hue-rotate(341deg) brightness(108%) contrast(86%)',\r\n\r\n },\r\n noHighLow: {\r\n height: '100px',\r\n width: '100px',\r\n marginTop: '15px',\r\n\r\n },\r\n boxStyle: {\r\n // height: 'calc(100vh + 15px)',\r\n overflowY: 'hidden',\r\n width: '30%',\r\n\r\n [theme.breakpoints.down('md')]: {\r\n width: \"100%\",\r\n marginBottom: '15px'\r\n },\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n marginRight: '15px',\r\n //minHeight: '1000px'\r\n\r\n },\r\n loadingBalls: {\r\n height: '100%',\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n loadingChart: {\r\n height: '100vh',\r\n width: '70%',\r\n position: 'relative',\r\n borderRadius: \"8px\",\r\n backgroundColor: 'white',\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n detailHeader: {\r\n fontSize: '16px',\r\n fontWeight: '600'\r\n },\r\n rightSideStyle: {\r\n borderRadius: '8px',\r\n height: '100%',\r\n width: '70%',\r\n\r\n [theme.breakpoints.down('md')]: {\r\n width: \"100%\",\r\n },\r\n position: 'relative',\r\n background: '#ede6df'\r\n },\r\n chartBoxStyle: {\r\n height: '50%',\r\n margin: '15px',\r\n overflow: 'hidden',\r\n display: \"flex\",\r\n flexGrow: '2',\r\n justifyContent: \"space-between\",\r\n flexDirection: \"row\",\r\n borderRadius: \"8px\",\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n width: 'calc(100% - 30px)'\r\n },\r\n },\r\n tableContainer: {\r\n margin: '15px'\r\n },\r\n\r\n pieStyle: {\r\n\r\n width: '50%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginBottom: '15px'\r\n },\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"18px\",\r\n\r\n },\r\n highLowItem: {\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n calculateBoxStyle: {\r\n overflow: 'hidden',\r\n display: \"flex\",\r\n flexGrow: '3',\r\n justifyContent: \"space-between\",\r\n flexDirection: \"column\",\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"18px\",\r\n gap: \"10px\",\r\n\r\n },\r\n menuItem: {\r\n color: '#1D3557',\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '1rem',\r\n width: '100% !important',\r\n marginBottom: '15px'\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100% !important',\r\n fontSize: '1.2rem',\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n\r\n iconStyle: {\r\n verticalAlign: \"-8px\",\r\n marginRight: \"4px\"\r\n },\r\n link: {\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n },\r\n },\r\n linkButton: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n [theme.breakpoints.down('sm')]: {\r\n minHeight: \"46.8px\",\r\n height: \"90%\",\r\n padding: \"10px\",\r\n fontSize: \"1rem\",\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n height: \"40px\",\r\n fontSize: \"1.2rem\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n fontSize: \"1.2rem\",\r\n },\r\n\r\n background: \"#C3996B !important\",\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n hstyle: {\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: \"2rem\",\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n fontSize: \"2.5rem\",\r\n },\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: 'white',\r\n whiteSpace: 'nowrap'\r\n // color: \"#1D3557\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"5%\",\r\n paddingRight: \"5%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#C3996B !important\",\r\n justifyContent: \"space-between\",\r\n color: 'white'\r\n\r\n },\r\n headerLeft: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n width: '33%'\r\n },\r\n headerMiddle: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n\r\n },\r\n headerRight: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n color: 'white'\r\n },\r\n arrowBack: {\r\n padding: '15px',\r\n cursor: 'pointer'\r\n },\r\n taplrLogo: {\r\n width: '150px',\r\n cursor: 'pointer'\r\n },\r\n filterTitle: {\r\n backgroundColor: \"#C3996B !important\",\r\n color: 'white',\r\n fontSize: '18px',\r\n fontWeight: '500',\r\n padding: '10px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n\r\n },\r\n rightSideTitle: {\r\n borderTopRightRadius: '8px',\r\n borderTopLeftRadius: '8px',\r\n\r\n backgroundColor: \"#C3996B !important\",\r\n color: 'white',\r\n fontSize: '18px',\r\n fontWeight: '500',\r\n padding: '10px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n\r\n },\r\n stylingBlock: {\r\n backgroundColor: '#f0f0f0',\r\n borderRadius: '6px',\r\n boxShadow: 'inset -3px -3px 7px #ffffffb0, inset 3px 3px 5px rgba(94, 104, 121, 0.692)',\r\n padding: \"25px\"\r\n },\r\n filterBlock: {\r\n display: 'flex',\r\n marginBottom: '15px',\r\n flexWrap: 'wrap',\r\n [theme.breakpoints.up('sm')]: {\r\n justifyContent: 'space-around',\r\n gap: \"15px\"\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'space-evenly',\r\n }\r\n },\r\n}));","import React, { useState, useEffect, useRef } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Button from '@mui/material/Button';\r\nimport { useHistory } from 'react-router-dom';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { imageListClasses, Typography } from '@mui/material';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport Divider from '@mui/material/Divider';\r\nimport LinearProgress from '@mui/material/LinearProgress';\r\nimport BarChartIcon from '@mui/icons-material/BarChart';\r\nimport CreateIcon from '@mui/icons-material/Create';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Fab from '@mui/material/Fab';\r\nimport NavigationIcon from '@mui/icons-material/Navigation';\r\nimport EuroIcon from '@mui/icons-material/Euro';\r\nimport { parseNewDateToDDMMYYY, parseNewDateToDDMMYYYnoTime } from \"../../../Utils/dateHelper\";\r\n\r\n\r\nfunction ProjectReportOverviewPage(props) {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [projectList, setProjectList] = useState([]);\r\n const initialProjectList = useRef([]);\r\n const firstLoad = useRef(false);\r\n const [loadAmount, setLoadAmount] = useState(21);\r\n const currentDate = new Date();\r\n const [pageUp, setPageUp] = useState(false);\r\n\r\n const loadMore = () => {\r\n if (window.innerHeight + document.documentElement.scrollTop === document.scrollingElement.scrollHeight) {\r\n let TempLoadAmount = loadAmount + 9;\r\n if (firstLoad.current) {\r\n dataService.getProjectAndDetails(props.Login.userid, loadAmount + 9, 9).then(results => {\r\n setProjectList(sortProjectsOnFinished(initialProjectList.current.concat(results)));\r\n });\r\n firstLoad.current = false;\r\n }\r\n else {\r\n dataService.getProjectAndDetails(props.Login.userid, loadAmount + 9, 9).then(results => {\r\n if (results.length > 0) {\r\n setProjectList(sortProjectsOnFinished(projectList.concat(results)));\r\n }\r\n else {\r\n setPageUp(true);\r\n }\r\n });\r\n }\r\n setLoadAmount(TempLoadAmount);\r\n window.removeEventListener('scroll', loadMore);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n dataService.getProjectAndDetails(props.Login.userid, 0, loadAmount).then(results => {\r\n setProjectList(sortProjectsOnFinished(results));\r\n window.addEventListener('scroll', loadMore);\r\n initialProjectList.current = results;\r\n firstLoad.current = true;\r\n });\r\n }, [])\r\n\r\n useEffect(() => {\r\n window.addEventListener('scroll', loadMore);\r\n }, [loadAmount]);\r\n\r\n const ResultRedirect = (projectId, resourceName, fromDate, toDate) => {\r\n let tempProjectId = projectId;\r\n let tempResourceName = resourceName;\r\n let tempFromDate = fromDate;\r\n let tempToDate = toDate;\r\n let selectedProject = projectList.find(x => x.id === projectId);\r\n let dateArray = [];\r\n selectedProject.details.map((detail) => {\r\n detail.measurements.map(element => {\r\n dateArray.push(new Date((element.insertedOn).replace('T', ' ')));\r\n });\r\n\r\n });\r\n let tempMaxDate = parseNewDateToDDMMYYY(new Date(Math.max.apply(null, dateArray)));\r\n let tempMinDate = parseNewDateToDDMMYYY(new Date(Math.max.apply(null, dateArray) - 86400000));\r\n props.actions.fromDateAction(tempMinDate);\r\n props.actions.toDateAction(tempMaxDate);\r\n\r\n props.actions.projectIdAction(tempProjectId);\r\n props.actions.resourceAction(tempResourceName); \r\n props.actions.projectReportAction(true);\r\n props.actions.projectNameAction(selectedProject.projectName);\r\n history.push(\"/results\");\r\n }\r\n const ModifyRedirect = (projectId) => {\r\n let thisProject = projectList.find(x => x.id === projectId);\r\n let fromDate = thisProject.timeRangeBegin;\r\n let toDate = thisProject.timeRangeEnd;\r\n props.actions.projectIdAction(projectId);\r\n props.actions.projectQrAction(thisProject.qrCode);\r\n props.actions.projectNameAction(thisProject.projectName);\r\n props.actions.companyAction(thisProject.companyName);\r\n props.actions.companyIdAction(thisProject.companyId);\r\n props.actions.resourceAction(thisProject.resourceDescription);\r\n props.actions.fromDateAction(fromDate);\r\n props.actions.toDateAction(toDate);\r\n history.push(\"/modify\");\r\n }\r\n\r\n const ReportRedirect = (projectId) => {\r\n let tempProjectId = projectId;\r\n props.actions.projectIdAction(tempProjectId)\r\n history.push(\"/projectreport\");\r\n }\r\n\r\n const getPercentage = (fromDate, toDate) => {\r\n let fromDateDate = new Date(fromDate);\r\n let toDateDate = new Date(toDate);\r\n let difference = currentDate.getTime() - fromDateDate.getTime();\r\n let percentage = (difference / (toDateDate.getTime() - fromDateDate.getTime())) * 100;\r\n return percentage;\r\n }\r\n\r\n const getDaysLeft = (fromDate, toDate) => {\r\n let fromDateDate = new Date(fromDate);\r\n let toDateDate = new Date(toDate);\r\n let difference = toDateDate.getTime() - currentDate.getTime();\r\n let daysLeft = Math.round(difference / (1000 * 60 * 60 * 24));\r\n return daysLeft;\r\n }\r\n\r\n const getMeasurementCount = (project) => {\r\n let measurementCount = 0;\r\n if (project.details.length > 0) {\r\n project.details.forEach(detail => {\r\n measurementCount += detail.measurements.length;\r\n })\r\n }\r\n if (measurementCount === 0) {\r\n return \"No events recorded\";\r\n }\r\n return measurementCount;\r\n }\r\n\r\n const handleGoTopPage = () => {\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\r\n }\r\n\r\n const sortProjectsOnFinished = (projects) => {\r\n var results = projects.map(project => {\r\n let percentage = getPercentage(Date.parse(project.timeRangeBegin), Date.parse(project.timeRangeEnd))\r\n if (percentage < 100) {\r\n project.finished = false\r\n }\r\n else {\r\n project.finished = true\r\n }\r\n\r\n return project\r\n })\r\n\r\n results = results.sort((a, b) => (a.finished - b.finished))\r\n return results\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Project overview\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n {projectList.map(project => (\r\n <div className={classes.boxStyle} key={project.id}>\r\n <div className={classes.headerContainer}>\r\n <Typography variant='h6' onClick={() => ModifyRedirect(project.id)} className={classes.headerTitle}>\r\n {project.projectName}\r\n </Typography>\r\n <div className={classes.buttonContainer}>\r\n <IconButton onClick={() => ResultRedirect(project.id, project.resourceDescription, project.timeRangeBegin, project.timeRangeEnd)} size='small' style={{ height: \"50px\", width: \"50px\", borderRadius: \"25px\" }}>\r\n <BarChartIcon></BarChartIcon>\r\n </IconButton>\r\n <IconButton onClick={() => ReportRedirect(project.id)} size='small' style={{ height: \"50px\", width: \"50px\", borderRadius: \"25px\" }}>\r\n <EuroIcon></EuroIcon>\r\n </IconButton>\r\n </div>\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.dateContainer}>\r\n <Typography variant='h7' style={{ fontWeight: 'bold', minWidth: \"10%\" }}>\r\n Timerange:\r\n </Typography>\r\n {!project.finished ?\r\n <Tooltip title={\r\n getDaysLeft(Date.parse(project.timeRangeBegin), Date.parse(project.timeRangeEnd)) === 1 ?\r\n `${getDaysLeft(Date.parse(project.timeRangeBegin), Date.parse(project.timeRangeEnd))} day left`\r\n : `${getDaysLeft(Date.parse(project.timeRangeBegin), Date.parse(project.timeRangeEnd))} days left`}>\r\n <LinearProgress className={classes.bar} style={{ height: \"8px\", borderRadius: \"15px\", marginTop: \"6px\" }} color='success' variant=\"determinate\" value={getPercentage(Date.parse(project.timeRangeBegin), Date.parse(project.timeRangeEnd))} />\r\n </Tooltip>\r\n :\r\n <LinearProgress className={classes.bar} style={{ height: \"8px\", borderRadius: \"15px\", marginTop: \"6px\" }} color='error' variant=\"determinate\" value={100} />\r\n }\r\n </div>\r\n <div>\r\n <Typography variant='h7' style={{ fontWeight: 'bold' }}>\r\n Location:\r\n </Typography>\r\n <Typography variant='h7'>\r\n {\" \" + project.resourceDescription}\r\n </Typography>\r\n </div>\r\n <div>\r\n <Typography variant='h7' style={{ fontWeight: 'bold' }}>\r\n Events:\r\n </Typography>\r\n <Typography variant='h7'>\r\n {\" \" + getMeasurementCount(project)}\r\n </Typography>\r\n </div>\r\n </div>\r\n ))}\r\n <Fab onClick={handleGoTopPage} variant=\"extended\" style={{ background: \"rgb(195, 153, 107)\", color: 'white', position: \"fixed\", bottom: '25px', right: \"17%\" }}>\r\n <NavigationIcon />\r\n </Fab>\r\n </div>\r\n\r\n\r\n </div>\r\n )\r\n}\r\n\r\nexport default ProjectReportOverviewPage;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\r\n bar: {\r\n [theme.breakpoints.up('lg')]: {\r\n minWidth: \"70%\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n minWidth: \"60%\",\r\n },\r\n [theme.breakpoints.down('md')]: {\r\n minWidth: \"65%\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: \"70%\",\r\n },\r\n },\r\n headerContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n flexDirection: 'row',\r\n },\r\n\r\n buttonContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignContent: 'center',\r\n flexDirection: 'row',\r\n },\r\n dateContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n width: '100%',\r\n flexDirection: 'row',\r\n },\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n borderRadius: \"8px\",\r\n [theme.breakpoints.up('lg')]: {\r\n maxWidth: \"50%\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n maxWidth: \"70%\",\r\n },\r\n [theme.breakpoints.down('md')]: {\r\n maxWidth: \"90%\",\r\n },\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"25px\"\r\n },\r\n titleTextStyle: {\r\n display: \"flex\",\r\n marginLeft: \"20px\",\r\n },\r\n boxStyle: {\r\n position: \"relative\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n flexDirection: \"column\",\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"18px\",\r\n gap: \"10px\",\r\n marginBottom: '15px',\r\n\r\n [theme.breakpoints.up('sm')]: {\r\n width: '32%',\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n width: '100%',\r\n },\r\n\r\n },\r\n menuItem: {\r\n color: '#1D3557',\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '1rem',\r\n width: '100% !important',\r\n marginBottom: '15px'\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100% !important',\r\n fontSize: '1.2rem',\r\n },\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n\r\n iconStyle: {\r\n verticalAlign: \"-8px\",\r\n marginRight: \"4px\"\r\n },\r\n link: {\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n },\r\n },\r\n headerTitle: {\r\n cursor: 'pointer'\r\n },\r\n linkButton: {\r\n width: '100% !important',\r\n minWidth: '100% !important',\r\n [theme.breakpoints.down('sm')]: {\r\n minHeight: \"46.8px\",\r\n height: \"90%\",\r\n padding: \"10px\",\r\n fontSize: \"1rem\",\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n height: \"40px\",\r\n fontSize: \"1.2rem\",\r\n },\r\n [theme.breakpoints.down('lg')]: {\r\n fontSize: \"1.2rem\",\r\n },\r\n\r\n background: \"#C3996B !important\",\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n hstyle: {\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: \"2rem\",\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n fontSize: \"2.5rem\",\r\n },\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: 'white',\r\n whiteSpace: 'nowrap'\r\n // color: \"#1D3557\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"5%\",\r\n paddingRight: \"5%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#C3996B !important\",\r\n justifyContent: \"space-between\",\r\n color: 'white'\r\n\r\n },\r\n headerLeft: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n width: '33%'\r\n },\r\n headerMiddle: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n\r\n },\r\n headerRight: {\r\n width: '33%',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n color: 'white'\r\n },\r\n arrowBack: {\r\n padding: '15px',\r\n cursor: 'pointer'\r\n },\r\n taplrLogo: {\r\n width: '150px',\r\n cursor: 'pointer'\r\n }\r\n}));","import React, { useState } from 'react';\r\nimport TextField from '@mui/material/TextField';\r\nimport FileCopyIcon from '@mui/icons-material/FileCopy';\r\nimport { InputAdornment } from '@mui/material';\r\nimport { IconButton } from '@mui/material';\r\nimport ApiHelper from '../../Utils/API/apiHelper'\r\nimport Snackbar from '@mui/material/Snackbar';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\n\r\nfunction CopyQrLink(props) {\r\n\r\n const [openToast, setOpenToast] = useState(false);\r\n const appSettings = ApiHelper.appSettings;\r\n\r\n const handleCopy = () => {\r\n handleOpenToast();\r\n navigator.clipboard.writeText(appSettings.TAPLR_BASE_URL + \"perfmeasurement?qr=\" + props.QrCode);\r\n };\r\n\r\n const handleOpenToast = () => {\r\n setOpenToast(true);\r\n };\r\n\r\n const handleCloseToast = (reason) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n\r\n setOpenToast(false);\r\n };\r\n\r\n const action = (\r\n <React.Fragment>\r\n <IconButton\r\n size=\"small\"\r\n aria-label=\"close\"\r\n color=\"inherit\"\r\n onClick={handleCloseToast}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </React.Fragment>\r\n );\r\n\r\n const Style = {\r\n width: '100%',\r\n marginTop: \"10px\"\r\n }\r\n const copyUrl = {\r\n marginTop: \"15px\",\r\n }\r\n\r\n return (\r\n <div style={copyUrl}>\r\n <TextField\r\n style={Style}\r\n label=\"Copy link to clipboard:\"\r\n fullWidth\r\n InputProps={{\r\n readOnly: true,\r\n endAdornment: (\r\n <InputAdornment position='end'>\r\n <IconButton onClick={handleCopy}>\r\n <FileCopyIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n )\r\n }}\r\n variant=\"outlined\"\r\n value={props.value}>\r\n </TextField>\r\n\r\n <Snackbar\r\n open={openToast}\r\n autoHideDuration={3000}\r\n onClose={handleCloseToast}\r\n message=\"Link copied to clipboard\"\r\n action={action}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default CopyQrLink;","import TextField from '@mui/material/TextField';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\n\r\nfunction DropdownCompany(props) {\r\n const dropdownList = props.companies.map(x => { return { label: x.name, value: x.id } })\r\n return (\r\n <Autocomplete\r\n freeSolo\r\n disablePortal\r\n value={props.value}\r\n options={dropdownList.sort((a, b) => a.label.localeCompare(b.label))}\r\n getOptionLabel={(option) => {\r\n // Value selected with enter, right from the input\r\n if (typeof option === 'string') {\r\n return option;\r\n }\r\n // Add \"xxx\" option created dynamically\r\n if (option.inputValue) {\r\n return option.inputValue;\r\n }\r\n // Regular option\r\n return option.label;\r\n }}\r\n renderOption={(props, option) => <li {...props}>{option.label}</li>}\r\n onChange={(event, newValue) => {\r\n if (typeof newValue === 'string') {\r\n props.action(newValue)\r\n } else if (newValue && newValue.inputValue) {\r\n props.action(newValue)\r\n } else {\r\n props.action(event)\r\n }\r\n }} renderInput={(params) => <TextField error={props.error} helperText={props.helperText} {...params} InputLabelProps={{ shrink: false }} label={props.value ? \" \" : \"Company\"} onChange={(event) => props.action(event)} />}\r\n />\r\n );\r\n}\r\n\r\nexport default DropdownCompany","import React from 'react';\r\nimport Button from '@mui/material/Button'\r\n\r\nfunction ButtonNormalDelete(props) {\r\n return (\r\n <Button size='large' startIcon={props.startIcon} type={props.type} style={ButtonStyle} onClick={props.onClick} variant=\"contained\">{props.content}</Button>\r\n )\r\n}\r\n\r\nconst ButtonStyle = {\r\n background: \"#ff4c54\"\r\n}\r\n\r\nexport default ButtonNormalDelete;","import * as React from 'react';\r\nimport { styled } from '@mui/material/styles';\r\nimport Button from '@mui/material/Button';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport VisibilityIcon from '@mui/icons-material/Visibility';\r\nimport Divider from '@mui/material/Divider';\r\nimport QrCode2Icon from '@mui/icons-material/QrCode2';\r\nimport FileCopyIcon from '@mui/icons-material/FileCopy';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport EuroIcon from '@mui/icons-material/Euro';\r\n\r\nconst StyledMenu = styled((props) => (\r\n\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 6,\r\n marginTop: theme.spacing(1),\r\n minWidth: 180,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[300],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 0',\r\n },\r\n '& .MuiMenuItem-root': {\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 18,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(1.5),\r\n },\r\n '&:active': {\r\n backgroundColor: \"#C3996B\"\r\n },\r\n },\r\n },\r\n}));\r\n\r\nexport default function CustomizedMenus(props) {\r\n\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const open = Boolean(anchorEl);\r\n const activeProject = props.isActive\r\n\r\n const handleClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n return (\r\n\r\n <div>\r\n <Button className={classes.dropDown}\r\n size='large'\r\n id=\"demo-customized-button\"\r\n aria-controls={open ? 'demo-customized-menu' : undefined}\r\n aria-haspopup=\"true\"\r\n aria-expanded={open ? 'true' : undefined}\r\n variant=\"contained\"\r\n onClick={handleClick}\r\n endIcon={<KeyboardArrowDownIcon />}\r\n >\r\n Project options\r\n </Button>\r\n <StyledMenu\r\n id=\"demo-customized-menu\"\r\n MenuListProps={{\r\n 'aria-labelledby': 'demo-customized-button',\r\n }}\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n <MenuItem onClick={props.resultsRedirect} className={classes.viewResults} disableRipple>\r\n <VisibilityIcon fontSize=\"inherit\" className={classes.icon} />\r\n View Results\r\n </MenuItem>\r\n <Divider sx={{ my: 0.5 }} />\r\n <MenuItem onClick={props.financialDashboardRedirect} disableRipple>\r\n <EuroIcon fontSize=\"inherit\" className={classes.icon} />\r\n Financial dashboard\r\n </MenuItem>\r\n <Divider sx={{ my: 0.5 }} />\r\n <MenuItem onClick={props.duplicateRedirect} disableRipple>\r\n <FileCopyIcon fontSize=\"inherit\" className={classes.icon} ></FileCopyIcon>\r\n Duplicate\r\n </MenuItem>\r\n <Divider sx={{ my: 0.5 }} />\r\n {\r\n activeProject === true ?\r\n <MenuItem onClick={props.handleClickOpenQr} disableRipple>\r\n <QrCode2Icon fontSize=\"inherit\" className={classes.icon} />\r\n QR-code\r\n </MenuItem>\r\n :\r\n <MenuItem onClick={props.handleClickOpenQr} disabled disableRipple>\r\n <QrCode2Icon fontSize=\"inherit\" className={classes.icon} />\r\n QR-code\r\n </MenuItem>\r\n\r\n }\r\n <Divider sx={{ my: 0.5 }} />\r\n <MenuItem onClick={props.handleDialogOpenDel} className={classes.deleteProject} disableRipple>\r\n <DeleteIcon fontSize=\"inherit\" className={classes.icon} />\r\n Delete\r\n </MenuItem>\r\n </StyledMenu>\r\n </div>\r\n );\r\n\r\n\r\n}\r\nconst useStyles = makeStyles((theme) => ({\r\n dropDown: {\r\n fontSize: '0.9375rem',\r\n backgroundColor: \"#C3996B !important\",\r\n [theme.breakpoints.up('md')]: {\r\n },\r\n },\r\n viewResults: {\r\n marginTop: '4px !important',\r\n },\r\n deleteProject: {\r\n marginBottom: '4px !important',\r\n },\r\n icon: {\r\n paddingRight: '16px',\r\n borderRight: '1px solid rgba(0, 0, 0, 0.12)',\r\n fontSize: '45px !important'\r\n }\r\n}));","import React, { useEffect, useState, useRef } from 'react';\r\nimport TextfieldInput from '../../Shared/TextField';\r\nimport { useReactToPrint } from 'react-to-print';\r\nimport PrintIcon from '@mui/icons-material/Print';\r\nimport CopyQrLink from '../../Shared/CopyQrLink';\r\nimport DateSelectionFuture from \"../../Shared/DateSelection/DateSelectionFuture\";\r\nimport { Link } from 'react-router-dom';\r\nimport ViewComfyIcon from '@mui/icons-material/ViewComfy';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport TableDragResources from '../../Shared/Tables/TableDragResources';\r\nimport DescriptionItem from '../../Shared/DescriptionItem';\r\nimport DropdownCompany from '../../Shared/Dropdowns/DropdownCopmany';\r\nimport DropdownResources from '../../Shared/Dropdowns/DropdownResources';\r\nimport ButtonNormalText from '../../Shared/Buttons/ButtonNormalText';\r\nimport ButtonNormalDelete from '../../Shared/Buttons/ButtonNormalDelete';\r\nimport CustomizedMenus from '../../Shared/CustomizedMenus';\r\nimport ButtonSave from '../../Shared/Buttons/ButtonSave';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Grid } from '@mui/material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Divider from '@mui/material/Divider';\r\nimport QRCode from \"qrcode.react\";\r\nimport ApiHelper from '../../../Utils/API/apiHelper';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Button from '@mui/material/Button';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { parseNewDateToDDMMYYY } from \"../../../Utils/dateHelper\";\r\n\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport ToggleButton from '@mui/material/ToggleButton';\r\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\r\nimport AddIcon from '@mui/icons-material/Add';\r\n\r\nimport RemoveIcon from '@mui/icons-material/Remove';\r\nimport Tooltip from '@mui/material/Tooltip';\r\n\r\n\r\nimport Counter from '../../../../src/Images/counterStyle.svg';\r\nimport Stopwatch from '../../../../src/Images/timerStyle.svg';\r\nimport FreeText from '../../../../src/Images/Freetext.svg';\r\nimport DataList from '../../../../src/Images/DataList.svg';\r\nimport Scanner from '../../../../src/Images/barcodeScanner.svg';\r\nimport Image from '../../../../src/Images/camera.svg';\r\nimport API from '../../../../src/Images/api.svg';\r\ntoast.configure();\r\n\r\nfunction ModifyPage(props) {\r\n var today = new Date();\r\n const [FromDate, setFromDate] = useState(today);\r\n const [ToDate, setToDate] = useState(today);\r\n const [projectQR, setProjectQR] = useState(null);\r\n const [projectId, setProjectId] = useState(null);\r\n const [resoureName, setResourceName] = useState(\"\");\r\n const [CompanyName, setCompanyName] = useState(\"\");\r\n const [CompanyId, setCompanyId] = useState(null);\r\n const [OldCompanyId, setOldCompanyId] = useState(null);\r\n const [projectName, setProjectName] = useState(\"\");\r\n const [companies, setCompanies] = useState([]);\r\n const [resources, setResources] = useState([]);\r\n const [projectDetailRows, setProjectDetailRows] = useState([]);\r\n const [delopen, setDelOpen] = useState(false);\r\n const history = useHistory();\r\n const GetUserID = props.Login.userid;\r\n const [openQr, setOpenQr] = useState(false);\r\n const componentRef = useRef();\r\n const appSettings = ApiHelper.appSettings;\r\n const classes = useStyles();\r\n const [types, setTypes] = useState([]);\r\n const [activeProject, setActiveProject] = useState(true);\r\n const [helperTextProjectName, setHelperTextProjectName] = useState(null);\r\n const [helperTextCompany, setHelperTextCompany] = useState(null);\r\n const [helperTextResourceDescription, setHelperTextResourceDescription] = useState(null);\r\n const [errorProjectName, setErrorProjectName] = useState(false);\r\n const [errorCompany, setErrorCompany] = useState(false);\r\n const [errorResourceDescription, setErrorResourceDescription] = useState(false);\r\n const [emptyDetails, setEmptyDetails] = useState(false);\r\n\r\n useEffect(() => {\r\n dataService.getCompanies(GetUserID).then(results => {\r\n setCompanies(results);\r\n })\r\n dataService.getResources(GetUserID).then(results => {\r\n setResources(results);\r\n })\r\n dataService.getTypes().then(results => {\r\n setTypes(results.sort((a, b) => a.description.localeCompare(b.description)));\r\n });\r\n dataService.getProjectDetailsByQr(props.projectCopy.projectQr).then(results => {\r\n let tempProjectDetailRows = [];\r\n if (results.some(x => x.id)) {\r\n tempProjectDetailRows = results.map(x => ({ comment: x.hasComment, color: x.color, typeId: x.typeId, type: x.typeId, description: x.description, Id: x.id, edit: false, sequence: x.sequence, dataListId: x.dataListId, externalApiId: x.externalApiId, price: x.price, isProfit: x.isProfit, costProfit: (x.isProfit ? '+' : '-') }));\r\n }\r\n tempProjectDetailRows.sort((a, b) => a.sequence - b.sequence);\r\n setProjectDetailRows(tempProjectDetailRows);\r\n })\r\n\r\n setProjectQR(props.projectCopy.projectQr);\r\n setProjectName(props.projectCopy.projectName);\r\n setCompanyName(props.projectCopy.company);\r\n setCompanyId(props.projectCopy.companyId);\r\n setOldCompanyId(props.projectCopy.companyId);\r\n setResourceName(props.projectCopy.resource);\r\n let fromDateString = \"\";\r\n if (props.projectCopy.fromDate !== null) {\r\n fromDateString = Date.parse(props.projectCopy.fromDate);\r\n }\r\n else {\r\n fromDateString = Date.parse(today);\r\n }\r\n let fromDateObject = new Date(fromDateString);\r\n setFromDate(fromDateObject);\r\n let toDateString = \"\";\r\n if (props.projectCopy.toDate !== null) {\r\n toDateString = Date.parse(props.projectCopy.toDate);\r\n }\r\n else {\r\n toDateString = Date.parse(today);\r\n }\r\n let toDateObject = new Date(toDateString);\r\n setToDate(toDateObject);\r\n\r\n setProjectId(props.projectCopy.projectId);\r\n let currentDate = new Date();\r\n let Diffrence = dateRange(fromDateObject, toDateObject, currentDate, currentDate);\r\n\r\n if (Diffrence) {\r\n setActiveProject(true);\r\n }\r\n else {\r\n setActiveProject(false);\r\n }\r\n }, []);\r\n\r\n const datesAreOnSameDay = (first, second) =>\r\n first.getFullYear() === second.getFullYear() &&\r\n first.getMonth() === second.getMonth() &&\r\n first.getDate() === second.getDate();\r\n\r\n function dateRange(a_start, a_end, b_start, b_end) {\r\n if (a_start <= b_start && b_start <= a_end) return true; // b starts in a\r\n if (a_start <= b_end && b_end <= a_end) return true; // b ends in a\r\n if (b_start < a_start && a_end < b_end) return true; // a in b\r\n // if (b_start < a_start && a_end > b_end) return true; // a overlaps b\r\n\r\n if (datesAreOnSameDay(a_start, b_start)) return true;\r\n if (datesAreOnSameDay(b_end, a_end)) return true;\r\n return false;\r\n }\r\n\r\n const setProject = (event) => {\r\n setProjectName(event.target.value);\r\n }\r\n const setTheFromDate = (event) => {\r\n if (event !== FromDate) {\r\n setFromDate(event);\r\n }\r\n }\r\n const setTheToDate = (event) => {\r\n if (event !== ToDate) {\r\n setToDate(event);\r\n }\r\n }\r\n\r\n const handleClickOpenQr = () => {\r\n setOpenQr(true);\r\n };\r\n const handleCloseQr = () => {\r\n setOpenQr(false);\r\n };\r\n const handleDialogOpenDel = () => {\r\n setDelOpen(true);\r\n }\r\n const handleDialogCloseDel = () => {\r\n setDelOpen(false);\r\n }\r\n const setCompany = (event) => {\r\n if (event.inputValue) {\r\n if (companies.some(x => x.name === event.inputValue)) {\r\n setCompanyId(companies.find(x => x.name === event.inputValue).id);\r\n setCompanyName(event.inputValue);\r\n }\r\n }\r\n else {\r\n if (event.target.textContent) {\r\n if (companies.some(x => x.name === event.target.textContent)) {\r\n setCompanyId(companies.find(x => x.name === event.target.textContent).id);\r\n setCompanyName(event.target.textContent);\r\n }\r\n }\r\n else {\r\n if (companies.some(x => x.name === event.target.value)) {\r\n setCompanyId(companies.find(x => x.name === event.target.value).id);\r\n }\r\n setCompanyName(event.target.value);\r\n }\r\n }\r\n }\r\n\r\n const setDates = (fromDate, toDate) => {\r\n setFromDate(fromDate);\r\n setToDate(toDate);\r\n let tempFromDate = fromDate;\r\n let tempToDate = toDate;\r\n props.actions.fromDateAction(tempFromDate);\r\n props.actions.toDateAction(tempToDate);\r\n }\r\n\r\n const save = (newProjectrows) => {\r\n if (projectName === \"\" || resoureName === \"\" || CompanyId === \"\" || CompanyName === \"\" || FromDate === \"\" || ToDate === \"\" || resoureName == null || FromDate == null || ToDate == null) {\r\n if (projectName === \"\") {\r\n setHelperTextProjectName(\"Please enter a project name.\");\r\n setErrorProjectName(true);\r\n }\r\n else {\r\n setHelperTextProjectName(null);\r\n setErrorProjectName(false);\r\n }\r\n if (resoureName === \"\" || resoureName === null || resoureName === undefined) {\r\n setHelperTextResourceDescription(\"Please Select or enter a Location.\");\r\n setErrorResourceDescription(true);\r\n }\r\n else {\r\n setHelperTextResourceDescription(null);\r\n setErrorResourceDescription(false);\r\n }\r\n if (CompanyId === \"\" || CompanyId === null || CompanyName === \"\" || CompanyName === null || CompanyName === undefined) {\r\n setHelperTextCompany(\"Please Select or Create a Company.\");\r\n setErrorCompany(true);\r\n }\r\n else {\r\n setHelperTextCompany(null);\r\n setErrorCompany(false);\r\n }\r\n } else {\r\n setHelperTextResourceDescription(null);\r\n setErrorResourceDescription(false);\r\n setHelperTextCompany(null);\r\n setErrorCompany(false);\r\n setHelperTextProjectName(null);\r\n setErrorProjectName(false);\r\n setEmptyDetails(false);\r\n if (newProjectrows.length === 0 || newProjectrows.find(x => x.Id).edit || newProjectrows.find(x => x.type === null) != undefined) {\r\n setEmptyDetails(true);\r\n }\r\n else {\r\n setEmptyDetails(false);\r\n var i = 1;\r\n let def = newProjectrows.map(x => ({ HasComment: x.comment, color: x.color, description: x.description, typeId: x.type, type: x.type, Id: x.Id, projectId: projectId, sequence: x.sequence, dataListId: x.dataListId, externalApiId: x.externalApiId, price: (x.price === \"\" || isNaN(x.price) || x.price === undefined || x.price === null ? 0 : x.price), isProfit: x.isProfit, costProfit: (x.isProfit ? '+' : '-'), newRow: x.newRow })).sort((a, b) => a.sequence - b.sequence);\r\n def.map((detail, index) => {\r\n detail.sequence = index + 1;\r\n });\r\n let tempDef = [...def];\r\n // props.actions.detailsAction(def);\r\n dataService.updateProjects(GetUserID, projectName, resoureName, OldCompanyId, CompanyId, CompanyName, FromDate, ToDate, def, projectId, projectQR);\r\n }\r\n }\r\n }\r\n\r\n const setResource = (event) => {\r\n if (event.inputValue) {\r\n setResourceName(event.inputValue);\r\n }\r\n else {\r\n if (event.target.textContent) {\r\n setResourceName(event.target.textContent);\r\n }\r\n else {\r\n setResourceName(event.target.value);\r\n }\r\n }\r\n }\r\n\r\n const resultsRedirect = () => {\r\n let tempProjectId = projectId;\r\n let tempCompanyId = CompanyId;\r\n let tempCompanyName = CompanyName;\r\n let tempResourceName = resoureName;\r\n let tempFromDate = parseNewDateToDDMMYYY(FromDate);\r\n let tempToDate = parseNewDateToDDMMYYY(ToDate);\r\n let tempProjectRows = [...projectDetailRows];\r\n props.actions.projectIdAction(tempProjectId);\r\n props.actions.companyAction(tempCompanyName);\r\n props.actions.companyIdAction(tempCompanyId);\r\n props.actions.resourceAction(tempResourceName);\r\n props.actions.fromDateAction(tempFromDate);\r\n props.actions.toDateAction(tempToDate);\r\n props.actions.detailsAction(tempProjectRows);\r\n props.actions.projectReportAction(false);\r\n history.push(\"/results\");\r\n }\r\n const financialDashboardRedirect = () => {\r\n let tempProjectId = projectId;\r\n props.actions.projectIdAction(tempProjectId)\r\n history.push(\"/projectreport\");\r\n }\r\n\r\n const duplicateRedirect = () => {\r\n let tempCompanyId = CompanyId;\r\n let tempCompanyName = CompanyName;\r\n let tempResourceName = resoureName;\r\n let tempFromDate = FromDate;\r\n let tempToDate = ToDate;\r\n let tempProjectRows = [...projectDetailRows];\r\n\r\n props.actions.companyAction(tempCompanyName);\r\n props.actions.companyIdAction(tempCompanyId);\r\n props.actions.resourceAction(tempResourceName);\r\n props.actions.fromDateAction(tempFromDate);\r\n props.actions.toDateAction(tempToDate);\r\n props.actions.detailsAction(tempProjectRows);\r\n history.push(\"/duplicate\");\r\n }\r\n\r\n const sendToApi = () => {\r\n if (projectName === \"\" || resoureName === \"\" || CompanyId === \"\" || CompanyName === \"\" || FromDate === \"\" || ToDate === \"\" || resoureName == null || FromDate == null || ToDate == null) {\r\n if (projectName === \"\") {\r\n setHelperTextProjectName(\"Please enter a project name.\");\r\n setErrorProjectName(true);\r\n }\r\n else {\r\n setHelperTextProjectName(null);\r\n setErrorProjectName(false);\r\n }\r\n if (resoureName === \"\" || resoureName === null || resoureName === undefined) {\r\n setHelperTextResourceDescription(\"Please Select or enter a Location.\");\r\n setErrorResourceDescription(true);\r\n }\r\n else {\r\n setHelperTextResourceDescription(null);\r\n setErrorResourceDescription(false);\r\n }\r\n if (CompanyId === \"\" || CompanyId === null || CompanyName === \"\" || CompanyName === null || CompanyName === undefined) {\r\n setHelperTextCompany(\"Please Select or Create a Company.\");\r\n setErrorCompany(true);\r\n }\r\n else {\r\n setHelperTextCompany(null);\r\n setErrorCompany(false);\r\n }\r\n } else {\r\n setHelperTextResourceDescription(null);\r\n setErrorResourceDescription(false);\r\n setHelperTextCompany(null);\r\n setErrorCompany(false);\r\n setHelperTextProjectName(null);\r\n setErrorProjectName(false);\r\n setEmptyDetails(false);\r\n if (projectDetailRows.length === 0 || projectDetailRows.find(x => x.type === null) != undefined) {\r\n setEmptyDetails(true);\r\n }\r\n else {\r\n setEmptyDetails(false);\r\n let tempProjDetails = [...projectDetailRows];\r\n tempProjDetails.sort((a, b) => b.sequence + a.sequence);\r\n let projectDetails = tempProjDetails.map(x => ({ HasComment: x.comment, color: x.color, description: x.description, typeId: x.type, type: x.type, Id: x.Id, projectId: projectId, sequence: x.sequence, dataListId: x.dataListId, price: (x.price === null ? 0 : x.price), isProfit: (x.isProfit === null ? false : true), costProfit: (x.isProfit !== null ? (x.isProfit ? '+' : '-') : '-'), externalApiId: x.externalApiId, newRow: x.newRow })).sort((a, b) => a.sequence - b.sequence);\r\n props.actions.detailsAction(projectDetails);\r\n props.actions.projectIdAction(projectId);\r\n props.actions.companyAction(CompanyName);\r\n props.actions.companyIdAction(CompanyId);\r\n props.actions.resourceAction(resoureName);\r\n props.actions.fromDateAction(FromDate);\r\n props.actions.toDateAction(ToDate);\r\n\r\n dataService.updateProjects(GetUserID, projectName, resoureName, OldCompanyId, CompanyId, CompanyName, FromDate, ToDate, projectDetails, projectId, projectQR).then((response) => {\r\n if (response.success) {\r\n toast.success('Project was saved successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n });\r\n history.push(\"/modify\");\r\n }\r\n }\r\n }\r\n\r\n const handlePrint = useReactToPrint({\r\n content: () => componentRef.current\r\n });\r\n\r\n const handleDeleteProject = () => {\r\n dataService.deleteProject(projectId, GetUserID).then(response => {\r\n if (response.success) {\r\n toast.success('Project was deleted successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n history.push(\"/manage\");\r\n });\r\n }\r\n\r\n class ComponentToPrint extends React.Component {\r\n render() {\r\n return (\r\n <div className='print-source' style={{ position: 'relative', height: '100%', flexDirection: 'column', display: 'flex', justifyContent: 'center', alignItems: 'center', alignContent: 'center' }}>\r\n <h1 style={{ marginBottom: \"20px\" }}>{projectName}</h1>\r\n <QRCode\r\n id=\"Qr\"\r\n value={appSettings.TAPLR_BASE_URL + \"perfmeasurement?qr=\" + projectQR}\r\n bgColor={\"#ffffff\"}\r\n renderAs={\"svg\"}\r\n size={400} />\r\n <div style={{ position: 'relative', width: '400px' }}>\r\n <div style={{ width: '100%', display: 'flex', justifyContent: 'end' }}>Powered by Flagstone</div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n\r\n\r\n const actionStyle = {\r\n textAlign: \"center\",\r\n display: \"flex\",\r\n justifyContent: \"center\"\r\n }\r\n\r\n const contentStyle = {\r\n textAlign: \"center\",\r\n justifyContent: \"center\",\r\n margin: '15px',\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Modify your project\" {...props} wipe={true} backbutton={true} />\r\n <div className={classes.container}>\r\n <div className={classes.menuOption}>\r\n <CustomizedMenus isActive={activeProject} handleDialogOpenDel={handleDialogOpenDel} handleClickOpenQr={handleClickOpenQr} duplicateRedirect={duplicateRedirect} resultsRedirect={resultsRedirect} financialDashboardRedirect={financialDashboardRedirect}></CustomizedMenus>\r\n </div>\r\n <div className={classes.optionContainer}>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Project Name\" />\r\n <TextfieldInput label={projectName ? \" \" : \"Project\"} InputLabelProps={{ shrink: false }} value={projectName} action={setProject} helperText={helperTextProjectName} error={errorProjectName} />\r\n </div>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Company name\" />\r\n <DropdownCompany companies={companies} value={CompanyName} action={setCompany} helperText={helperTextCompany} error={errorCompany} />\r\n </div>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Location\" />\r\n <DropdownResources resources={resources} value={resoureName} action={setResource} helperText={helperTextResourceDescription} error={errorResourceDescription} />\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <Grid item xs={12} style={{ marginBottom: '-1rem' }}>\r\n <DescriptionItem Text=\"Active between:\" />\r\n <DateSelectionFuture FromDate={FromDate} ToDate={ToDate} setDates={setDates} setTheFromDate={setTheFromDate} setTheToDate={setTheToDate} />\r\n <Divider style={{ marginBottom: \"2rem\", marginTop: \"1rem\" }}></Divider>\r\n </Grid>\r\n {/* <ToggleButtonGroup size=\"small\" exclusive aria-label=\"costPrice\" orientation=\"horizontal\">\r\n <ToggleButton value=\"+\" aria-label=\"Profit\">\r\n <Tooltip placement=\"left\" title=\"Profit\">\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\" }} src={Counter}></img>\r\n </Tooltip>\r\n </ToggleButton>\r\n\r\n <ToggleButton value=\"-\" aria-label=\"Cost\">\r\n <Tooltip placement=\"left\" title=\"Cost\">\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\" }} src={Stopwatch}></img>\r\n </Tooltip>\r\n </ToggleButton>\r\n <ToggleButton value=\"-\" aria-label=\"Cost\">\r\n <Tooltip placement=\"left\" title=\"Cost\">\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\" }} src={FreeText}></img>\r\n </Tooltip>\r\n </ToggleButton>\r\n <ToggleButton value=\"-\" aria-label=\"Cost\">\r\n <Tooltip placement=\"left\" title=\"Cost\">\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\" }} src={DataList}></img>\r\n </Tooltip>\r\n </ToggleButton>\r\n <ToggleButton value=\"-\" aria-label=\"Cost\">\r\n <Tooltip placement=\"left\" title=\"Cost\">\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\" }} src={Scanner}></img>\r\n </Tooltip>\r\n </ToggleButton>\r\n <ToggleButton value=\"-\" aria-label=\"Cost\">\r\n <Tooltip placement=\"left\" title=\"Cost\">\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\" }} src={Image}></img>\r\n </Tooltip>\r\n </ToggleButton>\r\n <ToggleButton value=\"-\" aria-label=\"Cost\">\r\n <Tooltip placement=\"left\" title=\"Cost\">\r\n <img style={{ margin: \"0px\", width: \"30px\", height: \"30px\" }} src={API}></img>\r\n </Tooltip>\r\n </ToggleButton>\r\n \r\n </ToggleButtonGroup> */}\r\n {emptyDetails ?\r\n <div>\r\n <Grid item xs={12} sm={12} md={12} style={{ border: \"solid 2px\", borderColor: \"#d32f2f\", borderRadius: \"17px\" }}>\r\n <TableDragResources create={false} {...props} types={types} rows={projectDetailRows} setRows={setProjectDetailRows} makeSave={save} />\r\n </Grid>\r\n <p style={{ color: \"#d32f2f\", fontWeight: \"400\", fontSize: \"0.75rem\", fontFamily: \"Roboto, Helvetica, Arial\", letterSpacing: \"0.03333em\" }}>Please create atleast one item.</p>\r\n </div>\r\n :\r\n <div>\r\n <Grid item xs={12} sm={12} md={12}>\r\n <TableDragResources create={false} {...props} types={types} rows={projectDetailRows} setRows={setProjectDetailRows} makeSave={save} />\r\n </Grid>\r\n </div>}\r\n <div className={classes.buttonDiv} style={{ marginTop: '15px' }}>\r\n {/* <Button size='large' className={classes.qrButton} onClick={sendToQr} disabled variant=\"contained\">Generate QR</Button> */}\r\n <ButtonSave startIcon={<SaveIcon />} content=\"Save\" onClick={sendToApi} />\r\n </div>\r\n </div>\r\n\r\n <Dialog\r\n open={openQr}\r\n onClose={handleCloseQr}\r\n className={classes.modalQRCode}\r\n maxWidth={'lg'}\r\n >\r\n <DialogContent style={contentStyle}>\r\n <ComponentToPrint ref={el => (componentRef.current = el)} />\r\n <CopyQrLink QrCode={projectQR} value={appSettings.TAPLR_BASE_URL + \"perfmeasurement?qr=\" + projectQR} />\r\n </DialogContent>\r\n <DialogActions style={actionStyle} className={classes.buttonRow}>\r\n <ButtonNormalText content=\"Close\" onClick={handleCloseQr}></ButtonNormalText>\r\n <Button size='large' className={classes.printButton} onClick={handlePrint} variant=\"contained\"><PrintIcon className={classes.printIcon}></PrintIcon>Print QR-code</Button>\r\n <Link to={\"perfmeasurement?qr=\" + projectQR} style={{ textDecoration: 'none', marginLeft: '10px' }}>\r\n <Button className={classes.printButton} size=\"large\" variant=\"contained\"><ViewComfyIcon className={classes.printIcon}></ViewComfyIcon>{props.content}View</Button>\r\n </Link>\r\n </DialogActions>\r\n </Dialog>\r\n\r\n <Dialog\r\n open={delopen}\r\n onClose={handleDialogCloseDel}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">\r\n {\"Delete Project\"}\r\n </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id=\"alert-dialog-description\">\r\n {\"Are you sure you want to delete project \" + projectName + \" ?\"}\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <ButtonNormalText content=\"Close\" onClick={handleDialogCloseDel}>Close</ButtonNormalText>\r\n <ButtonNormalDelete startIcon={<DeleteIcon />} content=\"Delete\" onClick={handleDeleteProject}>Delete</ButtonNormalDelete>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ModifyPage;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n position: 'relative',\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"90%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n buttonDiv: {\r\n marginTop: '15px',\r\n },\r\n buttonRow: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n paddingLeft: '0px !important',\r\n paddingRight: '0px !important',\r\n marginBottom: '10px',\r\n },\r\n optionContainer: {\r\n marginTop: \"35px\",\r\n display: 'flex',\r\n position: 'relative',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n },\r\n },\r\n projectOptions: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap',\r\n width: '100%'\r\n\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap',\r\n width: '100%'\r\n\r\n }\r\n },\r\n menuOption: {\r\n zIndex: '100',\r\n top: '5px',\r\n position: 'absolute',\r\n right: '5px',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n },\r\n projectOption: {\r\n [theme.breakpoints.up('md')]: {\r\n width: \"100%\",\r\n marginRight: '25px',\r\n\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n menuRight: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n menuLeft: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n\r\n },\r\n titleTextStyle: {\r\n marginLeft: \"20px\",\r\n },\r\n titleSection: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\"\r\n },\r\n smallMenuItem: {\r\n display: \"flex\",\r\n paddingBottom: \"1rem\",\r\n justifyContent: \"center\",\r\n background: \"#FFFFFF\",\r\n alignItems: \"center\"\r\n },\r\n titleStyle: {\r\n paddingLeft: \"10%\",\r\n paddingRight: \"10%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#FFFFFF\",\r\n justifyContent: \"space-between\"\r\n },\r\n activeFor: {\r\n color: \"#696969\",\r\n fontSize: \"15px\",\r\n },\r\n backIcon: {\r\n padding: \"20px\",\r\n cursor: \"pointer\"\r\n },\r\n hstyle: {\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n fontSize: \"2.5rem\",\r\n lineHeight: \"48px\",\r\n color: \"#1D3557\",\r\n },\r\n printIcon: {\r\n paddingRight: '5px',\r\n },\r\n doneButton: {\r\n backgroundColor: '#C3996B !important',\r\n },\r\n printButton: {\r\n backgroundColor: '#0B4097 !important',\r\n }\r\n}));","import React from 'react';\r\n\r\nconst Style = {\r\n fontSize: \"16px\",\r\n lineHeight: \"18px\",\r\n color: \"#1D3557\"\r\n}\r\n\r\nfunction DescriptionTitle(props) {\r\n return (\r\n <div>\r\n <p style={Style}>{props.Text}</p>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DescriptionTitle;","import {useMemo} from 'react';\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\nfunction useQuery() {\r\n const { search } = useLocation();\r\n\r\n return useMemo(() => new URLSearchParams(search), [search]);\r\n}\r\n\r\nexport default useQuery;","export default __webpack_public_path__ + \"static/media/counterStyle.ca5f5a35.svg\";","import React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Button from '@mui/material/Button';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { LightenDarkenColor } from 'lighten-darken-color';\r\nimport Tally from './counterStyle.svg';\r\nimport Divider from '@mui/material/Divider';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport RemoveIcon from '@mui/icons-material/Remove';\r\nimport Card from '@mui/material/Card';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport ReportProblemIcon from '@mui/icons-material/ReportProblem';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport PhotoCameraIcon from '@mui/icons-material/PhotoCamera';\r\nimport TextField from '@mui/material/TextField';\r\nimport Typography from '@mui/material/Typography';\r\nimport SendIcon from '@mui/icons-material/Send';\r\nimport PhotoIcon from '@mui/icons-material/Photo';\r\nimport Webcam from \"react-webcam\";\r\nimport CameraswitchIcon from '@mui/icons-material/Cameraswitch';\r\nimport CircleIcon from '@mui/icons-material/Circle';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport Pagination from '@mui/material/Pagination';\r\nimport InputAdornment from '@mui/material/InputAdornment';\r\nimport { parseNewDateToDDMMYYY } from '../../../Utils/dateHelper';\r\n\r\nfunction Counter(props) {\r\n const classes = useStyles();\r\n const [captured, setCaptured] = useState(false);\r\n const [extraContent, setExtraContent] = useState(false)\r\n const [openComment, setOpenComment] = useState(false);\r\n const [openCamera, setOpenCamera] = useState(false);\r\n const [openFullscreenImage, setOpenFullscreenImage] = useState(false);\r\n const [image, setImage] = useState(\"\");\r\n const [comment, setComment] = useState(\"\");\r\n const [cameraSide, setCameraSide] = useState(true)\r\n const [expanded, setExpanded] = useState(false);\r\n const webcamRef = React.useRef(null);\r\n const [value, setValue] = useState(0);\r\n const [operator, setOperator] = useState(false);\r\n const [listOfComments, setListOfComments] = useState([]);\r\n const [page, setPage] = useState(1);\r\n\r\n useEffect(() => {\r\n setListOfComments(props.comments)\r\n // eslint-disable-next-line no-undef\r\n }, [props.refresh]);\r\n\r\n const cameraFace = {\r\n facingMode: \"user\"\r\n }\r\n\r\n const cameraBack = {\r\n facingMode: { exact: \"environment\" }\r\n }\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const handleDialogOpenComment = () => {\r\n setOpenComment(true);\r\n }\r\n\r\n const handleDialogCloseComment = () => {\r\n setOpenComment(false);\r\n }\r\n\r\n const handleDialogOpenCamera = () => {\r\n setOpenCamera(true);\r\n setOpenComment(false);\r\n }\r\n\r\n const handleDialogCloseCamera = () => {\r\n setOpenCamera(false);\r\n setOpenComment(true);\r\n }\r\n\r\n const handleDialogOpenFullscreenImage = () => {\r\n setOpenFullscreenImage(true);\r\n }\r\n\r\n const handleDialogCloseFullscreenImage = () => {\r\n setOpenFullscreenImage(false);\r\n }\r\n\r\n const Cameremode = () => {\r\n setCameraSide(!cameraSide)\r\n }\r\n\r\n const handleExtraContentClick = () => {\r\n setExtraContent(!extraContent);\r\n };\r\n\r\n const handleExpandClick = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const handlePage = (event, value) => {\r\n setPage(value);\r\n };\r\n\r\n const Increment = () => {\r\n if (props.comment) {\r\n setComment(\"\");\r\n setImage(\"\");\r\n handleDialogOpenComment();\r\n setOperator(true);\r\n }\r\n else {\r\n props.action(parseInt(props.counter) + 1, props.id);\r\n }\r\n }\r\n\r\n const Decrement = () => {\r\n if (props.comment) {\r\n setComment(\"\");\r\n setImage(\"\");\r\n handleDialogOpenComment();\r\n setOperator(false);\r\n }\r\n else {\r\n props.action(parseInt(props.counter) - 1, props.id);\r\n }\r\n }\r\n\r\n const handleSendWithComment = () => {\r\n if (operator) {\r\n props.actionWithComment(parseInt(props.counter) + 1, props.id, image.slice(23), comment);\r\n }\r\n else {\r\n props.actionWithComment(parseInt(props.counter) - 1, props.id, image.slice(23), comment);\r\n }\r\n handleDialogCloseComment();\r\n let tempListOfComments = [...listOfComments];\r\n let index = tempListOfComments.length + 1;\r\n let newListItem = { image: image, comment: comment, index: index++, insertedOn: new Date(Date.now()) };\r\n tempListOfComments.push(newListItem)\r\n setListOfComments(tempListOfComments)\r\n setPage(index - 1)\r\n }\r\n\r\n const capture = () => {\r\n const imageSrc = webcamRef.current.getScreenshot();\r\n if (imageSrc !== null) {\r\n setCaptured(true);\r\n setImage(imageSrc);\r\n }\r\n else {\r\n alert(\"No Camera Found\");\r\n }\r\n }\r\n\r\n const CameraStyle = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n position: \"absolute\",\r\n objectFit: \"cover\",\r\n top: \"0\",\r\n left: \"0\",\r\n }\r\n\r\n return (\r\n <div>\r\n <Card>\r\n <div className={classes.StyleCounter} style={{\r\n color: props.textColor,\r\n backgroundColor: `${props.color}`,\r\n }}>\r\n <div className={classes.headerDiv} >\r\n {props.comment && (listOfComments.length > 0 || listOfComments != \"\") ?\r\n <Button style={{ zIndex: \"4\", position: \"absolute\", left: \"3%\" }} size={'large'} onClick={handleExtraContentClick}>\r\n <ReportProblemIcon style={{ color: props.textColor }} />\r\n </Button>\r\n : <React.Fragment></React.Fragment>\r\n }\r\n <h2 className={classes.h2style}>{props.description}</h2>\r\n <img className={classes.imageStyle} src={Tally} alt=\"\" />\r\n </div>\r\n <Divider ></Divider>\r\n <div className={classes.counterDiv} style={{ backgroundColor: LightenDarkenColor(props.color, 20) }}>\r\n <p style={{ fontSize: \"50px\" }}>{props.counter}</p>\r\n </div>\r\n <Divider ></Divider>\r\n <div className={classes.StyleDiv}>\r\n <Button style={{ color: props.textColor, width: \"100%\" }} >\r\n <RemoveIcon fontSize=\"large\" onClick={Decrement} style={{ color: props.textColor, width: \"100%\" }} />\r\n </Button>\r\n <Divider orientation=\"vertical\"></Divider>\r\n <Button style={{ color: props.textColor, width: \"100%\" }} >\r\n <AddIcon fontSize=\"large\" onClick={Increment} style={{ color: props.textColor, width: \"100%\" }} />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <Dialog\r\n fullScreen\r\n open={openCamera}\r\n onClose={handleDialogCloseCamera}\r\n maxWidth={\"lg\"}\r\n >\r\n <DialogTitle style={{ background: \"rgba(255, 255, 255, .0)\", zIndex: \"1\" }}>\r\n {\"Camera\"}\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogCloseCamera} size=\"large\">\r\n <CloseIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider></Divider>\r\n <DialogContent>\r\n {\r\n cameraSide === true ?\r\n <Webcam\r\n style={CameraStyle}\r\n audio={false}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n videoConstraints={cameraBack}\r\n ></Webcam> :\r\n <Webcam\r\n style={CameraStyle}\r\n audio={false}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n videoConstraints={cameraFace}\r\n ></Webcam>\r\n }\r\n </DialogContent>\r\n <Divider></Divider>\r\n <DialogActions style={{ justifyContent: \"center\", background: \"rgba(255, 255, 255, .25)\", zIndex: \"1\" }}>\r\n <IconButton onClick={handleExpandClick} size=\"large\">\r\n {captured ?\r\n <img style={{ margin: \"0px\", width: \"2rem\", height: \"2rem\", borderRadius: \"50%\" }} src={image}></img>\r\n :\r\n <PhotoIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n }\r\n </IconButton>\r\n <IconButton onClick={capture} size=\"large\">\r\n <CircleIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n </IconButton>\r\n <IconButton onClick={Cameremode} size=\"large\">\r\n <CameraswitchIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n </IconButton>\r\n </DialogActions>\r\n <Divider style={{ background: \"rgb(0, 0, 0)\", zIndex: \"2\" }}></Divider>\r\n <Collapse style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\" }} in={expanded} timeout=\"auto\" unmountOnExit>\r\n <DialogContent style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\" }}>\r\n <img\r\n style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\", maxWidth: \"100%\", maxHeight: \"calc(100vh - 64px)\" }}\r\n src={image}></img>\r\n </DialogContent>\r\n </Collapse>\r\n </Dialog>\r\n\r\n <Dialog\r\n fullWidth\r\n open={openComment}\r\n onClose={handleDialogCloseComment}>\r\n <DialogTitle>\r\n {\"Comment\"}\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogCloseComment} size=\"large\">\r\n <CloseIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider ></Divider>\r\n <div className={classes.StyleDivComment}>\r\n <TextField multiline\r\n rows={8}\r\n style={{ marginBottom: \"10px\", margin: \"10px\", width: \"87%\" }}\r\n label={comment ? \" \" : \"Make a comment.\"}\r\n InputLabelProps={{ shrink: false }} variant=\"outlined\"\r\n onChange={(event) => setComment(event.target.value)}\r\n value={comment}\r\n InputProps={{\r\n endAdornment: (\r\n <InputAdornment style={{ marginTop: \"160px\" }}>\r\n {image !== \"\" ?\r\n <div>\r\n <IconButton onClick={handleDialogOpenFullscreenImage}>\r\n <img style={{ margin: \"0px\", width: \"2rem\", height: \"2rem\", borderRadius: \"50%\" }} src={image}></img>\r\n </IconButton>\r\n <IconButton onClick={handleDialogOpenCamera} >\r\n <PhotoCameraIcon />\r\n </IconButton>\r\n </div>\r\n :\r\n <div>\r\n <IconButton onClick={handleDialogOpenCamera} >\r\n <PhotoCameraIcon />\r\n </IconButton>\r\n </div>\r\n }\r\n </InputAdornment>)\r\n }} />\r\n <IconButton style={{ marginBottom: \"12px\" }} onClick={handleSendWithComment} size=\"large\">\r\n <SendIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </div>\r\n </Dialog>\r\n\r\n\r\n <Dialog\r\n fullScreen\r\n open={openFullscreenImage}\r\n onClose={handleDialogCloseFullscreenImage}>\r\n <DialogTitle style={{ background: \"rgba(0, 0, 0, .0)\", zIndex: \"1\" }}>\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogCloseFullscreenImage} size=\"large\">\r\n <CloseIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider ></Divider>\r\n <DialogContent>\r\n <img style={CameraStyle} src={image}></img>\r\n </DialogContent>\r\n </Dialog>\r\n\r\n </Card>\r\n {extraContent ? <div style={{ position: \"relative\" }}>\r\n <div style={{ position: \"absolute\", top: \"1\", width: \"100%\", zIndex: \"10\" }}>\r\n <Collapse in={extraContent} timeout=\"auto\" unmountOnExit >\r\n <Card >\r\n {listOfComments.filter(list => list.index === page).map(x =>\r\n <List sx={{ width: '100%', overflow: \"hidden\" }}>\r\n <ListItem>\r\n <Typography style={{ width: \"70%\" }} >{props.description + \" Comment: \" + x.index}</Typography>\r\n <Typography style={{ width: \"30%\", fontWeight: \"bold\" }}>{parseNewDateToDDMMYYY(new Date(x.insertedOn))}</Typography>\r\n </ListItem>\r\n <Divider></Divider>\r\n {x.image !== \"\" && x.image !== null ?\r\n <ListItem style={{ marginBottom: \"10px\", display: \"flex\", justifyContent: \"center\" }}>\r\n <img src={x.image} style={{ maxWidth: \"100%\", maxHeight: \"calc(40vh - 16px)\", borderRadius: \"15px\" }} alt=\"\" />\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n {x.comment !== \"\" ?\r\n <ListItem>\r\n <Typography style={{ hyphens: \"auto\", wordWrap: \"break-word\", overflowWrap: \"anywhere\" }}>{x.comment}</Typography>\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n {x.comment === \"\" && (x.image === \"\" || x.image === null) ?\r\n <ListItem>\r\n <Typography style={{ color: \"red\" }} >No recorded comment.</Typography>\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n <Divider></Divider>\r\n <ListItem style={{ justifyContent: 'center' }}>\r\n <Pagination page={page} variant=\"outlined\" size=\"small\" siblingCount={0} count={listOfComments.length} onChange={handlePage} />\r\n </ListItem>\r\n </List>\r\n )\r\n }\r\n </Card>\r\n </Collapse>\r\n </div>\r\n </div> :\r\n <React.Fragment></React.Fragment>}\r\n </div>\r\n )\r\n}\r\nexport default Counter;\r\n\r\nconst useStyles = makeStyles({\r\n headerDiv: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '33%',\r\n position: 'relative'\r\n },\r\n h2style: {\r\n margin: '0',\r\n zIndex: '2',\r\n textOverflow: 'ellipsis',\r\n maxWidth: '200px',\r\n },\r\n StyleDiv: {\r\n height: '33%',\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-evenly\",\r\n alignItems: 'center',\r\n },\r\n StyleDivComment: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'flex-end',\r\n },\r\n counterDiv: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n height: '34%',\r\n alignItems: 'center',\r\n\r\n },\r\n fabStyle: {\r\n position: 'absolute',\r\n left: '3%'\r\n },\r\n imageStyle: {\r\n position: 'absolute',\r\n right: '3%',\r\n opacity: '50%',\r\n width: '50px'\r\n },\r\n StyleCounter: {\r\n overflow: 'hidden',\r\n backgroundRepeat: \"no-repeat !important\",\r\n backgroundSize: \"10rem 10rem\",\r\n backgroundPosition: \"center\",\r\n height: \"12rem\"\r\n }\r\n\r\n});","export default __webpack_public_path__ + \"static/media/timerStyle.5393a8f9.svg\";","import React, { useEffect } from 'react';\r\nimport { useState, useRef } from 'react';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\r\nimport PauseIcon from '@mui/icons-material/Pause';\r\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\r\nimport Stack from '@mui/material/Stack';\r\nimport StopwatchIcon from './timerStyle.svg';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { LightenDarkenColor } from 'lighten-darken-color';\r\nimport Card from '@mui/material/Card';\r\n\r\nfunction Stopwatch(props) {\r\n\r\n const classes = useStyles();\r\n const mounted = useRef(true);\r\n const [extraContent, setExtraContent] = useState(false)\r\n const [timerStingsje, setTimerString] = useState(null)\r\n const [started, setStarted] = useState(false)\r\n const [startTime, setStartTime] = useState(null)\r\n const countRef = useRef(null)\r\n\r\n useEffect(() => {\r\n\r\n var s = (props.stopwatch.value * 1000)\r\n\r\n function pad(number) {\r\n if (number < 10) {\r\n return number = \"0\" + String(number)\r\n }\r\n else {\r\n return number = String(number)\r\n }\r\n }\r\n\r\n var ms = s % 1000;\r\n s = (s - ms) / 1000;\r\n var secs = s % 60;\r\n s = (s - secs) / 60;\r\n var mins = s % 60;\r\n s = (s - mins) / 60\r\n var hrs = s % 24;\r\n s = (s - hrs) / 24\r\n\r\n if (mounted.current) {\r\n setTimerString(pad(hrs) + ':' + pad(mins) + ':' + pad(secs));\r\n }\r\n\r\n }, [props.refresh]);\r\n\r\n const handleStart = () => {\r\n setStarted(true)\r\n setStartTime(new Date())\r\n\r\n if (!started) {\r\n let startTime = new Date()\r\n countRef.current = (setInterval(() => {\r\n\r\n var s = (new Date() - startTime + parseInt(props.stopwatch.value) * 1000)\r\n\r\n function pad(number) {\r\n if (number < 10) {\r\n return number = \"0\" + String(number)\r\n }\r\n else {\r\n return number = String(number)\r\n }\r\n }\r\n\r\n var ms = s % 1000;\r\n s = (s - ms) / 1000;\r\n var secs = s % 60;\r\n s = (s - secs) / 60;\r\n var mins = s % 60;\r\n s = (s - mins) / 60\r\n var hrs = s % 24;\r\n s = (s - hrs) / 24\r\n\r\n if (mounted.current) {\r\n setTimerString(pad(hrs) + ':' + pad(mins) + ':' + pad(secs));\r\n }\r\n\r\n }\r\n , 1000\r\n ))\r\n\r\n props.startAction(props.stopwatch.value, props.id, new Date());\r\n }\r\n }\r\n\r\n const handleExtraContentClick = () => {\r\n setExtraContent(!extraContent);\r\n };\r\n\r\n const handlePause = () => {\r\n if (started) {\r\n setStarted(false)\r\n clearInterval(countRef.current)\r\n props.stopAction(Math.floor(parseInt(props.stopwatch.value) + (new Date() - startTime) / 1000), props.id, new Date(), false);\r\n // props.action(formatDateTime(), props.id);\r\n }\r\n }\r\n\r\n const handleReset = () => {\r\n setStarted(false)\r\n clearInterval(countRef.current)\r\n setTimerString(\"00:00:00\")\r\n props.stopAction(Math.floor(parseInt(props.stopwatch.value) + (new Date() - startTime) / 1000), props.id, new Date(), true);\r\n }\r\n\r\n return (\r\n <Card>\r\n <div className={classes.StyleStopwatch} style={{\r\n color: props.textColor,\r\n backgroundColor: `${props.color}`\r\n }}>\r\n <div className={classes.headerDiv} >\r\n <h2 className={classes.h2style}>{props.description}</h2>\r\n <img className={classes.imageStyle} src={StopwatchIcon} alt=\"\" />\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.stopwatchDev} style={{ backgroundColor: LightenDarkenColor(props.color, 20) }}>\r\n <p className={classes.Style}>{timerStingsje}</p>\r\n </div>\r\n <Divider></Divider>\r\n <Stack direction=\"row\" className={classes.buttonDiv}\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n spacing={1}>\r\n <IconButton size={'large'} className={classes.ResetStyle} onClick={handleReset} style={{ color: props.textColor}} >\r\n <RestartAltIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n <IconButton size={'large'} className={classes.PauseStyle} onClick={handlePause} style={{ color: props.textColor}}>\r\n <PauseIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n <IconButton size={'large'} className={classes.StartStyle} onClick={handleStart} style={{color: props.textColor}}>\r\n <PlayArrowIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Stack>\r\n </div>\r\n </Card>\r\n );\r\n}\r\nexport default Stopwatch;\r\n\r\nconst useStyles = makeStyles({\r\n\r\n headerDiv: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '33%',\r\n },\r\n h2style: {\r\n margin: '0',\r\n zIndex: '2',\r\n textOverflow: 'ellipsis',\r\n maxWidth: '200px',\r\n },\r\n Style: {\r\n borderRadius: \"50px\",\r\n textAlign: \"center\",\r\n fontSize: \"2.5rem\",\r\n margin: \"0\",\r\n },\r\n imageStyle: {\r\n position: 'absolute',\r\n right: '3%',\r\n opacity: '50%',\r\n width: '50px'\r\n },\r\n buttonDiv: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '33%',\r\n },\r\n StartStyle: {\r\n background: \"#4CAF50\",\r\n color: \"white\",\r\n textAlign: \"center\",\r\n marginLeft: \"1rem\",\r\n marginRight: \"1rem\",\r\n },\r\n PauseStyle: {\r\n backgroundColor: \"#C3996B\",\r\n color: \"white\",\r\n textAlign: \"center\",\r\n marginLeft: \"1rem\",\r\n marginRight: \"1rem\",\r\n },\r\n stopwatchDev: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n height: '34%',\r\n alignItems: 'center',\r\n },\r\n ResetStyle: {\r\n background: \"#ff4c54\",\r\n color: \"white\",\r\n textAlign: \"center\",\r\n marginLeft: \"1rem\",\r\n marginRight: \"1rem\",\r\n },\r\n StyleStopwatch: {\r\n overflow: 'hidden',\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"10rem 10rem\",\r\n backgroundPosition: \"center\",\r\n height: \"12rem\"\r\n }\r\n});","export default __webpack_public_path__ + \"static/media/Freetext.6f9f2377.svg\";","import React from 'react';\r\nimport { useState } from 'react';\r\nimport Divider from '@mui/material/Divider';\r\nimport { TextField } from '@mui/material';\r\nimport TextIcon from './Freetext.svg';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { LightenDarkenColor } from 'lighten-darken-color';\r\nimport Card from '@mui/material/Card';\r\n\r\nfunction FreeText(props) {\r\n \r\n function getRGB(c) {\r\n return parseInt(c, 16) || c\r\n }\r\n\r\n function getsRGB(c) {\r\n return getRGB(c) / 255 <= 0.03928\r\n ? getRGB(c) / 255 / 12.92\r\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4)\r\n }\r\n\r\n function getLuminance(hexColor) {\r\n if (hexColor.includes('#')) {\r\n return (\r\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\r\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\r\n 0.0722 * getsRGB(hexColor.substr(-2))\r\n )\r\n } else {\r\n return (\r\n 0.2126 * hexColor +\r\n 0.7152 * hexColor +\r\n 0.0722 * hexColor\r\n )\r\n }\r\n\r\n }\r\n\r\n function getContrast(f, b) {\r\n const L1 = getLuminance(f)\r\n const L2 = getLuminance(b)\r\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05)\r\n }\r\n\r\n function getTextColor(bgColor) {\r\n\r\n if (bgColor === null) {\r\n return '#ffffff';\r\n } else {\r\n const whiteContrast = getContrast(bgColor, '#ffffff')\r\n const blackContrast = getContrast(bgColor, '#000000')\r\n return whiteContrast > blackContrast ? '#ffffff' : '#000000';\r\n\r\n }\r\n\r\n }\r\n\r\n const classes = useStyles();\r\n const [extraContent, setExtraContent] = useState(false)\r\n\r\n return (\r\n <Card>\r\n <div className={classes.freeText} style={{\r\n color: props.textColor,\r\n backgroundColor: `${props.color}`\r\n }}>\r\n <div className={classes.headerDiv}>\r\n <h2 className={classes.h2style}>{props.description}</h2>\r\n <img className={classes.imageStyle} src={TextIcon} alt=\"\" />\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.textDiv} style={{\r\n backgroundColor: LightenDarkenColor(props.color, 20)\r\n }}>\r\n <TextField InputProps={{style: {color: getTextColor(props.color)}}} onChange={(event) => props.setText(event.target.value, props.id)} autoFocus margin=\"dense\" id={props.description} type=\"string\" fullWidth value={props.text !== null ? props.text : ''} variant=\"standard\" />\r\n </div>\r\n </div>\r\n </Card>\r\n );\r\n}\r\n\r\n\r\nexport default FreeText;\r\n\r\nconst useStyles = makeStyles({\r\n\r\n freeText: {\r\n overflow: 'hidden',\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"10rem 10rem\",\r\n backgroundPosition: \"center\",\r\n height: \"12rem\",\r\n\r\n },\r\n headerDiv: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '33%',\r\n },\r\n h2style: {\r\n margin: '0',\r\n zIndex: '2',\r\n textOverflow: 'ellipsis',\r\n maxWidth: '200px',\r\n },\r\n imageStyle: {\r\n position: 'absolute',\r\n right: '3%',\r\n filter: 'contrast(80%)',\r\n opacity: '50%'\r\n },\r\n textDiv: {\r\n paddingLeft: '15px',\r\n paddingRight: '15px',\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n height: '34%',\r\n alignItems: 'center',\r\n }\r\n\r\n});","export default __webpack_public_path__ + \"static/media/DataList.1b480f64.svg\";","import React, { useEffect, useState } from 'react';\r\nimport Divider from '@mui/material/Divider';\r\nimport Select from '@mui/material/Select';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { LightenDarkenColor } from 'lighten-darken-color';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport Card from '@mui/material/Card';\r\nimport DataListIcon from './DataList.svg';\r\n\r\nfunction DataList(props) {\r\n const [datalistValue, setDatalistValue] = useState(\"\")\r\n const [listItems, setListItems] = useState([]);\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n dataService.getListItems(props.dataListId).then(result => {\r\n setListItems(result.sort((a, b) => a.name.localeCompare(b.name)));\r\n });\r\n setDatalistValue(\"\")\r\n // eslint-disable-next-line \r\n }, [props.refresh])\r\n \r\n function getRGB(c) {\r\n return parseInt(c, 16) || c\r\n }\r\n\r\n function getsRGB(c) {\r\n return getRGB(c) / 255 <= 0.03928\r\n ? getRGB(c) / 255 / 12.92\r\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4)\r\n }\r\n\r\n function getLuminance(hexColor) {\r\n if (hexColor.includes('#')) {\r\n return (\r\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\r\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\r\n 0.0722 * getsRGB(hexColor.substr(-2))\r\n )\r\n } else {\r\n return (\r\n 0.2126 * hexColor +\r\n 0.7152 * hexColor +\r\n 0.0722 * hexColor\r\n )\r\n }\r\n\r\n }\r\n\r\n function getContrast(f, b) {\r\n const L1 = getLuminance(f)\r\n const L2 = getLuminance(b)\r\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05)\r\n }\r\n\r\n function getTextColor(bgColor) {\r\n\r\n if (bgColor === null) {\r\n return '#ffffff';\r\n } else {\r\n const whiteContrast = getContrast(bgColor, '#ffffff')\r\n const blackContrast = getContrast(bgColor, '#000000')\r\n return whiteContrast > blackContrast ? '#ffffff' : '#000000';\r\n\r\n }\r\n\r\n }\r\n\r\n const handleSelect = (e) => {\r\n setDatalistValue(e.target.value)\r\n props.setDataValue(e.target.value, props.id)\r\n }\r\n\r\n return (\r\n <Card>\r\n <div className={classes.freeText} style={{ color: props.textColor, backgroundColor: `${props.color}` }}>\r\n <div className={classes.headerDiv} style={{ color: `${props.textColor} !important` }}>\r\n <h2 className={classes.h2style} style={{ color: `${props.textColor} !important` }}>{props.description}</h2>\r\n <img className={classes.imageStyle} src={DataListIcon} alt=\"\" />\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.textDiv} style={{ color: props.textColor, backgroundColor: LightenDarkenColor(props.color, 20) }}>\r\n <Select\r\n style={{color: getTextColor(props.color)}}\r\n value={datalistValue}\r\n onChange={handleSelect}\r\n fullWidth >\r\n {listItems.map((row, index) => (\r\n <MenuItem value={row.name} index={index} >{row.name}</MenuItem>\r\n ))}\r\n </Select>\r\n </div>\r\n <Divider></Divider>\r\n </div>\r\n </Card >\r\n );\r\n}\r\n\r\n\r\nexport default DataList;\r\n\r\nconst useStyles = makeStyles({\r\n\r\n freeText: {\r\n overflow: 'hidden',\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"10rem 10rem\",\r\n backgroundPosition: \"center\",\r\n height: \"12rem\",\r\n\r\n },\r\n headerDiv: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '33%',\r\n },\r\n h2style: {\r\n margin: '0',\r\n zIndex: '2',\r\n textOverflow: 'ellipsis',\r\n maxWidth: '200px',\r\n },\r\n imageStyle: {\r\n position: 'absolute',\r\n right: '3%',\r\n filter: 'contrast(80%)',\r\n opacity: '50%',\r\n width: '50px'\r\n },\r\n textDiv: {\r\n paddingLeft: '15px',\r\n paddingRight: '15px',\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n height: '34%',\r\n alignItems: 'center',\r\n }\r\n\r\n});","export default __webpack_public_path__ + \"static/media/camera.aed164bc.svg\";","import React, { useState, useEffect } from 'react';\r\nimport Divider from '@mui/material/Divider';\r\nimport cameraIcon from './camera.svg';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { LightenDarkenColor } from 'lighten-darken-color';\r\nimport Webcam from \"react-webcam\";\r\nimport CameraswitchIcon from '@mui/icons-material/Cameraswitch';\r\nimport CircleIcon from '@mui/icons-material/Circle';\r\nimport { IconButton } from '@material-ui/core';\r\nimport Card from '@mui/material/Card';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport PhotoIcon from '@mui/icons-material/Photo';\r\nimport PanoramaFishEyeRoundedIcon from '@mui/icons-material/PanoramaFishEyeRounded';\r\nimport Button from '@mui/material/Button';\r\nimport SendIcon from '@mui/icons-material/Send';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport ButtonNormalText from '../../Shared/Buttons/ButtonNormalText';\r\nimport PhotoCameraIcon from '@mui/icons-material/PhotoCamera';\r\nimport ReportProblemIcon from '@mui/icons-material/ReportProblem';\r\nimport Typography from '@mui/material/Typography';\r\nimport PropTypes from 'prop-types';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport Pagination from '@mui/material/Pagination';\r\nimport TextField from '@mui/material/TextField';\r\nimport { parseNewDateToDDMMYYY } from '../../../Utils/dateHelper';\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n <div\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`vertical-tabpanel-${index}`}\r\n aria-labelledby={`vertical-tab-${index}`}\r\n {...other}\r\n >\r\n {value === index && (\r\n <div style={{ paddingLeft: \"10px\", paddingTop: \"10px\", paddingRight: \"10px\" }}>\r\n <Typography>{children}</Typography>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nTabPanel.propTypes = {\r\n children: PropTypes.node,\r\n index: PropTypes.number.isRequired,\r\n value: PropTypes.number.isRequired,\r\n};\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `simple-tab-${index}`,\r\n 'aria-controls': `simple-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nfunction Camera(props) {\r\n\r\n const [openImage, setOpenImage] = useState(false);\r\n const [expanded, setExpanded] = useState(false);\r\n const [captured, setCaptured] = useState(false);\r\n const [lastImages, setLastImages] = useState([]);\r\n const [value, setValue] = useState(0);\r\n const [page, setPage] = useState(1);\r\n const [selectedImage, setSelectedImage] = useState(null);\r\n const [image, setImage] = useState(\"\")\r\n const [cameraSide, setCameraSide] = useState(true)\r\n const webcamRef = React.useRef(null);\r\n const current = new Date();\r\n const date = parseNewDateToDDMMYYY(current);\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(false);\r\n const [extraContent, setExtraContent] = useState(false)\r\n const [comment, setComment] = useState(\"\");\r\n const [openComment, setOpenComment] = useState(false);\r\n const [listOfComments, setListOfComments] = useState([]);\r\n\r\n useEffect(() => {\r\n setListOfComments(props.comments)\r\n // eslint-disable-next-line no-undef\r\n }, []);\r\n const cameraFace = {\r\n facingMode: \"user\"\r\n }\r\n\r\n const cameraBack = {\r\n facingMode: { exact: \"environment\" }\r\n }\r\n\r\n const CameraStyle = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n position: \"absolute\",\r\n objectFit: \"cover\",\r\n top: \"0\",\r\n left: \"0\",\r\n }\r\n\r\n const handlePage = (event, value) => {\r\n setPage(value);\r\n };\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const handleDialogOpenComment = () => {\r\n setOpenComment(true);\r\n }\r\n\r\n const handleDialogCloseComment = () => {\r\n setOpenComment(false);\r\n }\r\n\r\n const Cameremode = () => {\r\n setCameraSide(!cameraSide)\r\n }\r\n\r\n const handleDialogOpen = () => {\r\n setOpen(true);\r\n }\r\n\r\n const handleDialogClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n const handleExpandClick = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const handleOpenImageOpen = (id) => {\r\n setOpenImage(true)\r\n setSelectedImage(id)\r\n };\r\n\r\n const handleOpenImageClose = () => {\r\n setOpenImage(false)\r\n };\r\n\r\n const handleExtraContentClick = () => {\r\n setExtraContent(!extraContent);\r\n };\r\n\r\n const GenerateID = () => {\r\n let tempArray = [...lastImages];\r\n const ids = tempArray.map(object => {\r\n return object.id;\r\n });\r\n const max = Math.max(...ids);\r\n if (tempArray.length === 0) {\r\n return 1;\r\n }\r\n else {\r\n let index = max;\r\n index++;\r\n return index;\r\n }\r\n }\r\n\r\n const capture = () => {\r\n const imageSrc = webcamRef.current.getScreenshot();\r\n if (imageSrc !== null) {\r\n setCaptured(true);\r\n setImage(imageSrc);\r\n let tempImages = [...lastImages]\r\n let ImageObject = { id: GenerateID(), image: imageSrc }\r\n if (tempImages.length < 3) {\r\n tempImages.push(ImageObject);\r\n setSelectedImage(ImageObject.id)\r\n setLastImages(tempImages)\r\n }\r\n else {\r\n tempImages.push(ImageObject);\r\n tempImages.shift();\r\n setSelectedImage(ImageObject.id)\r\n setLastImages(tempImages)\r\n }\r\n if (props.comment) {\r\n setComment(\"\");\r\n handleDialogOpenComment();\r\n }\r\n else {\r\n dataService.newMediaImage(date, imageSrc.slice(23), props.id, );\r\n }\r\n }\r\n else {\r\n alert(\"No Camera Found\");\r\n }\r\n }\r\n\r\n const handleSendWithComment = () => {\r\n\r\n dataService.newMediaImageWithComment(date, image.slice(23), props.id, comment);\r\n handleDialogCloseComment();\r\n let tempListOfComments = [...listOfComments];\r\n let index = tempListOfComments.length + 1;\r\n let newListItem = { comment: comment, index: index++, insertedOn: new Date(Date.now()) };\r\n tempListOfComments.push(newListItem)\r\n setListOfComments(tempListOfComments)\r\n setPage(index - 1)\r\n }\r\n\r\n return (\r\n <div>\r\n <Card>\r\n <div className={classes.freeText} style={{\r\n color: props.textColor,\r\n backgroundColor: `${props.color}`,\r\n }}>\r\n <div className={classes.headerDiv}>\r\n {props.comment && listOfComments.length > 0 ?\r\n <Button style={{ zIndex: \"4\", position: \"absolute\", left: \"3%\" }} size={'large'} onClick={handleExtraContentClick}>\r\n <ReportProblemIcon style={{ color: props.textColor }} />\r\n </Button>\r\n : <React.Fragment></React.Fragment>\r\n }\r\n <h2 className={classes.h2style}>{props.description}</h2>\r\n <img className={classes.imageStyle} src={cameraIcon} alt=\"\" />\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.textDiv} style={{\r\n backgroundColor: LightenDarkenColor(props.color, 20)\r\n }}>\r\n <IconButton onClick={handleDialogOpen} style={{ color: props.textColor }}>\r\n <PhotoCameraIcon fontSize=\"large\" color='white' />\r\n </IconButton>\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.StyleDiv}>\r\n {lastImages.length > 0 ?\r\n lastImages.map(x =>\r\n <IconButton onClick={() => handleOpenImageOpen(x.id)} size=\"large\">\r\n <img style={{ margin: \"0px\", width: \"2rem\", height: \"2rem\", borderRadius: \"50%\" }} src={x.image}></img>\r\n </IconButton>\r\n ) :\r\n <React.Fragment></React.Fragment>\r\n }\r\n </div>\r\n </div>\r\n\r\n <Dialog\r\n open={openImage}\r\n onClose={handleOpenImageClose}\r\n maxWidth={\"lg\"}\r\n >\r\n <DialogTitle>\r\n {\"Image\"}\r\n </DialogTitle>\r\n <DialogContent>\r\n {selectedImage && <img style={{ maxWidth: \"100%\", maxHeight: \"calc(100vh - 64px)\" }} src={lastImages.length > 0 ? lastImages.find(x => x.id === selectedImage).image : \"\"}></img>}\r\n </DialogContent>\r\n <DialogActions style={{ justifyContent: \"center\" }}>\r\n <ButtonNormalText content={\"Close\"} onClick={handleOpenImageClose} size=\"large\">\r\n </ButtonNormalText>\r\n </DialogActions>\r\n </Dialog>\r\n\r\n <Dialog\r\n fullWidth\r\n open={openComment}\r\n onClose={handleDialogCloseComment}>\r\n <DialogTitle>\r\n {\"Comment\"}\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogCloseComment} size=\"large\">\r\n <CloseIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider ></Divider>\r\n <div className={classes.StyleDivComment}>\r\n <TextField multiline\r\n rows={8}\r\n style={{ marginBottom: \"10px\", margin: \"10px\", width: \"87%\" }}\r\n label={comment ? \" \" : \"Make a comment.\"}\r\n InputLabelProps={{ shrink: false }} variant=\"outlined\"\r\n onChange={(event) => setComment(event.target.value)}\r\n value={comment} />\r\n <IconButton style={{ marginBottom: \"12px\" }} onClick={handleSendWithComment} size=\"large\">\r\n <SendIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </div>\r\n </Dialog>\r\n\r\n <Dialog\r\n fullScreen\r\n open={open}\r\n onClose={handleDialogClose}\r\n maxWidth={\"lg\"}\r\n >\r\n <DialogTitle style={{ background: \"rgba(255, 255, 255, .0)\", zIndex: \"1\", boxShadow: 2, color: 'white' }}>\r\n {\"Camera\"}\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogClose} size=\"large\">\r\n <CloseIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"white\", boxShadow: 2 }} />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider></Divider>\r\n <DialogContent>\r\n {\r\n cameraSide === true ?\r\n <Webcam\r\n style={CameraStyle}\r\n audio={false}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n videoConstraints={cameraBack}\r\n ></Webcam> :\r\n <Webcam\r\n style={CameraStyle}\r\n audio={false}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n videoConstraints={cameraFace}\r\n ></Webcam>\r\n }\r\n </DialogContent>\r\n <Divider></Divider>\r\n <DialogActions style={{ justifyContent: \"center\", background: \"rgba(255, 255, 255, .25)\", zIndex: \"1\" }}>\r\n <IconButton onClick={handleExpandClick} size=\"large\" style={{ fontSize: '50px', marginRight: '15px' }}>\r\n {captured ?\r\n <img style={{ margin: \"0px\", width: \"2rem\", height: \"2rem\", borderRadius: \"50%\" }} src={image}></img>\r\n :\r\n <PhotoIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"white\" }} />\r\n }\r\n </IconButton>\r\n <IconButton onClick={capture} size=\"large\" style={{ border: '1px solid white', fontSize: '50px', marginRight: '15px' }} className={classes.takePictureIcon}>\r\n <CircleIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"white\" }} />\r\n </IconButton>\r\n <IconButton onClick={Cameremode} size=\"large\" style={{ fontSize: '50px' }}>\r\n <CameraswitchIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"white\" }} />\r\n </IconButton>\r\n </DialogActions>\r\n <Divider style={{ background: \"rgb(0, 0, 0)\", zIndex: \"2\" }}></Divider>\r\n <Collapse style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\" }} in={expanded} timeout=\"auto\" unmountOnExit>\r\n <DialogContent style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\" }}>\r\n <img style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\", maxWidth: \"100%\", maxHeight: \"calc(100vh - 64px)\" }}\r\n src={image}></img>\r\n </DialogContent>\r\n </Collapse>\r\n </Dialog>\r\n </Card>\r\n {\r\n extraContent ? <div style={{ position: \"relative\" }}>\r\n <div style={{ position: \"absolute\", top: \"1\", width: \"100%\", zIndex: \"10\" }}>\r\n <Collapse in={extraContent} timeout=\"auto\" unmountOnExit >\r\n <Card >\r\n {listOfComments.filter(list => list.index === page).map(x =>\r\n <List sx={{ width: '100%', overflow: \"hidden\" }}>\r\n <ListItem>\r\n <Typography style={{ width: \"70%\" }} >{props.description + \" Comment: \" + x.index}</Typography>\r\n <Typography style={{ width: \"30%\", fontWeight: \"bold\" }}>{parseNewDateToDDMMYYY(new Date(x.insertedOn))}</Typography>\r\n </ListItem>\r\n <Divider></Divider>\r\n {x.comment !== \"\" ?\r\n <ListItem>\r\n <Typography style={{ hyphens: \"auto\", wordWrap: \"break-word\", overflowWrap: \"anywhere\" }}>{x.comment}</Typography>\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n {x.comment === \"\" && (x.image === \"\" || x.image === null) ?\r\n <ListItem>\r\n <Typography style={{ color: \"red\" }} >No recorded comment.</Typography>\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n <Divider></Divider>\r\n <ListItem style={{ justifyContent: 'center' }}>\r\n <Pagination page={page} variant=\"outlined\" size=\"small\" siblingCount={0} count={listOfComments.length} onChange={handlePage} />\r\n </ListItem>\r\n </List>\r\n )\r\n }\r\n </Card>\r\n </Collapse>\r\n </div>\r\n </div> :\r\n <React.Fragment></React.Fragment>\r\n }\r\n </div >\r\n );\r\n}\r\n\r\n\r\nexport default Camera;\r\n\r\nconst useStyles = makeStyles({\r\n freeText: {\r\n overflow: 'hidden',\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"10rem 10rem\",\r\n backgroundPosition: \"center\",\r\n height: \"12rem\",\r\n },\r\n takePictureIcon:{\r\n padding: '0px !important'\r\n },\r\n headerDiv: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '33%',\r\n },\r\n h2style: {\r\n margin: '0',\r\n zIndex: '2',\r\n textOverflow: 'ellipsis',\r\n maxWidth: '200px',\r\n },\r\n StyleDiv: {\r\n height: '33%',\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-evenly\",\r\n alignItems: 'center',\r\n },\r\n StyleDivComment: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'flex-end',\r\n },\r\n imageStyle: {\r\n position: 'absolute',\r\n right: '3%',\r\n filter: 'contrast(80%)',\r\n opacity: '50%',\r\n width: '50px'\r\n },\r\n textDiv: {\r\n paddingLeft: '15px',\r\n paddingRight: '15px',\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n height: '34%',\r\n alignItems: 'center',\r\n }\r\n});","import React from 'react';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Dialog from '@material-ui/core/Dialog';\r\n\r\nexport default function BaseDialog(props) {\r\n\r\n const classes = useStyles(); \r\n\r\n return (\r\n\r\n <Dialog className={classes.dialogContainer}\r\n open={props.dialogOpen}\r\n aria-labelledby=\"draggable-dialog-title\"\r\n onClose={props.closeDialog}\r\n >\r\n {props.children} \r\n\r\n </Dialog>\r\n );\r\n}\r\n\r\n\r\nconst useStyles = makeStyles(() => ({\r\n\r\n dialogContainer: {\r\n margin: \"auto\",\r\n '& .MuiDialog-paper': {\r\n maxWidth: \"500px\",\r\n },\r\n },\r\n\r\n}));\r\n","import React from 'react';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nexport default function ButtonAction(props) {\r\n\r\n const classes = useStyles(); \r\n\r\n return (\r\n <button className={classes.actionButton} disabled={props.disabled} onClick={() => props.action()}>{props.text}</button>\r\n );\r\n}\r\n\r\n\r\nconst useStyles = makeStyles(() => ({\r\n actionButton: {\r\n paddingRight: '15px',\r\n paddingLeft: '15px',\r\n\r\n border: \"none\",\r\n outline: \"none\",\r\n cursor: \"pointer\",\r\n margin: \"10px\",\r\n color: \"white\",\r\n height: \"30px\",\r\n backgroundColor:'#C3996B',\r\n fontWeight: \"bold\",\r\n fontFamily: \"Lato, sans-serif\",\r\n\r\n }\r\n\r\n}));","import React from 'react';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nexport default function ButtonClose(props) {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <button className={classes.closeButton} onClick={() => props.closeDialog()}>{props.text}</button>\r\n );\r\n}\r\n\r\n\r\nconst useStyles = makeStyles(() => ({\r\n\r\n closeButton: {\r\n border: \"1px solid #E8E8E8\",\r\n outline:\"none\",\r\n cursor: \"pointer\",\r\n backgroundColor: \"white\",\r\n margin: \"10px\",\r\n fontFamily: \"Lato, sans-serif\",\r\n height:\"30px\",\r\n\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BaseDialog from './BaseDialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport ButtonAction from '../Buttons/ButtonAction';\r\nimport ButtonClose from '../Buttons/ButtonClose';\r\n\r\nexport default function MessageDialog(props) {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n <BaseDialog\r\n dialogOpen={props.dialogOpen}\r\n closeDialog={props.closeDialog}\r\n >\r\n <DialogTitle className={classes.dialogTitle} id=\"draggable-dialog-title\">\r\n {props.messageTitle}\r\n </DialogTitle>\r\n <DialogContent className={classes.dialogContent}>\r\n {props.messageContent}\r\n </DialogContent>\r\n <DialogActions>\r\n <div className={classes.buttons}>\r\n {props.buttonCount === 1 ?\r\n <ButtonAction text={props.buttonText} action={props.action}></ButtonAction>\r\n :\r\n <React.Fragment>\r\n <ButtonAction text={props.buttonText} action={props.action}></ButtonAction>\r\n <ButtonClose text={props.button2Text} closeDialog={props.closeDialog}></ButtonClose>\r\n </React.Fragment>}\r\n </div>\r\n </DialogActions>\r\n </BaseDialog>\r\n );\r\n}\r\n\r\n\r\nconst useStyles = makeStyles(() => ({\r\n\r\n buttons: {\r\n textAlign: \"center\",\r\n width: \"100%\",\r\n marginBottom: \"10px\"\r\n },\r\n dialogTitle: {\r\n color: \"#000000\",\r\n fontFamily: \"Lato, sans-serif\",\r\n fontWeight: 'medium',\r\n textAlign: \"center\",\r\n '& h2': {\r\n fontSize: \"24px !important\",\r\n },\r\n paddingTop: \"20px\",\r\n cursor: 'move'\r\n },\r\n dialogContent: {\r\n textAlign: \"center\",\r\n fontFamily: \"Lato, sans-serif\",\r\n }\r\n\r\n}));\r\n","export default __webpack_public_path__ + \"static/media/barcodeScanner.f4fbb7ba.svg\";","import React, { useState, useEffect } from 'react';\r\nimport Divider from '@mui/material/Divider';\r\nimport ScannerIcon from './barcodeScanner.svg';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { LightenDarkenColor } from 'lighten-darken-color';\r\nimport BarcodeScannerComponent from \"react-qr-barcode-scanner\";\r\nimport { IconButton } from '@material-ui/core';\r\nimport Button from '@mui/material/Button';\r\nimport Card from '@mui/material/Card';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport QrCodeScannerIcon from '@mui/icons-material/QrCodeScanner';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport ReportProblemIcon from '@mui/icons-material/ReportProblem';\r\nimport PhotoCameraIcon from '@mui/icons-material/PhotoCamera';\r\nimport TextField from '@mui/material/TextField';\r\nimport Typography from '@mui/material/Typography';\r\nimport SendIcon from '@mui/icons-material/Send';\r\nimport PhotoIcon from '@mui/icons-material/Photo';\r\nimport Webcam from \"react-webcam\";\r\nimport CameraswitchIcon from '@mui/icons-material/Cameraswitch';\r\nimport CircleIcon from '@mui/icons-material/Circle';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport Pagination from '@mui/material/Pagination';\r\nimport InputAdornment from '@mui/material/InputAdornment';\r\nimport { parseNewDateToDDMMYYY } from '../../../Utils/dateHelper';\r\n\r\nfunction Scanner(props) {\r\n const current = new Date();\r\n const date = parseNewDateToDDMMYYY(current);\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(false);\r\n const [data, setData] = React.useState(\"\");\r\n const [extraContent, setExtraContent] = useState(false);\r\n const [listOfComments, setListOfComments] = useState([]);\r\n const [value, setValue] = useState(0);\r\n const [page, setPage] = useState(1);\r\n const [captured, setCaptured] = useState(false);\r\n const [openComment, setOpenComment] = useState(false);\r\n const [openCamera, setOpenCamera] = useState(false);\r\n const [openFullscreenImage, setOpenFullscreenImage] = useState(false);\r\n const [image, setImage] = useState(\"\");\r\n const [comment, setComment] = useState(\"\");\r\n const [cameraSide, setCameraSide] = useState(true)\r\n const [expanded, setExpanded] = useState(false);\r\n const webcamRef = React.useRef(null);\r\n\r\n useEffect(() => {\r\n setData(\"\")\r\n setListOfComments(props.comments)\r\n // eslint-disable-next-line no-undef\r\n }, [props.refresh]);\r\n\r\n const cameraFace = {\r\n facingMode: \"user\"\r\n }\r\n\r\n const cameraBack = {\r\n facingMode: { exact: \"environment\" }\r\n }\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const handleDialogOpenComment = () => {\r\n setOpenComment(true);\r\n }\r\n\r\n const handleDialogCloseComment = () => {\r\n setOpenComment(false);\r\n }\r\n\r\n const handleDialogOpenCamera = () => {\r\n setOpenCamera(true);\r\n setOpenComment(false);\r\n }\r\n\r\n const handleDialogCloseCamera = () => {\r\n setOpenCamera(false);\r\n setOpenComment(true);\r\n }\r\n\r\n const handleDialogOpenFullscreenImage = () => {\r\n setOpenFullscreenImage(true);\r\n }\r\n\r\n const handleDialogCloseFullscreenImage = () => {\r\n setOpenFullscreenImage(false);\r\n }\r\n\r\n const Cameremode = () => {\r\n setCameraSide(!cameraSide)\r\n }\r\n\r\n const handleExtraContentClick = () => {\r\n setExtraContent(!extraContent);\r\n };\r\n\r\n const handleExpandClick = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const handlePage = (event, value) => {\r\n setPage(value);\r\n };\r\n\r\n const handleDialogOpen = () => {\r\n setOpen(true);\r\n }\r\n\r\n const handleDialogClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n const handleScannedData = (data) => {\r\n setOpen(false);\r\n setData(data);\r\n if (props.comment) {\r\n setComment(\"\");\r\n setImage(\"\");\r\n handleDialogOpenComment();\r\n } else {\r\n dataService.saveText(props.id, date, data)\r\n }\r\n }\r\n\r\n const handleSendWithComment = () => {\r\n\r\n props.actionWithComment(data, props.id, image.slice(23), comment);\r\n\r\n handleDialogCloseComment();\r\n let tempListOfComments = [...listOfComments];\r\n let index = tempListOfComments.length + 1;\r\n let newListItem = { image: image, comment: comment, index: index++, insertedOn: new Date(Date.now()) };\r\n tempListOfComments.push(newListItem)\r\n setListOfComments(tempListOfComments)\r\n setPage(index - 1)\r\n }\r\n\r\n const capture = () => {\r\n const imageSrc = webcamRef.current.getScreenshot();\r\n if (imageSrc !== null) {\r\n setCaptured(true);\r\n setImage(imageSrc);\r\n }\r\n else {\r\n alert(\"No Camera Found\");\r\n }\r\n }\r\n\r\n const CameraStyle = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n position: \"absolute\",\r\n objectFit: \"cover\",\r\n top: \"0\",\r\n left: \"0\",\r\n }\r\n\r\n return (\r\n <div >\r\n <Card>\r\n <div className={classes.freeText} style={{\r\n color: props.textColor,\r\n backgroundColor: `${props.color}`,\r\n }}>\r\n <div className={classes.headerDiv}>\r\n {props.comment && listOfComments.length > 0 ?\r\n <Button style={{ zIndex: \"4\", position: \"absolute\", left: \"3%\" }} size={'large'} onClick={handleExtraContentClick}>\r\n <ReportProblemIcon style={{ color: props.textColor }} />\r\n </Button>\r\n : <React.Fragment></React.Fragment>\r\n }\r\n <h2 className={classes.h2style}>{props.description}</h2>\r\n <img className={classes.imageStyle} src={ScannerIcon} alt=\"\" />\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.textDiv} style={{\r\n backgroundColor: LightenDarkenColor(props.color, 20)\r\n }}>\r\n <IconButton onClick={handleDialogOpen} style={{ color: props.textColor }}>\r\n <QrCodeScannerIcon fontSize=\"large\" color='white' />\r\n </IconButton>\r\n </div>\r\n <Divider></Divider>\r\n <div className={classes.StyleDiv}>\r\n <h4>{data}</h4>\r\n </div>\r\n </div>\r\n\r\n <Dialog\r\n fullScreen\r\n open={openCamera}\r\n onClose={handleDialogCloseCamera}\r\n maxWidth={\"lg\"}\r\n >\r\n <DialogTitle style={{ background: \"rgba(255, 255, 255, .0)\", zIndex: \"1\" }}>\r\n {\"Camera\"}\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogCloseCamera} size=\"large\">\r\n <CloseIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider></Divider>\r\n <DialogContent>\r\n {\r\n cameraSide === true ?\r\n <Webcam\r\n style={CameraStyle}\r\n audio={false}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n videoConstraints={cameraBack}\r\n ></Webcam> :\r\n <Webcam\r\n style={CameraStyle}\r\n audio={false}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n videoConstraints={cameraFace}\r\n ></Webcam>\r\n }\r\n </DialogContent>\r\n <Divider></Divider>\r\n <DialogActions style={{ justifyContent: \"center\", background: \"rgba(255, 255, 255, .25)\", zIndex: \"1\" }}>\r\n <IconButton onClick={handleExpandClick} size=\"large\">\r\n {captured ?\r\n <img style={{ margin: \"0px\", width: \"2rem\", height: \"2rem\", borderRadius: \"50%\" }} src={image}></img>\r\n :\r\n <PhotoIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n }\r\n </IconButton>\r\n <IconButton onClick={capture} size=\"large\">\r\n <CircleIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n </IconButton>\r\n <IconButton onClick={Cameremode} size=\"large\">\r\n <CameraswitchIcon size=\"large\" fontSize=\"inherit\" style={{ color: \"black\" }} />\r\n </IconButton>\r\n </DialogActions>\r\n <Divider style={{ background: \"rgb(0, 0, 0)\", zIndex: \"2\" }}></Divider>\r\n <Collapse style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\" }} in={expanded} timeout=\"auto\" unmountOnExit>\r\n <DialogContent style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\" }}>\r\n <img\r\n style={{ background: \"rgb(255, 255, 255)\", zIndex: \"2\", maxWidth: \"100%\", maxHeight: \"calc(100vh - 64px)\" }}\r\n src={image}></img>\r\n </DialogContent>\r\n </Collapse>\r\n </Dialog>\r\n\r\n <Dialog\r\n open={open}\r\n onClose={handleDialogClose}\r\n >\r\n <DialogTitle>\r\n {\"Scanner\"}\r\n </DialogTitle>\r\n <Divider></Divider>\r\n <DialogContent>\r\n <BarcodeScannerComponent\r\n onUpdate={(err, result) => {\r\n if (result) handleScannedData(result.text)\r\n else setData(\"Not Found\");\r\n }} />\r\n </DialogContent>\r\n </Dialog>\r\n\r\n <Dialog\r\n fullWidth\r\n open={openComment}\r\n onClose={handleDialogCloseComment}>\r\n <DialogTitle>\r\n {\"Comment\"}\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogCloseComment} size=\"large\">\r\n <CloseIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider ></Divider>\r\n <div className={classes.StyleDivComment}>\r\n <TextField multiline\r\n rows={8}\r\n style={{ marginBottom: \"10px\", margin: \"10px\", width: \"87%\" }}\r\n label={comment ? \" \" : \"Make a comment.\"}\r\n InputLabelProps={{ shrink: false }} variant=\"outlined\"\r\n onChange={(event) => setComment(event.target.value)}\r\n value={comment}\r\n InputProps={{\r\n endAdornment: (\r\n <InputAdornment style={{ marginTop: \"160px\" }}>\r\n {image !== \"\" ?\r\n <div>\r\n <IconButton onClick={handleDialogOpenFullscreenImage}>\r\n <img style={{ margin: \"0px\", width: \"2rem\", height: \"2rem\", borderRadius: \"50%\" }} src={image}></img>\r\n </IconButton>\r\n <IconButton onClick={handleDialogOpenCamera} >\r\n <PhotoCameraIcon />\r\n </IconButton>\r\n </div>\r\n :\r\n <div>\r\n <IconButton onClick={handleDialogOpenCamera} >\r\n <PhotoCameraIcon />\r\n </IconButton>\r\n </div>\r\n }\r\n </InputAdornment>)\r\n }} />\r\n <IconButton style={{ marginBottom: \"12px\" }} onClick={handleSendWithComment} size=\"large\">\r\n <SendIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </div>\r\n </Dialog>\r\n\r\n <Dialog\r\n fullScreen\r\n open={openFullscreenImage}\r\n onClose={handleDialogCloseFullscreenImage}>\r\n <DialogTitle style={{ background: \"rgba(0, 0, 0, .0)\", zIndex: \"1\" }}>\r\n <IconButton style={{ position: \"absolute\", right: \"10px\", top: \"5px\" }} onClick={handleDialogCloseFullscreenImage} size=\"large\">\r\n <CloseIcon fontSize=\"inherit\" color='blue' />\r\n </IconButton>\r\n </DialogTitle>\r\n <Divider ></Divider>\r\n <DialogContent>\r\n <img style={CameraStyle} src={image}></img>\r\n </DialogContent>\r\n </Dialog>\r\n </Card>\r\n {\r\n extraContent ? <div style={{ position: \"relative\" }}>\r\n <div style={{ position: \"absolute\", top: \"1\", width: \"100%\", zIndex: \"10\" }}>\r\n <Collapse in={extraContent} timeout=\"auto\" unmountOnExit >\r\n <Card >\r\n {listOfComments.filter(list => list.index === page).map(x =>\r\n <List sx={{ width: '100%', overflow: \"hidden\" }}>\r\n <ListItem>\r\n <Typography style={{ width: \"70%\" }} >{props.description + \" Comment: \" + x.index}</Typography>\r\n <Typography style={{ width: \"30%\", fontWeight: \"bold\" }}>{parseNewDateToDDMMYYY(new Date(x.insertedOn))}</Typography>\r\n </ListItem>\r\n <Divider></Divider>\r\n {x.image !== \"\" && x.image !== null ?\r\n <ListItem style={{ marginBottom: \"10px\", display: \"flex\", justifyContent: \"center\" }}>\r\n <img src={x.image} style={{ maxWidth: \"100%\", maxHeight: \"calc(40vh - 16px)\", borderRadius: \"15px\" }} alt=\"\" />\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n {x.comment !== \"\" ?\r\n <ListItem>\r\n <Typography style={{ hyphens: \"auto\", wordWrap: \"break-word\", overflowWrap: \"anywhere\" }}>{x.comment}</Typography>\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n {x.comment === \"\" && (x.image === \"\" || x.image === null) ?\r\n <ListItem>\r\n <Typography style={{ color: \"red\" }} >No recorded comment.</Typography>\r\n </ListItem>\r\n :\r\n <React.Fragment></React.Fragment>}\r\n <Divider></Divider>\r\n <ListItem style={{ justifyContent: 'center' }}>\r\n <Pagination page={page} variant=\"outlined\" size=\"small\" siblingCount={0} count={listOfComments.length} onChange={handlePage} />\r\n </ListItem>\r\n </List>\r\n )\r\n }\r\n </Card>\r\n </Collapse>\r\n </div>\r\n </div> :\r\n <React.Fragment></React.Fragment>\r\n }\r\n </div >\r\n );\r\n}\r\n\r\nexport default Scanner;\r\n\r\nconst useStyles = makeStyles({\r\n freeText: {\r\n overflow: 'hidden',\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"10rem 10rem\",\r\n backgroundPosition: \"center\",\r\n height: \"12rem\",\r\n },\r\n headerDiv: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '33%',\r\n },\r\n h2style: {\r\n margin: '0',\r\n zIndex: '2'\r\n },\r\n StyleDiv: {\r\n height: '33%',\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-evenly\",\r\n alignItems: 'center',\r\n },\r\n StyleDivComment: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'flex-end',\r\n },\r\n imageStyle: {\r\n position: 'absolute',\r\n right: '3%',\r\n filter: 'contrast(80%)',\r\n opacity: '50%',\r\n width: '50px'\r\n },\r\n textDiv: {\r\n paddingLeft: '15px',\r\n paddingRight: '15px',\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n height: '34%',\r\n alignItems: 'center',\r\n }\r\n});","import React, { useEffect, useState } from 'react';\r\nimport { Grid } from '@mui/material';\r\nimport ButtonNormalText from '../../Shared/Buttons/ButtonNormalText';\r\nimport Counter from './Counters';\r\nimport Stopwatch from './Stopwatch';\r\nimport FreeText from './FreeText';\r\nimport DataList from './DataList';\r\nimport Camera from './Camera';\r\nimport { controlTypes } from '../../../Config/constants';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport Divider from '@mui/material/Divider';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\r\nimport MessageDialog from '../../Shared/Dialogs/MessageDialog';\r\nimport { parseNewDateToDDMMYYY, isDateObject } from '../../../Utils/dateHelper';\r\nimport Scanner from './Scanner';\r\n\r\nfunction MeasurementBlocks(props) {\r\n const [valuesArray, setValuesArray] = useState([]);\r\n const [confirmDialogOpen, setComfirmDialogOpen] = useState(false)\r\n const [watchStillRunningDialogOpen, setWatchStillRunningDialogOpen] = useState(false)\r\n const [stopWatchesRunning, setStopWatchesRunning] = useState([])\r\n const [refreshStopWatches, setRefreshStopWatches] = useState(false)\r\n const [refresh, setRefresh] = useState(false)\r\n const current = new Date();\r\n const date = parseNewDateToDDMMYYY(current);\r\n\r\n useEffect(() => {\r\n let elementsArray = []\r\n var i = 0;\r\n for (i = 0; i < props.data.length; i++) {\r\n elementsArray.push({\r\n id: props.data[i].id,\r\n value: props.data[i].value? props.data[i].value : '',\r\n startTime: date,\r\n running: props.data[i].running,\r\n controlTypeId: props.data[i].controlTypeID,\r\n startValue: props.data[i].startValue !== null ? props.data[i].startValue : null,\r\n stopValue: props.data[i].stopValue !== null ? props.data[i].stopValue : null\r\n })\r\n }\r\n setValuesArray(elementsArray);\r\n setRefreshStopWatches(!refreshStopWatches)\r\n // eslint-disable-next-line \r\n }, [props.data]);\r\n\r\n\r\n const setCounter = (value, detailId) => {\r\n let tempValues = [...valuesArray]\r\n tempValues.find(x => x.id === detailId).controlTypeID = 1\r\n tempValues.find(x => x.id === detailId).value = String(value);\r\n tempValues.find(x => x.id === detailId).running = true;\r\n\r\n setValuesArray(tempValues)\r\n dataService.saveMeasurement(tempValues.find(x => x.id === detailId)).then(result => {\r\n if (result.success === true) {\r\n //toast.success('Measurements were saved successfully.', { position: toast.POSITION.TOP_CENTER });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n });\r\n }\r\n\r\n const setCounterWithComment = (value, detailId, image, text) => {\r\n let tempValues = [...valuesArray]\r\n tempValues.find(x => x.id === detailId).controlTypeID = 1\r\n tempValues.find(x => x.id === detailId).value = String(value);\r\n tempValues.find(x => x.id === detailId).running = true;\r\n tempValues.find(x => x.id === detailId).commentImage = image;\r\n tempValues.find(x => x.id === detailId).commentText = text;\r\n\r\n setValuesArray(tempValues)\r\n dataService.saveMeasurementWithComment(tempValues.find(x => x.id === detailId));\r\n }\r\n\r\n const setStopWatch = (value, detailId, startTime, endTime, reset) => {\r\n let tempValues = [...valuesArray]\r\n tempValues.find(x => x.id === detailId).controlTypeID = 2\r\n tempValues.find(x => x.id === detailId).value = String(value);\r\n if (startTime) {\r\n tempValues.find(x => x.id === detailId).stopValue = null;\r\n tempValues.find(x => x.id === detailId).running = true\r\n setValuesArray(tempValues)\r\n\r\n let startDateString = parseNewDateToDDMMYYY(startTime);\r\n tempValues.find(x => x.id === detailId).startValue = startDateString;\r\n\r\n }\r\n else {\r\n if (reset) {\r\n tempValues.find(x => x.id === detailId).running = false\r\n tempValues.find(x => x.id === detailId).value = 0\r\n }\r\n else {\r\n tempValues.find(x => x.id === detailId).running = true\r\n }\r\n\r\n setValuesArray(tempValues)\r\n let endDateString = parseNewDateToDDMMYYY(endTime);\r\n tempValues.find(x => x.id === detailId).stopValue = endDateString;\r\n }\r\n\r\n if (reset) {\r\n if (isDateObject(tempValues.find(x => x.id === detailId).startValue)) {\r\n tempValues.find(x => x.id === detailId).startValue = parseNewDateToDDMMYYY(tempValues.find(x => x.id === detailId).startValue)\r\n }\r\n tempValues.find(x => x.id === detailId).value = '0';\r\n }\r\n\r\n dataService.saveMeasurement(tempValues.find(x => x.id === detailId)).then(result => {\r\n if (result.success === true) {\r\n //toast.success('Measurements were saved successfully.', { position: toast.POSITION.TOP_CENTER });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n });\r\n }\r\n\r\n const setStartValue = (value, detailId, startTime) => {\r\n let tempStopWatchesRunning = [...stopWatchesRunning]\r\n tempStopWatchesRunning.push(detailId)\r\n setStopWatchesRunning(tempStopWatchesRunning)\r\n setStopWatch(value, detailId, startTime, null, false)\r\n }\r\n\r\n const setStopValue = (value, detailId, endTime, reset) => {\r\n let tempStopWatchesRunning = [...stopWatchesRunning]\r\n if (tempStopWatchesRunning.some(x => x === detailId)) {\r\n let index = tempStopWatchesRunning.indexOf(tempStopWatchesRunning.find(x => x === detailId))\r\n tempStopWatchesRunning.splice(index, 1)\r\n }\r\n setStopWatchesRunning(tempStopWatchesRunning)\r\n setStopWatch(value, detailId, null, endTime, reset)\r\n }\r\n\r\n const setText = (value, detailId) => {\r\n let tempValues = [...valuesArray];\r\n tempValues.find(x => x.id === detailId).controlTypeID = 3;\r\n tempValues.find(x => x.id === detailId).value = value;\r\n tempValues.find(x => x.id === detailId).running = false;\r\n setValuesArray(tempValues);\r\n }\r\n \r\n const setTextWithComment = (value, detailId, image, text) => {\r\n let tempValues = [...valuesArray]\r\n tempValues.find(x => x.id === detailId).controlTypeID = 3;\r\n tempValues.find(x => x.id === detailId).value = String(value);\r\n tempValues.find(x => x.id === detailId).running = true;\r\n tempValues.find(x => x.id === detailId).commentImage = image;\r\n tempValues.find(x => x.id === detailId).commentText = text;\r\n\r\n setValuesArray(tempValues)\r\n dataService.saveMeasurementWithComment(tempValues.find(x => x.id === detailId));\r\n }\r\n\r\n const setDataListValue = (DataListValue, detailId) => {\r\n let tempValues = [...valuesArray];\r\n tempValues.find(x => x.id === detailId).controlTypeID = 4;\r\n tempValues.find(x => x.id === detailId).DataListValue = DataListValue;\r\n tempValues.find(x => x.id === detailId).running = false;\r\n setValuesArray(tempValues);\r\n }\r\n\r\n function elementSwitch(controlTypeId, description, id, color, dataListId, comment, comments) {\r\n switch (controlTypeId) {\r\n case controlTypes.COUNTER: //1\r\n return (\r\n <div>\r\n {valuesArray.length >= 1 && <Counter refresh={refresh} comments={comments} comment={comment} color={color !== null ? color : '#e6ccb1'} textColor={getTextColor(color !== null ? color : '#e6ccb1')} description={description} counter={valuesArray.find(x => x.id === id).value} id={id} action={setCounter} actionWithComment={setCounterWithComment}></Counter>}\r\n </div>\r\n );\r\n case controlTypes.STOPWATCH: //2\r\n return (\r\n <div>\r\n {valuesArray.length >= 1 && <Stopwatch color={color !== null ? color : '#a5b6d4'} textColor={getTextColor(color !== null ? color : '#a5b6d4')} description={description} refresh={refreshStopWatches} stopwatch={valuesArray.find(x => x.id === id)} startAction={setStartValue} stopAction={setStopValue} id={id}></Stopwatch>}\r\n </div>\r\n );\r\n case controlTypes.FREETEXT: //3\r\n return (\r\n <div>\r\n {valuesArray.length >= 1 && <FreeText color={color !== null ? color : '#cae6cb'} textColor={getTextColor(color !== null ? color : '#cae6cb')} description={description} text={valuesArray.find(x => x.id === id).value} id={id} setText={setText}></FreeText>}\r\n </div>\r\n );\r\n case controlTypes.DATALIST: //4\r\n return (\r\n <div>\r\n {valuesArray.length >= 1 && <DataList refresh={refresh} color={color !== null ? color : '#de576d'} textColor={getTextColor(color !== null ? color : '#de576d')} dataListId={dataListId} description={description} id={id} setDataValue={setDataListValue} ></DataList>}\r\n </div>\r\n );\r\n case controlTypes.SCANNER: //5\r\n return (\r\n <div>\r\n {valuesArray.length >= 1 && <Scanner comments={comments} comment={comment} refresh={refresh} color={color !== null ? color : '#cae6cb'} textColor={getTextColor(color !== null ? color : '#cae6cb')} description={description} id={id} actionWithComment={setTextWithComment} ></Scanner>}\r\n </div>\r\n );\r\n case controlTypes.CAMERA: //6\r\n return (\r\n <div>\r\n {valuesArray.length >= 1 && <Camera refresh={refresh} comments={comments} comment={comment} color={color !== null ? color : '#84ff69'} textColor={getTextColor(color !== null ? color : '#84ff69')} description={description} id={id} ></Camera>}\r\n </div>\r\n );\r\n case controlTypes.EXTERNALAPI: //7\r\n return (\r\n <React.Fragment></React.Fragment>\r\n );\r\n default:\r\n return (<React.Fragment></React.Fragment>);\r\n }\r\n }\r\n \r\n const resetAndSave = () => {\r\n setRefresh(!refresh)\r\n var measurements = []\r\n valuesArray.forEach(x =>\r\n measurements.push(\r\n {\r\n ProjectDetailId: x.id,\r\n StartTime: x.startTime,\r\n Value: String(x.value),\r\n StartValue: x.startValue ? parseNewDateToDDMMYYY(new Date(x.startValue)) : null,\r\n StopValue: x.stopValue ? parseNewDateToDDMMYYY(new Date(x.stopValue)) : null,\r\n DataListValue: String(x.DataListValue),\r\n Running: x.running,\r\n ControlTypeId: x.controlTypeID,\r\n Description: \"\"\r\n })\r\n )\r\n dataService.saveAndResetMeasurements(measurements).then((result) => {\r\n closeConfirmDialog()\r\n props.refreshMeasurements()\r\n })\r\n }\r\n\r\n const openConfirmDialog = () => {\r\n\r\n if (stopWatchesRunning.length > 0) {\r\n openWatchStillRunningDialog();\r\n }\r\n else {\r\n setComfirmDialogOpen(true)\r\n }\r\n }\r\n\r\n const closeConfirmDialog = () => {\r\n setComfirmDialogOpen(false)\r\n }\r\n\r\n const closeWatchStillRunningDialog = () => {\r\n setWatchStillRunningDialogOpen(false)\r\n }\r\n\r\n const openWatchStillRunningDialog = () => {\r\n setWatchStillRunningDialogOpen(true)\r\n }\r\n\r\n const measurementGrid = {\r\n marginTop: '25px',\r\n }\r\n\r\n function getRGB(c) {\r\n return parseInt(c, 16) || c\r\n }\r\n\r\n function getsRGB(c) {\r\n return getRGB(c) / 255 <= 0.03928\r\n ? getRGB(c) / 255 / 12.92\r\n : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4)\r\n }\r\n\r\n function getLuminance(hexColor) {\r\n if (hexColor.includes('#')) {\r\n return (\r\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\r\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\r\n 0.0722 * getsRGB(hexColor.substr(-2))\r\n )\r\n } else {\r\n return (\r\n 0.2126 * hexColor +\r\n 0.7152 * hexColor +\r\n 0.0722 * hexColor\r\n )\r\n }\r\n\r\n }\r\n\r\n function getContrast(f, b) {\r\n const L1 = getLuminance(f)\r\n const L2 = getLuminance(b)\r\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05)\r\n }\r\n\r\n function getTextColor(bgColor) {\r\n if (bgColor === null) {\r\n return '#ffffff';\r\n } else {\r\n const whiteContrast = getContrast(bgColor, '#ffffff')\r\n const blackContrast = getContrast(bgColor, '#000000')\r\n return whiteContrast > blackContrast ? '#ffffff' : '#000000';\r\n }\r\n }\r\n return (\r\n <div>\r\n <Grid container\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n spacing={3}\r\n alignItems=\"center\" style={measurementGrid}>\r\n {\r\n props.data.map(x => \r\n <Grid item xs={props.view}>\r\n {elementSwitch(x.controlTypeID, x.description, x.id, x.color, x.dataListId, x.hasComment, x.comments? x.comments: \"\")}\r\n </Grid>\r\n )\r\n }\r\n <Divider style={{ marginBottom: \"0.5rem\", marginTop: \"0.5rem\" }}></Divider>\r\n\r\n <Grid item xs={12}>\r\n <ButtonNormalText onClick={() => openConfirmDialog()} startIcon={<RestartAltIcon />} content=\"New registration\" />\r\n </Grid>\r\n <MessageDialog\r\n dialogOpen={confirmDialogOpen}\r\n closeDialog={closeConfirmDialog}\r\n messageTitle={\"New registration?\"}\r\n action={resetAndSave}\r\n messageContent={\"Running measurements will be stopped and you'll be able to start new measurements.\"}\r\n buttonText={\"OK\"}\r\n button2Text={\"Cancel\"}\r\n ></MessageDialog>\r\n <MessageDialog\r\n dialogOpen={watchStillRunningDialogOpen}\r\n closeDialog={closeWatchStillRunningDialog}\r\n action={closeWatchStillRunningDialog}\r\n messageTitle={\"Attention!\"}\r\n buttonCount={1}\r\n messageContent={\"There are still stopwatches running... Please pause/reset the watches first before initiating new measurements.\"}\r\n buttonText={\"OK\"}\r\n ></MessageDialog>\r\n </Grid>\r\n\r\n </div>\r\n\r\n )\r\n}\r\n\r\nexport default MeasurementBlocks;\r\n","export default __webpack_public_path__ + \"static/media/squares.e54c3eae.svg\";","import React, { useEffect, useState } from 'react';\r\nimport DescriptionTitle from '../../Shared/DescriptionTitle';\r\nimport { Grid } from '@mui/material';\r\nimport useQuery from '../../Shared/UseQuery';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport MeasurementBlocks from './MeasurementBlocks';\r\nimport { connect } from 'react-redux';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport SvgIcon from '@mui/material/SvgIcon';\r\nimport TableRowsIcon from '@mui/icons-material/TableRows';\r\nimport Squares from './squares.svg';\r\n\r\nexport const PerformMeasurementPage = (props) => {\r\n\r\n let query = useQuery();\r\n let qr = query.get(\"qr\");\r\n const [measurementBlocks, setMeasurementBlocks] = useState([]);\r\n const [projectName, setProjectName] = useState([]);\r\n const [resourceName, setResourceName] = useState([]);\r\n const [projectId, setProjectId] = useState([]);\r\n const [refresh, setRefresh] = useState(false)\r\n const [viewSize, setViewSize] = useState(6)\r\n const [displaySize, setDisplaySize] = useState(3);\r\n const [activeProject, setActiveProject] = useState(true);\r\n const [autosize, setAutosize] = useState(true);\r\n const [toggleRefresh, setToggleRefresh] = useState(false);\r\n let fromDate;\r\n let toDate;\r\n\r\n useEffect(() => {\r\n dataService.getProjectDetailWithComments(qr).then(res => {\r\n fromDate = res.timeRangeBegin;\r\n toDate = res.timeRangeEnd;\r\n let currentDate = new Date();\r\n let active = dateRange(new Date(res.timeRangeBegin), new Date(res.timeRangeEnd), currentDate, currentDate);\r\n if (active) {\r\n setActiveProject(true);\r\n }\r\n else {\r\n setActiveProject(false);\r\n }\r\n console.log('res ', res)\r\n setProjectId(res.id);\r\n setProjectName(res.projectName);\r\n setResourceName(res.resourceDescription);\r\n\r\n let tempDetails = [...res.details];\r\n tempDetails.map(detail => {\r\n detail.running = true;\r\n if (detail.measurements.length > 0 && detail.measurements[0] !== null && !refresh && detail.measurements[detail.measurements.length - 1].running == true) {\r\n if (detail.controlTypeID === 1) {\r\n //Counter\r\n detail.value = detail.measurements[detail.measurements.length - 1].integerValue;\r\n console.log(detail)\r\n let comments = detail.measurements.filter(measurement => measurement.running).map((measurement, index) => ({comment:measurement.commentText? measurement.commentText: \"\", image:measurement.commentImage?\"data:image/png;base64,\" + measurement.commentImage: \"\", index:index + 1, insertedOn: measurement.commentInsertedOn}));\r\n detail.comments = comments;\r\n } else if (detail.controlTypeID === 2) {\r\n //Timer \r\n console.log(detail.measurements[detail.measurements.length - 1]) \r\n if (detail.measurements[detail.measurements.length - 1].stopValue === null) {\r\n detail.value = \"0\";\r\n detail.stopValue = new Date(Date.now());\r\n detail.startValue = new Date(Date.now());\r\n }else{ \r\n detail.value = detail.measurements[detail.measurements.length - 1].integerValue;\r\n detail.stopValue = new Date(detail.measurements[detail.measurements.length - 1].stopValue);\r\n detail.startValue = new Date(detail.measurements[detail.measurements.length - 1].startValue);\r\n }\r\n } else if (detail.controlTypeID === 3) {\r\n //Free text\r\n detail.value = detail.measurements[detail.measurements.length - 1].textValue;\r\n }\r\n else if (detail.controlTypeID === 5) {\r\n // Scanner\r\n detail.value = detail.measurements[detail.measurements.length - 1].textValue;\r\n let comments = detail.measurements.filter(measurement => measurement.running).map((measurement, index) => ({comment:measurement.commentText? measurement.commentText: \"\", image:measurement.commentImage?\"data:image/png;base64,\" + measurement.commentImage: \"\", index:index + 1, insertedOn: measurement.commentInsertedOn}));\r\n detail.comments = comments;\r\n }\r\n else if (detail.controlTypeID === 6) {\r\n // Camera\r\n detail.value = detail.measurements[detail.measurements.length - 1].textValue;\r\n let comments = detail.measurements.filter(measurement => measurement.running).map((measurement, index) => ({comment:measurement.commentText? measurement.commentText: \"\", image:measurement.commentImage?\"data:image/png;base64,\" + measurement.commentImage: \"\", index:index + 1, insertedOn: measurement.commentInsertedOn}));\r\n detail.comments = comments;\r\n }\r\n }\r\n else{ \r\n if (detail.controlTypeID === 1) {\r\n //Counter\r\n detail.value = \"0\";\r\n let comments = [];\r\n detail.comments = comments;\r\n } else if (detail.controlTypeID === 2) {\r\n //Timer \r\n detail.value = \"0\";\r\n detail.stopValue = new Date(Date.now());\r\n detail.startValue = new Date(Date.now());\r\n } else if (detail.controlTypeID === 3) {\r\n //Free text\r\n detail.value = \"\";\r\n }\r\n else if (detail.controlTypeID === 5) {\r\n // Scanner\r\n detail.value = \"\";\r\n let comments = [];\r\n detail.comments = comments;\r\n }\r\n else if (detail.controlTypeID === 6) {\r\n // Camera\r\n detail.value = \"\";\r\n let comments = [];\r\n detail.comments = comments;\r\n }\r\n }\r\n });\r\n setMeasurementBlocks(tempDetails);\r\n });\r\n\r\n function dateRange(a_start, a_end, b_start, b_end) {\r\n if (a_start <= b_start && b_start <= a_end) return true; // b starts in a\r\n if (a_start <= b_end && b_end <= a_end) return true; // b ends in a\r\n if (b_start < a_start && a_end < b_end) return true; // a in b\r\n if (datesAreOnSameDay(a_start, b_start)) return true;\r\n if (datesAreOnSameDay(b_end, a_end)) return true;\r\n return false;\r\n }\r\n const datesAreOnSameDay = (first, second) =>\r\n first.getFullYear() === second.getFullYear() &&\r\n first.getMonth() === second.getMonth() &&\r\n first.getDate() === second.getDate();\r\n\r\n const display1Min = window.matchMedia('(min-width: 720px)');\r\n const display2Min = window.matchMedia('(min-width: 1000px)');\r\n const display3Min = window.matchMedia('(min-width: 1300px)');\r\n\r\n const listener = () => {\r\n if (!display1Min.matches) {\r\n setDisplaySize(0)\r\n setAutosize(true)\r\n }\r\n if (display1Min.matches && !display2Min.matches) {\r\n setDisplaySize(1)\r\n setAutosize(true)\r\n }\r\n if (display2Min.matches && !display3Min.matches) {\r\n setDisplaySize(2)\r\n setAutosize(true)\r\n }\r\n if (display3Min.matches) {\r\n setDisplaySize(3)\r\n setAutosize(true)\r\n }\r\n if (autosize) {\r\n if (!display1Min.matches) { setViewSize(12) }\r\n if (display1Min.matches) { setViewSize(6) }\r\n if (display2Min.matches) { setViewSize(4) }\r\n if (display3Min.matches) { setViewSize(3) }\r\n }\r\n }\r\n\r\n listener();\r\n window.addEventListener('resize', listener);\r\n return () => window.removeEventListener('resize', listener);\r\n }, [qr, toggleRefresh]);\r\n\r\n const viewSizeFunction = (blockWidth) => {\r\n setViewSize(blockWidth)\r\n }\r\n\r\n const TitleStyle = {\r\n background: \"#FFFFFF\",\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n marginBottom: '15px',\r\n }\r\n const Style = {\r\n textAlign: \"center\",\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n margin: \"1.5rem\",\r\n padding: \"1.5rem\"\r\n }\r\n\r\n const TitleTextStyle = {\r\n fontSize: \"1.5rem\",\r\n fontStyle: \"normal\",\r\n fontWeight: \"bold\",\r\n lineHeight: \"48px\",\r\n color: \"#1D3557\",\r\n width: '50%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginLeft: \"1.5rem\",\r\n }\r\n\r\n const refreshMeasurements = () => {\r\n setRefresh(true);\r\n setToggleRefresh(!toggleRefresh);\r\n }\r\n\r\n return (\r\n <div style={{ position: \"absolute\", top: props.loggedInState ? \"0\" : \"0\", width: \"100%\" }}>\r\n <div style={TitleStyle}>\r\n <div style={TitleTextStyle} >\r\n <h1>{resourceName}</h1>\r\n </div>\r\n {displaySize === 1 ?\r\n <div style={{ float: 'right', width: '50%', marginRight: '10px' }}>\r\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column', height: '100%' }}>\r\n <div style={{ fontSize: \"10px\", width: '100%', textAlign: 'center' }}>\r\n Choose your preferred block width:\r\n </div>\r\n <div style={{}}>\r\n <IconButton onClick={() => { viewSizeFunction(12); setAutosize(false); }} style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }}>\r\n <TableRowsIcon color='#8D8D8D' />\r\n </IconButton>\r\n <IconButton style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }} onClick={() => { viewSizeFunction(6); setAutosize(false); }}>\r\n <img src={Squares} style={{ padding: '2px' }} alt=\"Square Icon\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n :\r\n displaySize === 2 ?\r\n <div style={{ float: 'right', width: '200px', marginRight: '10px' }}>\r\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column', height: '100%' }}>\r\n <div style={{ fontSize: \"10px\", width: '100%', textAlign: 'center' }}>\r\n Choose your preferred block width:\r\n </div>\r\n <div style={{}}>\r\n <IconButton onClick={() => { viewSizeFunction(12); setAutosize(false); }} style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }}>\r\n <TableRowsIcon color='#8D8D8D' />\r\n </IconButton>\r\n <IconButton style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }} onClick={() => { viewSizeFunction(6); setAutosize(false); }}>\r\n <img src={Squares} style={{ padding: '2px' }} alt=\"Square Icon\" />\r\n </IconButton>\r\n <IconButton style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }} onClick={() => { viewSizeFunction(4); setAutosize(false); }}>\r\n <SvgIcon>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" role=\"img\" width=\"1em\" height=\"1em\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentcolor\" d=\"M16 5v6h5V5m-11 6h5V5h-5m6 13h5v-6h-5m-6 6h5v-6h-5m-6 6h5v-6H4m0-1h5V5H4v6Z\" />\r\n </svg>\r\n </SvgIcon>\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n :\r\n displaySize === 3 ?\r\n <div style={{ float: 'right', width: '200px', marginRight: '10px' }}>\r\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column', height: '100%' }}>\r\n <div style={{ fontSize: \"10px\", width: '100%', textAlign: 'center' }}>\r\n Choose your preferred block width:\r\n </div>\r\n <div style={{ width: '100%' }}>\r\n <IconButton onClick={() => { viewSizeFunction(12); setAutosize(false); }} style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }}>\r\n <TableRowsIcon color='#8D8D8D' />\r\n </IconButton>\r\n <IconButton style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }} onClick={() => { viewSizeFunction(6); setAutosize(false); }}>\r\n <img src={Squares} style={{ padding: '2px' }} alt=\"Square Icon\" />\r\n </IconButton>\r\n <IconButton style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }} onClick={() => { viewSizeFunction(4); setAutosize(false); }}>\r\n <SvgIcon>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" role=\"img\" width=\"1em\" height=\"1em\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentcolor\" d=\"M16 5v6h5V5m-11 6h5V5h-5m6 13h5v-6h-5m-6 6h5v-6h-5m-6 6h5v-6H4m0-1h5V5H4v6Z\" />\r\n </svg>\r\n </SvgIcon>\r\n </IconButton>\r\n <IconButton style={{ borderRadius: 0, border: '1px solid rgb(224, 224, 224)', marginRight: '5px' }} onClick={() => { viewSizeFunction(3); setAutosize(false); }}>\r\n <SvgIcon>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24s\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M3 9h4V5H3v4zm0 5h4v-4H3v4zm5 0h4v-4H8v4zm5 0h4v-4h-4v4zM8 9h4V5H8v4zm5-4v4h4V5h-4zm5 9h4v-4h-4v4zM3 19h4v-4H3v4zm5 0h4v-4H8v4zm5 0h4v-4h-4v4zm5 0h4v-4h-4v4zm0-14v4h4V5h-4z\" />\r\n </svg>\r\n </SvgIcon>\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n :\r\n <React.Fragment></React.Fragment>\r\n }\r\n </div>\r\n {\r\n activeProject === true ?\r\n <div style={Style}>\r\n <Grid container>\r\n <Grid item xs={12}>\r\n {measurementBlocks.length >= 1 && <MeasurementBlocks {...props} projectId={projectId} data={measurementBlocks} refreshMeasurements={refreshMeasurements} view={viewSize} />}\r\n </Grid>\r\n </Grid>\r\n </div>\r\n :\r\n <div style={Style}>\r\n <Grid container>\r\n <Grid item xs={12}>\r\n <h1 style={{ color: \"red\" }}>{projectName + \" is not active anymore.\"} </h1>\r\n <DescriptionTitle Text=\"Contact the project owner to change the date when this project takes places.\" />\r\n </Grid>\r\n </Grid>\r\n </div>\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n settings: state.settings\r\n})\r\n\r\nexport default connect(\r\n mapStateToProps\r\n)(PerformMeasurementPage);\r\n\r\n\r\n\r\n\r\n\r\n","import React, { useState, useRef } from 'react';\r\nimport { useReactToPrint, ReactToPrint } from 'react-to-print';\r\nimport CopyQrLink from './CopyQrLink';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport QRCode from \"qrcode.react\";\r\nimport ApiHelper from '../../Utils/API/apiHelper';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport QrCode2Icon from '@mui/icons-material/QrCode2';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport PrintIcon from '@mui/icons-material/Print';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Button from '@mui/material/Button';\r\nimport { Link } from 'react-router-dom';\r\nimport ViewComfyIcon from '@mui/icons-material/ViewComfy';\r\n\r\nfunction QrButton(props) {\r\n\r\n const classes = useStyles();\r\n\r\n const [open, setOpen] = useState(false);\r\n const componentRef = useRef();\r\n const appSettings = ApiHelper.appSettings;\r\n\r\n const handlePrint = useReactToPrint({\r\n content: () => componentRef.current\r\n });\r\n\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n class ComponentToPrint extends React.Component {\r\n render() {\r\n return (\r\n <div className='print-source' style={{ position: 'relative', height: '100%', flexDirection: 'column', display: 'flex', justifyContent: 'center', alignItems: 'center', alignContent: 'center' }}>\r\n <h1 style={{ marginBottom: \"20px\" }}>{props.projectName}</h1>\r\n <QRCode\r\n id=\"Qr\"\r\n value={appSettings.TAPLR_BASE_URL + \"perfmeasurement?qr=\" + props.QrCode}\r\n bgColor={\"#ffffff\"}\r\n renderAs={\"svg\"}\r\n size={400} />\r\n <div style={{ position: 'relative', width: '400px' }}>\r\n <div style={{ width: '100%', display: 'flex', justifyContent: 'end' }}>Powered by Flagstone</div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n\r\n const actionStyle = {\r\n textAlign: \"center\",\r\n display: \"flex\",\r\n justifyContent: \"center\"\r\n }\r\n\r\n const contentStyle = {\r\n textAlign: \"center\",\r\n justifyContent: \"center\",\r\n margin: '15px',\r\n }\r\n\r\n return (\r\n <div>\r\n <IconButton style={{ borderRadius: 0 }} disabled={props.disabled} onClick={handleClickOpen} size='large'>\r\n <QrCode2Icon fontSize=\"inherit\" />\r\n </IconButton>\r\n\r\n <Dialog\r\n open={open}\r\n onClose={handleClose}\r\n className={classes.modalQRCode}\r\n maxWidth={'lg'}\r\n >\r\n <DialogContent style={contentStyle}>\r\n <ComponentToPrint ref={el => (componentRef.current = el)} />\r\n <CopyQrLink QrCode={props.QrCode} value={appSettings.TAPLR_BASE_URL + \"perfmeasurement?qr=\" + props.QrCode} />\r\n </DialogContent>\r\n <DialogActions style={actionStyle} className={classes.buttonRow}>\r\n <Button size='large' className={classes.doneButton} onClick={handleClose} variant=\"contained\">Close</Button>\r\n <Button size='large' className={classes.printButton} type={props.type} onClick={handlePrint} variant=\"contained\"><PrintIcon className={classes.printIcon}></PrintIcon>Print QR-code</Button>\r\n <Link to={\"perfmeasurement?qr=\" + props.QrCode} style={{ textDecoration: 'none', marginLeft: '10px' }}>\r\n <Button className={classes.printButton} size=\"large\" variant=\"contained\"><ViewComfyIcon className={classes.printIcon}></ViewComfyIcon>{props.content}View</Button>\r\n </Link>\r\n </DialogActions>\r\n\r\n\r\n\r\n </Dialog>\r\n </div>\r\n )\r\n\r\n}\r\n\r\nexport default QrButton;\r\n\r\nconst useStyles = makeStyles({\r\n buttonRow: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n paddingLeft: '0px !important',\r\n paddingRight: '0px !important',\r\n marginBottom: '10px',\r\n },\r\n qrCode: {\r\n marginLeft: '50px',\r\n marginTop: '25px',\r\n marginRight: '50px',\r\n marginBottom: '25px',\r\n\r\n },\r\n printIcon: {\r\n paddingRight: '5px',\r\n },\r\n doneButton: {\r\n backgroundColor: '#C3996B !important',\r\n },\r\n printButton: {\r\n backgroundColor: '#0B4097 !important',\r\n }\r\n});\r\n","import React from 'react';\r\nimport { makeStyles, TextField } from '@material-ui/core';\r\nimport { ProjectFilterTypes } from '../../../Config/constants';\r\n\r\n\r\nexport default function FilterProjectRow(props) {\r\n const classes = useStyles();\r\n const getValue = (type) => {\r\n\r\n let filter = props.filters.find(x => x.type === type)\r\n\r\n if (filter) {\r\n return filter.filterValue\r\n }\r\n else {\r\n return \"\"\r\n }\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <tr key={\"filter\"} className={classes.filterRow}>\r\n {/*CompanyName */}\r\n <th className={classes.midCell}>\r\n <TextField \r\n autoFocus={props.filters.length > 0 ? props.filters[0].type === ProjectFilterTypes.CUSTOMER : false} \r\n id=\"outlined-search\" \r\n label=\"\" \r\n type=\"search\" \r\n variant=\"outlined\" \r\n value={getValue(ProjectFilterTypes.CUSTOMER)} \r\n className={classes.textField} \r\n size=\"small\" \r\n onChange={(e) => props.updateFilters(ProjectFilterTypes.CUSTOMER, e)}/>\r\n \r\n </th>\r\n\r\n {/*ProjectName */}\r\n <th className={classes.midCell} >\r\n <TextField \r\n autoFocus={props.filters.length > 0 ? props.filters[0].type === ProjectFilterTypes.PROJECT_NAME : false} \r\n id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\" \r\n value={getValue(ProjectFilterTypes.PROJECT_NAME)} \r\n className={classes.textField} size=\"small\" \r\n onChange={(e) => props.updateFilters(ProjectFilterTypes.PROJECT_NAME, e)}/>\r\n </th>\r\n \r\n {/*Resource*/}\r\n <th className={classes.midCell}>\r\n <TextField autoFocus={props.filters.length > 0 ? props.filters[0].type === ProjectFilterTypes.LOCATION_NAME : false} \r\n id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\" \r\n value={getValue(ProjectFilterTypes.LOCATION_NAME)} \r\n className={classes.textField} size=\"small\" \r\n onChange={(e) => props.updateFilters(ProjectFilterTypes.LOCATION_NAME, e)} />\r\n </th>\r\n{/* {props.groupType !== salesorderGroupingTypes.SLICE_TYPE && <th className={classes.midCell}>\r\n */}{/* <TextField autoFocus={props.filters.length > 0 ? props.filters[0].type === customerProductFilterTypes.SLICE_TYPE : false} id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\" value={getValue(customerProductFilterTypes.SLICE_TYPE)} className={classes.textField} size=\"small\" onChange={(e) => props.updateFilters(customerProductFilterTypes.SLICE_TYPE, e)} />\r\n </th>} */} \r\n <th className={classes.midCell}>\r\n{/* <TextField autoFocus={props.filters.length > 0 ? props.filters[0].type === customerProductFilterTypes.PALLET_TYPE : false} id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\" value={getValue(customerProductFilterTypes.PALLET_TYPE)} className={classes.textField} size=\"small\" onChange={(e) => props.updateFilters(customerProductFilterTypes.PALLET_TYPE, e)} />\r\n */} </th>\r\n <th className={classes.midCell}>\r\n </th>\r\n </tr>\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n filterRow: {\r\n marginBottom: '10px',\r\n width: '100%',\r\n },\r\n leftCell: {\r\n fontSize: \"14px\",\r\n color: \"#020100\",\r\n padding: \"10px\",\r\n fontWeight: \"normal\",\r\n paddingLeft: \"20px\",\r\n },\r\n midCell: {\r\n paddingTop: '5px',\r\n paddingBottom: '5px',\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#020100\",\r\n height: \"40px\",\r\n },\r\n rightCell: {\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#020100\",\r\n paddingLeft: \"10px\",\r\n },\r\n textField: {\r\n backgroundColor: \"white\",\r\n width: \"90%\",\r\n },\r\n checkBox: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n float: \"left\"\r\n },\r\n icon: {\r\n borderRadius: 3,\r\n width: 16,\r\n height: 16,\r\n boxShadow: 'inset 0 0 0 1px rgba(16,22,26,.2), inset 0 -1px 0 rgba(16,22,26,.1)',\r\n backgroundColor: '#f5f8fa',\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0))',\r\n 'input:hover ~ &': {\r\n backgroundColor: '#ebf1f5',\r\n },\r\n 'input:disabled ~ &': {\r\n boxShadow: 'none',\r\n background: 'rgba(206,217,224,.5)',\r\n },\r\n },\r\n checkedIcon: {\r\n backgroundColor: \"black\",\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))',\r\n '&:before': {\r\n display: 'block',\r\n width: 16,\r\n height: 16,\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath\" +\r\n \" fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 \" +\r\n \"1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='%23fff'/%3E%3C/svg%3E\\\")\",\r\n content: '\"\"',\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: \"black\",\r\n },\r\n },\r\n}));\r\n","import React, { useEffect, useState } from 'react';\r\nimport { bindActionCreators, compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport * as Actions from '../../../../Reducers/actions'\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nfunction EditButton(props) {\r\n var today = new Date();\r\n const [FromDate, setFromDate] = useState(today);\r\n const [ToDate, setToDate] = useState(today);\r\n const [projectQr, setProjectQR] = useState(null)\r\n const [projectId, setProjectId] = useState(null)\r\n const [ResourceName, setResourceName] = useState(\"\")\r\n const [CompanyName, setCompanyName] = useState(\"\")\r\n const [CompanyId, setCompanyId] = useState(null)\r\n const [ProjectName, setProjectName] = useState(\"\")\r\n const [projectrows, setProjectRows] = useState([])\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n setProjectQR(props.data.projectQr);\r\n setProjectName(props.data.projectName); \r\n setCompanyName(props.data.company);\r\n setCompanyId(props.data.companyId);\r\n setResourceName(props.data.resource);\r\n setFromDate(props.data.fromDate);\r\n setToDate(props.data.toDate);\r\n setProjectId(props.data.projectId);\r\n setProjectRows(props.data.details);\r\n }, [props.data.projectQr, props.data.projectName, props.data.company, props.data.companyId, props.data.resource, props.data.fromDate, props.data.toDate, props.data.projectId, props.data.details])\r\n\r\n const SaveAndRedirect = () => {\r\n let tempCompanyName = CompanyName;\r\n let tempCompanyId = CompanyId;\r\n let tempResourceName = ResourceName;\r\n let tempProjectName = ProjectName;\r\n let tempFromDate = FromDate;\r\n let tempToDate = ToDate;\r\n let tempProjectId = projectId;\r\n let tempProjectQR = projectQr;\r\n let tempProjectRows = projectrows.map(x => ({...x}));\r\n\r\n props.actions.companyAction(tempCompanyName)\r\n props.actions.companyIdAction(tempCompanyId)\r\n props.actions.resourceAction(tempResourceName)\r\n props.actions.fromDateAction(tempFromDate)\r\n props.actions.toDateAction(tempToDate)\r\n props.actions.detailsAction(tempProjectRows)\r\n props.actions.projectIdAction(tempProjectId)\r\n props.actions.projectNameAction(tempProjectName)\r\n props.actions.projectQrAction(tempProjectQR)\r\n history.push(\"/modify\");\r\n }\r\n\r\n return (\r\n <div>\r\n <IconButton style={{ borderRadius: 0, borderLeft: '1px solid rgba(0, 0, 0, 0.12)' }} onClick={SaveAndRedirect} size='large'>\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </div>\r\n )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n projects: state.projects,\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n actions: bindActionCreators(Actions, dispatch)\r\n})\r\n\r\nexport default compose(connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n))(EditButton);","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport { useState } from 'react';\r\nimport Table from '@mui/material/Table';\r\nimport QrButton from '../../../Shared/QrButton';\r\nimport FilterProjectRow from '../../../Shared/Tables/FilterProjectRow';\r\nimport EditButton from './EditButton';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport { TableContainer } from '@mui/material';\r\nimport TableFooter from '@mui/material/TableFooter';\r\nimport TablePagination from '@mui/material/TablePagination';\r\nimport PropTypes from 'prop-types';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport FirstPageIcon from '@mui/icons-material/FirstPage';\r\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft';\r\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight';\r\nimport LastPageIcon from '@mui/icons-material/LastPage';\r\nimport Paper from '@mui/material/Paper';\r\nimport SortByAlphaIcon from '@mui/icons-material/SortByAlpha';\r\nimport Tooltip from '@mui/material/Tooltip';\r\n\r\nfunction TablePaginationActions(props) {\r\n const theme = useTheme();\r\n const classes = useStyles();\r\n const { count, page, rowsPerPage, onPageChange } = props;\r\n\r\n const handleFirstPageButtonClick = (event) => {\r\n onPageChange(event, 0);\r\n };\r\n\r\n const handleBackButtonClick = (event) => {\r\n onPageChange(event, page - 1);\r\n };\r\n\r\n const handleNextButtonClick = (event) => {\r\n onPageChange(event, page + 1);\r\n };\r\n\r\n const handleLastPageButtonClick = (event) => {\r\n onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\r\n };\r\n\r\n return (\r\n <div className={classes.footer}>\r\n <IconButton\r\n onClick={handleFirstPageButtonClick}\r\n disabled={page === 0}\r\n aria-label=\"first page\"\r\n >\r\n {theme.direction === 'rtl' ? <LastPageIcon /> : <FirstPageIcon />}\r\n </IconButton>\r\n <IconButton\r\n onClick={handleBackButtonClick}\r\n disabled={page === 0}\r\n aria-label=\"previous page\"\r\n >\r\n {theme.direction === 'rtl' ? <KeyboardArrowRight /> : <KeyboardArrowLeft />}\r\n </IconButton>\r\n <IconButton\r\n onClick={handleNextButtonClick}\r\n disabled={page >= Math.ceil(count / rowsPerPage) - 1}\r\n aria-label=\"next page\"\r\n >\r\n {theme.direction === 'rtl' ? <KeyboardArrowLeft /> : <KeyboardArrowRight />}\r\n </IconButton>\r\n <IconButton\r\n onClick={handleLastPageButtonClick}\r\n disabled={page >= Math.ceil(count / rowsPerPage) - 1}\r\n aria-label=\"last page\"\r\n >\r\n {theme.direction === 'rtl' ? <FirstPageIcon /> : <LastPageIcon />}\r\n </IconButton>\r\n </div>\r\n );\r\n}\r\n\r\nTablePaginationActions.propTypes = {\r\n count: PropTypes.number.isRequired,\r\n onPageChange: PropTypes.func.isRequired,\r\n page: PropTypes.number.isRequired,\r\n rowsPerPage: PropTypes.number.isRequired,\r\n};\r\n\r\n\r\n\r\nexport default function TableManage(props) {\r\n const [page, setPage] = useState(0);\r\n const [rowsPerPage, setRowsPerPage] = useState(100);\r\n const currentDate = new Date();\r\n // Avoid a layout jump when reaching the last page with empty rows.\r\n // const emptyRows =\r\n // page > 0 ? Math.max(0, (1 + page) * rowsPerPage - props.rows.length) : 0;\r\n\r\n const handleChangePage = (event, newPage) => {\r\n setPage(newPage);\r\n };\r\n\r\n const handleChangeRowsPerPage = (event) => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n };\r\n\r\n const classes = useStyles();\r\n var measurementTypes = props.types;\r\n function reformatDate(dateStr) {\r\n let dArr = dateStr.split(\"-\");\r\n return dArr[2] + \"/\" + dArr[1] + \"/\" + dArr[0];\r\n }\r\n const datesAreOnSameDay = (first, second) =>\r\n first.getFullYear() === second.getFullYear() &&\r\n first.getMonth() === second.getMonth() &&\r\n first.getDate() === second.getDate();\r\n\r\n\r\n function dateRange(a_start, a_end, b_start, b_end) {\r\n if (a_start <= b_start && b_start <= a_end) return true; // b starts in a\r\n if (a_start <= b_end && b_end <= a_end) return true; // b ends in a\r\n if (b_start < a_start && a_end < b_end) return true; // a in b\r\n // if (b_start < a_start && a_end > b_end) return true; // a overlaps b\r\n //console.log(b_start, a_start)\r\n\r\n if (datesAreOnSameDay(a_start, b_start)) return true;\r\n if (datesAreOnSameDay(b_end, a_end)) return true;\r\n return false;\r\n }\r\n\r\n return (\r\n <TableContainer style={{ borderRadius: \"15px\" }} component={Paper}>\r\n <Table size=\"sm\" key={\"table\"}>\r\n <thead className={classes.headStyle} key={\"thead\"}>\r\n <tr className={classes.tableHeadRow} key={\"trow\"}>\r\n <th className={classes.tableHead} style={{ width: '20%' }}>\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n <Tooltip title=\"Alphabetical order\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.handleSorting('companyName')}>\r\n <SortByAlphaIcon />\r\n </IconButton>\r\n </Tooltip>\r\n Customer\r\n <Tooltip title=\"Search project\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.toggleFilter()}>\r\n <SearchIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead} style={{ width: '20%' }}>\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n <Tooltip title=\"Alphabetical order\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.handleSorting('projectName')}>\r\n <SortByAlphaIcon />\r\n </IconButton>\r\n </Tooltip>\r\n Project\r\n <Tooltip title=\"Search project\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.toggleFilter()}>\r\n <SearchIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead} style={{ width: '20%' }}>\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n <Tooltip title=\"Alphabetical order\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.handleSorting('resourceName')}>\r\n <SortByAlphaIcon />\r\n </IconButton>\r\n </Tooltip>\r\n Location\r\n <Tooltip title=\"Search location\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.toggleFilter()}>\r\n <SearchIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead} style={{ width: '20%' }}>\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n <Tooltip title=\"Sort descending\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.handleSorting('fromDate')}>\r\n <SortByAlphaIcon />\r\n </IconButton>\r\n </Tooltip>\r\n Date range\r\n\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead} style={{ width: '3%', paddingLeft: \"1rem\", paddingRight: \"1rem\" }}>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody key={\"tbody\"}>\r\n {props.filterOn && <FilterProjectRow rows={props.rows} filters={props.filters} filterProjects={props.filterProjects} updateFilters={props.updateFilters}></FilterProjectRow>}\r\n {(rowsPerPage > 0\r\n ? props.rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n : props.rows\r\n ).map((row) => (\r\n <tr className={classes.tableBodyRow} key={row.projectId}>\r\n <td>{row.companyName}</td>\r\n <td>{row.projectName}</td>\r\n <td>{row.resourceName}</td>\r\n <td>{reformatDate(row.fromDate.slice(0, 10)) + \" - \" + reformatDate(row.toDate.slice(0, 10))}</td>\r\n <td className={classes.actionButtons}>\r\n {\r\n dateRange(new Date(row.fromDate), new Date(row.toDate), new Date(currentDate), new Date(currentDate)) ?\r\n <QrButton projectName={row.projectName} QrCode={row.qrCode} size='large' />\r\n\r\n :\r\n <QrButton disabled projectName={row.projectName} QrCode={row.qrCode} size='large' />\r\n\r\n }\r\n <EditButton size='large' data={\r\n ({\r\n projectQr: row.qrCode,\r\n projectName: row.projectName,\r\n company: row.companyName,\r\n companyId: row.companyId,\r\n resource: row.resourceName,\r\n fromDate: row.fromDate,\r\n toDate: row.toDate,\r\n projectId: row.projectId,\r\n details: row.details,\r\n types: measurementTypes,\r\n })} />\r\n </td>\r\n </tr>\r\n ))}\r\n {props.rows.length === 0 &&\r\n <tr className={classes.tableBodyRow}>\r\n <td>No projects available</td>\r\n <td>-</td>\r\n <td>-</td>\r\n <td>-</td>\r\n <td>-</td>\r\n </tr>}\r\n </tbody>\r\n <TableFooter className={classes.tableFooter}>\r\n <TableRow>\r\n <TablePagination\r\n rowsPerPageOptions={[100, 200, 500, { label: 'All', value: -1 }]}\r\n colSpan={12}\r\n count={props.rows.length}\r\n rowsPerPage={rowsPerPage}\r\n page={page}\r\n SelectProps={{\r\n inputProps: {\r\n 'aria-label': 'rows per page',\r\n },\r\n native: true,\r\n }}\r\n onPageChange={handleChangePage}\r\n onRowsPerPageChange={handleChangeRowsPerPage}\r\n ActionsComponent={TablePaginationActions}\r\n />\r\n </TableRow>\r\n </TableFooter>\r\n </Table>\r\n </TableContainer>\r\n )\r\n}\r\nconst useStyles = makeStyles((theme) => ({\r\n tableHead: {\r\n height: '42px',\r\n borderRight: '2px solid #e6ecf0',\r\n },\r\n titleSearch: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n headStyle: {\r\n backgroundColor: \"#e0dce4\",\r\n },\r\n tableBodyRow: {\r\n justifyContent: \"center\",\r\n textAlign: \"center\",\r\n },\r\n actionButtons: {\r\n padding: '0px !important',\r\n textAlign: \"center\",\r\n display: \"flex\",\r\n justifyContent: \"center\"\r\n },\r\n tableFooter: {\r\n width: '100%'\r\n },\r\n footer: {\r\n display: 'flex',\r\n },\r\n icons: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n }\r\n}));\r\n","import React, { useState, useEffect } from \"react\";\r\nimport TitlePage from \"../../Shared/TitlePage\";\r\nimport TableManage from \"./Components/TableManage\";\r\nimport { dataService } from \"../../../Services/data/data.service\";\r\nimport { fromNewDateFormatToYYYYMMDDSlash } from \"../../../Utils/dateHelper\";\r\nimport { Grid } from \"@mui/material\";\r\nimport Divider from '@mui/material/Divider';\r\nimport DateSelectionFuture from \"../../Shared/DateSelection/DateSelectionFuture\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { ProjectFilterTypes } from '../../../Config/constants';\r\nimport Button from '@mui/material/Button';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\n\r\n\r\nfunction ManagePage(props) {\r\n var today = new Date();\r\n var nextMonth = new Date();\r\n nextMonth.setDate(nextMonth.getDate() + 30);\r\n const history = useHistory();\r\n const [firstLoad, setFirstLoad] = useState(0);\r\n const [FromDate, setFromDate] = useState(today);\r\n const [ToDate, setToDate] = useState(nextMonth);\r\n const GetUserID = props.Login.userid;\r\n const classes = useStyles();\r\n const [types, setTypes] = useState([]);\r\n const [filters, setFilters] = useState([]);\r\n const [filterOn, setFilterOn] = useState(false);\r\n const [measurementRows, setMeasurementRows] = useState([]);\r\n const [projects, setProjects] = useState([]);\r\n const [selectedFilter, setSelectedFilter] = useState(8);\r\n\r\n const theme = createTheme({\r\n palette: {\r\n neutral: {\r\n main: '#C3996B',\r\n contrastText: '#fff',\r\n },\r\n },\r\n });\r\n useEffect(() => {\r\n dataService.getTypes().then(results => {\r\n setTypes(results.sort((a, b) => a.description.localeCompare(b.description)));\r\n })\r\n }, [])\r\n const setTheFromDate = (event) => {\r\n if (event !== FromDate) {\r\n setFromDate(event);\r\n setDates(event, ToDate);\r\n }\r\n }\r\n const setTheToDate = (event) => {\r\n if (event !== ToDate) {\r\n setToDate(event);\r\n setDates(FromDate, event);\r\n }\r\n }\r\n\r\n const setDates = (fromDate, toDate) => {\r\n setToDate(toDate);\r\n setFromDate(fromDate);\r\n sendApi(fromDate, toDate);\r\n }\r\n\r\n const getEditedDetails = (details) => {\r\n return details.map(x => ({ description: x.description, typeId: x.typeId, id: x.id, edit: false, sequence: x.sequence, color: x.color })).sort((a, b) => b.sequence + a.sequence);\r\n }\r\n\r\n const sendApi = (fromDate, toDate) => {\r\n // eslint-disable-next-line\r\n let TempMeasurementRows;\r\n dataService.getMeasurementForModify(GetUserID, fromNewDateFormatToYYYYMMDDSlash(new Date(fromDate)), fromNewDateFormatToYYYYMMDDSlash(new Date(toDate))).then(results => {\r\n TempMeasurementRows = (results.map(\r\n x => x.details.map(\r\n y => ({\r\n details: getEditedDetails(x.details),\r\n projectId: x.projectId,\r\n toDate: x.toDate,\r\n fromDate: x.fromDate,\r\n Id: y.id,\r\n typeId: y.typeId,\r\n companyId: x.companyId,\r\n qrCode: x.qrCode,\r\n companyName: x.companyName,\r\n projectName: x.projectName,\r\n resourceName: x.resourceName,\r\n description: y.description,\r\n sequence: y.sequence\r\n }))))\r\n let sort = results.sort(function (a, b) {\r\n // Turn your strings into dates, and then subtract them\r\n // to get a value that is either negative, positive, or zero.\r\n return new Date(b.fromDate) - new Date(a.fromDate);\r\n });\r\n \r\n setMeasurementRows(sort)\r\n setProjects(sort);\r\n })\r\n }\r\n\r\n if (firstLoad === 0) {\r\n sendApi(FromDate, ToDate);\r\n setFirstLoad(1);\r\n }\r\n\r\n const filter = [\r\n { number: 1, column: \"companyName\", sortOrder: \"ASC\" },\r\n { number: 2, column: \"companyName\", sortOrder: \"DESC\" },\r\n { number: 3, column: \"projectName\", sortOrder: \"ASC\" },\r\n { number: 4, column: \"projectName\", sortOrder: \"DESC\" },\r\n { number: 5, column: \"resourceName\", sortOrder: \"ASC\" },\r\n { number: 6, column: \"resourceName\", sortOrder: \"DESC\" },\r\n { number: 7, column: \"fromDate\", sortOrder: \"ASC\" },\r\n { number: 8, column: \"fromDate\", sortOrder: \"DESC\" },\r\n ]\r\n\r\n const dynamicSorting = (property) => {\r\n var sortOrder = 1;\r\n if (property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n let asc = false;\r\n let desc = false;\r\n /* SC: Filter now works both ways (ASC, DESC) */\r\n if (filter.find(x => x.number === selectedFilter).column === property) {\r\n if (filter.find(x => x.number === selectedFilter).sortOrder === 'ASC') {\r\n desc = true;\r\n asc = false;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'DESC').number);\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'ASC').number);\r\n }\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'ASC').number);\r\n }\r\n if (asc === true) {\r\n return function (a, b) {\r\n var result = (a[property].toLowerCase() > b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n } else {\r\n return function (a, b) {\r\n var result = (a[property].toLowerCase() < b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n }\r\n }\r\n\r\n const handleSorting = (sortType) => {\r\n let tempMeasurementRows = [...projects];\r\n setProjects(tempMeasurementRows.sort(dynamicSorting(sortType)));\r\n }\r\n\r\n\r\n const toggleFilter = () => {\r\n if (filterOn) {\r\n setFilters([]);\r\n }\r\n setFilterOn(!filterOn);\r\n }\r\n\r\n const updateFilters = (type, event) => {\r\n let tempFilters = [...filters];\r\n if (tempFilters.some(x => x.type === type)) {\r\n let index = tempFilters.indexOf(tempFilters.find(x => x.type === type));\r\n tempFilters.splice(index, 1);\r\n tempFilters.unshift({ type: type, filterValue: event.target.value });\r\n }\r\n else {\r\n tempFilters.unshift({ type: type, filterValue: event.target.value });\r\n }\r\n\r\n setFilters(tempFilters);\r\n filterProjects(tempFilters);\r\n }\r\n\r\n const filterProjects = (thisFilters) => {\r\n let varFilteredProjects = [...measurementRows]\r\n var i;\r\n for (i = 0; i < thisFilters.length; i++) {\r\n let filter = thisFilters[i]\r\n switch (filter.type) {\r\n case ProjectFilterTypes.CUSTOMER:\r\n varFilteredProjects = varFilteredProjects.filter(x => x.companyName.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n case ProjectFilterTypes.PROJECT_NAME:\r\n varFilteredProjects = varFilteredProjects.filter(x => x.projectName.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n case ProjectFilterTypes.LOCATION_NAME:\r\n varFilteredProjects = varFilteredProjects.filter(x => x.resourceName.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n default:\r\n varFilteredProjects = varFilteredProjects.filter(x => x.companyName.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n }\r\n }\r\n setProjects(varFilteredProjects)\r\n }\r\n\r\n const navigateTo = (destination) => {\r\n history.push(destination);\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Manage your projects\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n <Grid\r\n container\r\n columnSpacing={3}\r\n rowSpacing={1}\r\n alignItems=\"center\">\r\n <Grid item xs={12} >\r\n <div className={classes.dateAndCreateDiv}>\r\n <div className={classes.dateSelectionDiv}>\r\n <p className={classes.activeFor}>Active between: </p>\r\n <DateSelectionFuture setDates={setDates} FromDate={FromDate} ToDate={ToDate} setTheFromDate={setTheFromDate} setTheToDate={setTheToDate} />\r\n </div>\r\n <div>\r\n <ThemeProvider theme={theme}>\r\n <Button size='large' className={classes.linkButton} color='neutral' variant=\"contained\" onClick={() => navigateTo('/create')}\r\n >\r\n <span className={classes.iconItem}>\r\n <AddIcon></AddIcon>\r\n </span>Create a project\r\n </Button>\r\n </ThemeProvider>\r\n </div>\r\n </div>\r\n <Divider style={{ marginTop: \"1rem\", marginBottom: \"1rem\" }}></Divider>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <TableManage toggleFilter={toggleFilter} filters={filters} handleSorting={handleSorting} filterOn={filterOn} filterProjects={filterProjects} updateFilters={updateFilters} types={types} rows={projects} />\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ManagePage;\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n titleTextStyle: {\r\n marginLeft: \"20px\",\r\n },\r\n titleSection: {\r\n width: \"100%\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"10%\",\r\n paddingRight: \"10%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#FFFFFF\",\r\n justifyContent: \"space-between\"\r\n },\r\n dateAndCreateDiv: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'end',\r\n flexWrap: 'wrap',\r\n\r\n\r\n },\r\n activeFor: {\r\n color: \"#696969\",\r\n fontSize: \"15px\",\r\n },\r\n backIcon: {\r\n padding: \"20px\",\r\n cursor: \"pointer\"\r\n },\r\n iconItem: {\r\n display: 'flex !important',\r\n alignItems: 'center !important'\r\n }\r\n\r\n});","import React from 'react';\r\nimport TextField from '@mui/material/TextField';\r\nimport Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete';\r\n\r\nfunction DropdownCompanyAdd(props) {\r\n\r\n const dropdownList = props.companies.map(x => { return { label: x.name, value: x.id } })\r\n const filter = createFilterOptions();\r\n\r\n return (\r\n <Autocomplete\r\n filterOptions={(options, params) => {\r\n const filtered = filter(options, params);\r\n const { inputValue } = params;\r\n // Suggest the creation of a new value\r\n const isExisting = options.some((option) => inputValue === option.label);\r\n if (inputValue !== '' && !isExisting) {\r\n filtered.push({\r\n inputValue,\r\n label: `Add \"${inputValue}\"`,\r\n });\r\n }\r\n return filtered;\r\n }}\r\n freeSolo\r\n value = {props.value}\r\n options={dropdownList.sort((a, b) => a.label.localeCompare(b.label))}\r\n getOptionLabel={(option) => {\r\n // Value selected with enter, right from the input\r\n if (typeof option === 'string') {\r\n return option;\r\n }\r\n // Add \"xxx\" option created dynamically\r\n if (option.inputValue) {\r\n return option.inputValue;\r\n }\r\n // Regular option\r\n return option.label;\r\n }}\r\n inputValue={props.value? props.value:\"\"}\r\n onInputChange={(e) => props.action(e)}\r\n renderOption={(props, option) => <li {...props}>{option.label}</li>}\r\n onChange={(event, newValue) => {\r\n if (typeof newValue === 'string') {\r\n props.action(newValue)\r\n props.action2(newValue)\r\n } else if (newValue && newValue.inputValue) {\r\n props.action2(newValue)\r\n props.action(newValue)\r\n } else {\r\n props.action(event)\r\n }\r\n\r\n }} renderInput={(params) => <TextField\r\n error={props.error}\r\n helperText={props.helperText} {...params} InputLabelProps={{ shrink: false }} label={props.value ? \" \" : \"Company\"} onChange={(event) => props.action(event)} />}\r\n />\r\n );\r\n}\r\n\r\nexport default DropdownCompanyAdd","import React, { useEffect, useState } from 'react';\r\nimport TextfieldInput from '../../Shared/TextField';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport DateSelectionFuture from \"../../Shared/DateSelection/DateSelectionFuture\";\r\nimport TableDragResources from '../../Shared/Tables/TableDragResources';\r\nimport DescriptionItem from '../../Shared/DescriptionItem';\r\nimport DropdownCompanyAdd from './Components/DropdownCopmanyAdd';\r\nimport DropdownResources from '../../Shared/Dropdowns/DropdownResources';\r\nimport ButtonNormalText from '../../Shared/Buttons/ButtonNormalText';\r\nimport ButtonSave from '../../Shared/Buttons/ButtonSave';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Grid } from '@mui/material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Divider from '@mui/material/Divider';\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { toast } from 'react-toastify';\r\n\r\nfunction DuplicatePage(props) {\r\n\r\n const classes = useStyles();\r\n var today = new Date();\r\n const [FromDate, setFromDate] = useState(today);\r\n const [ToDate, setToDate] = useState(today);\r\n const [ResourceName, setResourceName] = useState(\"\");\r\n const [CompanyName, setCompanyName] = useState(\"\");\r\n const [CompanyId, setCompanyId] = useState(null);\r\n const [ProjectName, setProjectName] = useState(\"\");\r\n const [companies, setCompanies] = useState([]);\r\n const [resources, setResources] = useState([]);\r\n const [projectrows, setProjectRows] = useState([]);\r\n const [open, setOpen] = useState(false);\r\n const [defopen, setDefOpen] = useState(false);\r\n const history = useHistory();\r\n const GetUserID = props.Login.userid;\r\n const [helperTextProjectName, setHelperTextProjectName] = useState(null);\r\n const [helperTextCompany, setHelperTextCompany] = useState(null);\r\n const [helperTextResourceDescription, setHelperTextResourceDescription] = useState(null);\r\n const [errorProjectName, setErrorProjectName] = useState(false);\r\n const [errorCompany, setErrorCompany] = useState(false);\r\n const [errorResourceDescription, setErrorResourceDescription] = useState(false);\r\n const [emptyDetails, setEmptyDetails] = useState(false);\r\n\r\n useEffect(() => {\r\n dataService.getCompanies(GetUserID).then(results => {\r\n setCompanies(results)\r\n })\r\n dataService.getResources(GetUserID).then(results => {\r\n setResources(results)\r\n });\r\n setProjectName(props.projectCopy.projectName);\r\n setCompanyName(props.projectCopy.company);\r\n setCompanyId(props.projectCopy.companyId);\r\n setResourceName(props.projectCopy.resource);\r\n\r\n let fDate = \"\";\r\n if (props.projectCopy.fromDate != null) {\r\n fDate = new Date(props.projectCopy.fromDate);\r\n }\r\n else {\r\n fDate = new Date(today);\r\n }\r\n fDate.setHours(12, 0, 0, 0);\r\n setFromDate(fDate);\r\n let tDate = \"\";\r\n if (props.projectCopy.toDate != null) {\r\n tDate = new Date(props.projectCopy.toDate);\r\n }\r\n else {\r\n tDate = new Date(today);\r\n }\r\n tDate.setHours(12, 0, 0, 0);\r\n setToDate(tDate);\r\n\r\n let tempProjectRows = [];\r\n if (props.projectCopy.details.some(x => x.id)) {\r\n tempProjectRows = props.projectCopy.details.map(x => ({ color: x.color, typeId: x.typeId, type: x.typeId, description: x.description, Id: x.id, edit: false, sequence: x.sequence, dataListId: x.dataListId, externalApiId: x.externalApiId }));\r\n } else {\r\n tempProjectRows = props.projectCopy.details.map(x => ({ ...x }));\r\n }\r\n tempProjectRows.sort((a, b) => a.sequence - b.sequence);\r\n setProjectRows(tempProjectRows);\r\n }, [GetUserID, props.projectCopy.company, props.projectCopy.companyId, props.projectCopy.resource, props.projectCopy.fromDate, props.projectCopy.toDate, props.projectCopy.details])\r\n\r\n const setProject = (event) => {\r\n setProjectName(event.target.value);\r\n }\r\n\r\n const setTheFromDate = (event) => {\r\n setFromDate(event);\r\n }\r\n\r\n const setTheToDate = (event) => {\r\n setToDate(event);\r\n }\r\n\r\n const handleDialogClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n const handleDialogCloseDef = () => {\r\n setDefOpen(false);\r\n }\r\n\r\n const setNewCompanyFunction = (event) => {\r\n dataService.saveCompany(event.inputValue, GetUserID).then(results => {\r\n let newCompany = { id: results.id, name: results.name };\r\n let tempCompanies = [...companies];\r\n tempCompanies.push(newCompany);\r\n setCompanies(tempCompanies);\r\n setCompanyId(results.id);\r\n setCompanyName(results.name);\r\n })\r\n }\r\n\r\n const setCompany = (event) => {\r\n if (event.inputValue) {\r\n if (companies.some(x => x.name === event.inputValue)) {\r\n setCompanyId(companies.find(x => x.name === event.inputValue).id);\r\n setCompanyName(event.inputValue);\r\n }\r\n }\r\n else {\r\n if (event.target.textContent) {\r\n if (companies.some(x => x.name === event.target.textContent)) {\r\n setCompanyId(companies.find(x => x.name === event.target.textContent).id);\r\n setCompanyName(event.target.textContent);\r\n }\r\n }\r\n else {\r\n\r\n if (companies.some(x => x.name === event.target.value)) {\r\n setCompanyId(companies.find(x => x.name === event.target.value).id);\r\n }\r\n setCompanyName(event.target.value);\r\n }\r\n }\r\n\r\n }\r\n\r\n const setResource = (event) => {\r\n if (event.inputValue) {\r\n setResourceName(event.inputValue);\r\n }\r\n else {\r\n if (event.target.textContent) {\r\n setResourceName(event.target.textContent);\r\n }\r\n else {\r\n setResourceName(event.target.value);\r\n }\r\n }\r\n }\r\n\r\n const sendToApi = () => {\r\n if (ProjectName === \"\" || ResourceName === \"\" || CompanyId === \"\" || CompanyName === \"\" || FromDate === \"\" || ToDate === \"\" || ResourceName == null || FromDate == null || ToDate == null) {\r\n if (ProjectName === \"\") {\r\n setHelperTextProjectName(\"Please enter a project name.\");\r\n setErrorProjectName(true);\r\n }\r\n else {\r\n setHelperTextProjectName(null);\r\n setErrorProjectName(false);\r\n }\r\n if (ResourceName === \"\" || ResourceName === null || ResourceName === undefined) {\r\n setHelperTextResourceDescription(\"Please Select or enter a Location.\");\r\n setErrorResourceDescription(true);\r\n }\r\n else {\r\n setHelperTextResourceDescription(null);\r\n setErrorResourceDescription(false);\r\n }\r\n if (CompanyId === \"\" || CompanyId === null || CompanyName === \"\" || CompanyName === null || CompanyName === undefined) {\r\n setHelperTextCompany(\"Please Select or Create a Company.\");\r\n setErrorCompany(true);\r\n }\r\n else {\r\n setHelperTextCompany(null);\r\n setErrorCompany(false);\r\n }\r\n }\r\n else {\r\n setHelperTextResourceDescription(null)\r\n setErrorResourceDescription(false)\r\n setHelperTextCompany(null)\r\n setErrorCompany(false)\r\n setHelperTextProjectName(null)\r\n setErrorProjectName(false)\r\n setEmptyDetails(false)\r\n if (projectrows.length === 0 || projectrows.find(x => x.Id).edit === true) {\r\n setEmptyDetails(true)\r\n }\r\n else {\r\n let i = 1;\r\n let projectDetails = projectrows.map(x => ({ description: x.description, typeId: x.type, type: x.type, sequence: i++, color: x.color, dataListId: x.dataListId, HasComment: x.comment, externalApiId: x.externalApiId, price: x.price, isProfit: x.isProfit })).sort((a, b) => b.sequence + a.sequence);\r\n\r\n dataService.createNewProject(GetUserID, ProjectName, ResourceName, CompanyId, CompanyName, FromDate, ToDate, projectDetails).then(result => {\r\n if (result.success === true) {\r\n toast.success('Project was saved successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n\r\n }\r\n let tempProjectName = ProjectName;\r\n let tempFromDate = FromDate;\r\n let tempToDate = ToDate;\r\n let tempCompanyName = CompanyName;\r\n let tempCompanyId = CompanyId;\r\n let tempResourceName = ResourceName;\r\n let tempProjectRows = projectrows.map(x => ({ ...x }));\r\n\r\n props.actions.projectIdAction(result.createmodel.projectID)\r\n props.actions.projectQrAction(result.createmodel.qrCode)\r\n props.actions.projectNameAction(tempProjectName)\r\n props.actions.companyAction(tempCompanyName);\r\n props.actions.companyIdAction(tempCompanyId);\r\n props.actions.resourceAction(tempResourceName);\r\n props.actions.fromDateAction(tempFromDate);\r\n props.actions.toDateAction(tempToDate);\r\n props.actions.detailsAction(tempProjectRows);\r\n });\r\n history.push(\"/modify\");\r\n }\r\n\r\n }\r\n }\r\n\r\n const setDates = (fromDate, toDate) => {\r\n setTheToDate(toDate);\r\n setTheFromDate(fromDate);\r\n }\r\n\r\n const save = (newProjectrows) => {\r\n setProjectRows(newProjectrows);\r\n }\r\n return (\r\n <div>\r\n\r\n <TitlePage Text=\"Create project from an existing one\" backbutton={true} {...props} />\r\n\r\n <div className={classes.container}>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Project Name\" />\r\n <TextfieldInput value={ProjectName} action={setProject} label={ProjectName ? \" \" : \"Project\"} InputLabelProps={{ shrink: false }} helperText={helperTextProjectName} error={errorProjectName} />\r\n </div>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Company name\" />\r\n <DropdownCompanyAdd companies={companies} value={CompanyName} action={setCompany} action2={setNewCompanyFunction} helperText={helperTextCompany} error={errorCompany} />\r\n </div>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Location\" />\r\n <DropdownResources resources={resources} value={ResourceName} action={setResource} helperText={helperTextResourceDescription} error={errorResourceDescription} />\r\n </div>\r\n </div>\r\n\r\n <Grid item xs={12}>\r\n <DescriptionItem Text=\"Active between:\" />\r\n <DateSelectionFuture setDates={setDates} FromDate={FromDate} ToDate={ToDate} setTheFromDate={setTheFromDate} setTheToDate={setTheToDate} />\r\n <Divider style={{ marginBottom: \"1rem\", marginTop: \"1rem\" }}></Divider>\r\n </Grid>\r\n {emptyDetails === true ?\r\n <div>\r\n <Grid item xs={12} sm={12} md={12} style={{ border: \"solid 2px\", borderColor: \"#d32f2f\", borderRadius: \"17px\" }}>\r\n <TableDragResources {...props} rows={projectrows} setRows={setProjectRows} makeSave={save} />\r\n </Grid>\r\n <p style={{ color: \"#d32f2f\", fontWeight: \"400\", fontSize: \"0.75rem\", fontFamily: \"Roboto, Helvetica, Arial\", letterSpacing: \"0.03333em\" }}>Please create atleast one item.</p>\r\n </div>\r\n :\r\n <div>\r\n <Grid item xs={12} sm={12} md={12}>\r\n <TableDragResources {...props} rows={projectrows} setRows={setProjectRows} makeSave={save} />\r\n </Grid>\r\n </div>}\r\n <div className={classes.buttonContainer}>\r\n <ButtonSave startIcon={<SaveIcon />} content=\"Save\" onClick={sendToApi} />\r\n </div>\r\n </div>\r\n\r\n <Dialog\r\n open={open}\r\n onClose={handleDialogClose}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">\r\n {\"Error\"}\r\n </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id=\"alert-dialog-description\">\r\n Some fields are empty.\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <ButtonNormalText content=\"Close\" onClick={handleDialogClose}>Close</ButtonNormalText>\r\n </DialogActions>\r\n </Dialog>\r\n\r\n\r\n <Dialog\r\n open={defopen}\r\n onClose={handleDialogCloseDef}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">\r\n {\"Error\"}\r\n </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id=\"alert-dialog-description\">\r\n Please make atleast one Description item.\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <ButtonNormalText content=\"Close\" onClick={handleDialogCloseDef}>Close</ButtonNormalText>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DuplicatePage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n buttonContainer: {\r\n marginTop: '15px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n projectOptions: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap',\r\n width: '100%'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap',\r\n width: '100%'\r\n }\r\n },\r\n projectOption: {\r\n [theme.breakpoints.up('md')]: {\r\n width: \"100%\",\r\n marginRight: '25px',\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n}));","import React, { useEffect, useState } from \"react\";\r\nimport Table from '@mui/material/Table';\r\nimport Fab from '@mui/material/Fab';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport TextField from '@mui/material/TextField';\r\nimport { TableContainer, TableRow } from '@mui/material';\r\nimport './TableStyle.css';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport IconButton from '@mui/material/IconButton';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport Select from '@mui/material/Select';\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Paper from '@mui/material/Paper';\r\n\r\nfunction TableList(props) {\r\n const classes = useStyles();\r\n var today = new Date();\r\n const [saveHelper, setSaveHelper] = useState(false);\r\n\r\n useEffect(() => {\r\n\r\n // eslint-disable-next-line \r\n }, [props.Login.userid])\r\n\r\n const setItemName = (event, id) => {\r\n let tempArray = [...props.rows]\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).itemName = event.target.value\r\n } else {\r\n tempArray.find(x => x.edit === true).itemName = event.target.value;\r\n }\r\n props.setRows(tempArray)\r\n }\r\n\r\n const setItemDescription = (event, id) => {\r\n let tempArray = [...props.rows]\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).itemDescription = event.target.value\r\n } else {\r\n tempArray.find(x => x.edit === true).itemDescription = event.target.value;\r\n }\r\n props.setRows(tempArray)\r\n }\r\n\r\n const GenerateID = () => {\r\n let tempArray = [...props.rows];\r\n const ids = tempArray.map(object => {\r\n return object.Id;\r\n });\r\n\r\n const max = Math.max(...ids);\r\n\r\n if (tempArray.length === 0) {\r\n return 1;\r\n }\r\n else {\r\n let index = max;\r\n index++;\r\n return index;\r\n }\r\n }\r\n\r\n const editListItem = (id) => {\r\n let tempArray = [...props.rows]\r\n tempArray.find(x => x.Id === id).edit = true\r\n props.setRows(tempArray)\r\n }\r\n\r\n const saveListItem = (id) => {\r\n let tempArray = [...props.rows]\r\n if (tempArray.find(x => x.Id === id).itemName !== \"\" && tempArray.find(x => x.Id === id).itemName !== null) {\r\n tempArray.find(x => x.Id === id).edit = false\r\n props.setRows(tempArray)\r\n setSaveHelper(false)\r\n }\r\n else{\r\n setSaveHelper(true)\r\n }\r\n }\r\n\r\n const deleteListItem = (id) => {\r\n let tempArray = [...props.rows]\r\n let index = tempArray.indexOf(tempArray.find(x => x.Id === id))\r\n tempArray.splice(index, 1)\r\n props.setRows(tempArray)\r\n }\r\n\r\n const addRow = () => {\r\n let Rowid = { Id: GenerateID(), itemDescription: \"\", edit: true, itemName: \"\", UserID: props.Login.userid, InsertedOn: today }\r\n let PrevId = GenerateID() - 1;\r\n var tempArray = [...props.rows]\r\n if (tempArray.find(x => x.itemName === \"\") === undefined) {\r\n if (tempArray.length !== 0) {\r\n if (tempArray.find(x => x.Id === PrevId).itemName !== \"\") {\r\n tempArray.find(x => x.Id === PrevId).edit = false\r\n setSaveHelper(false)\r\n tempArray.push(Rowid)\r\n props.setRows(tempArray)\r\n }\r\n else {\r\n tempArray.push(Rowid)\r\n props.setRows(tempArray)\r\n }\r\n }\r\n else {\r\n tempArray.push(Rowid)\r\n props.setRows(tempArray)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <TableContainer style={{ borderRadius: \"15px\" }} component={Paper}>\r\n <Table>\r\n <thead className={classes.tableHead}>\r\n <tr>\r\n <th style={{ paddingRight: '6px', paddingLeft: '6px' }}>#</th>\r\n <th width=\"30%\">Name</th>\r\n <th width=\"60%\">Description</th>\r\n <th width=\"10%\" colSpan={2} style={{ paddingLeft: \"50px\", paddingRight: \"43px\" }} >Action</th>\r\n </tr>\r\n </thead>\r\n <tbody align=\"center\" className={classes.tableContent}>\r\n {\r\n props.rows.map(x =>\r\n <TableRow key={x.Id} className={classes.tableRow}>\r\n <td className={classes.indexTd} >\r\n <div className={classes.listOrder}>\r\n {x.Id}\r\n </div>\r\n </td>\r\n <td className={classes.tableTd}>\r\n {x.edit ?// eslint-disable-next-line\r\n <TextField label={x.itemName ? \" \" : \"Name\"} InputLabelProps={{ shrink: false }} style={saveHelper?{ border: \"solid 2px\", borderColor: \"#d32f2f\", borderRadius: \"7px\", width: '100%', minWidth: \"100px\" }:{ width: '100%', minWidth: \"100px\" }} type={\"search\"} variant=\"outlined\" value={x.itemName.length > 0 ? x.itemName : ''} onChange={(event) => setItemName(event, x.Id)} /> :\r\n <TextField style={{ width: '100%', minWidth: \"100px\" }} disabled value={x.itemName} />\r\n }\r\n </td>\r\n <td className={classes.tableTd}>\r\n {x.edit ?// eslint-disable-next-line\r\n <TextField label={x.itemDescription ? \" \" : \"Description\"} InputLabelProps={{ shrink: false }} style={{ width: '100%', minWidth: \"140px\" }} className={classes.descriptionField} id=\"outlined-basic\" type={\"search\"} variant=\"outlined\" value={x.itemDescription.length > 0 ? x.itemDescription : ''} onChange={(event) => setItemDescription(event, x.Id)} /> :\r\n <TextField style={{ width: '100%', minWidth: \"140px\" }} disabled value={x.itemDescription !== \"\" ? x.itemDescription : x.description} />\r\n }\r\n </td>\r\n <td className={classes.tableTd} align=\"center\">\r\n {x.edit ?\r\n <IconButton aria-label=\"save\" onClick={() => saveListItem(x.Id)} className={classes.editButton} size=\"large\">\r\n <SaveIcon fontSize=\"inherit\" />\r\n </IconButton> :\r\n <IconButton aria-label=\"edit\" onClick={() => editListItem(x.Id)} className={classes.editButton} size=\"large\">\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n }\r\n </td>\r\n <td className={classes.tableTd}>\r\n <IconButton aria-label=\"delete\" onClick={() => deleteListItem(x.Id)} className={classes.functionButton} color='error' size=\"large\">\r\n <DeleteIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </td>\r\n </TableRow>\r\n )\r\n }\r\n <TableRow className={classes.addRow} onClick={addRow}>\r\n <td className={classes.indexTd}>\r\n -\r\n </td>\r\n <td className={classes.tableTd} style={{ minWidth: \"100px\" }}>\r\n <FormControl fullWidth>\r\n <InputLabel>Name</InputLabel>\r\n <Select\r\n IconComponent={() => (null\r\n )} disabled />\r\n </FormControl>\r\n </td>\r\n <td className={classes.tableTd} style={{ minWidth: \"140px\" }}>\r\n <FormControl fullWidth>\r\n <InputLabel>Description</InputLabel>\r\n <Select\r\n IconComponent={() => (null\r\n )} disabled />\r\n </FormControl>\r\n </td>\r\n <td className={classes.tableTd} colSpan=\"2\" align=\"center\">\r\n <Fab size=\"medium\">\r\n <AddIcon />\r\n </Fab>\r\n </td>\r\n\r\n </TableRow>\r\n </tbody>\r\n </Table>\r\n </TableContainer>\r\n )\r\n}\r\n\r\nexport default TableList;\r\n\r\nconst useStyles = makeStyles({\r\n tableContent: {\r\n paddingTop: \"15px\",\r\n },\r\n tableRow: {\r\n height: '60px',\r\n },\r\n tableHead: {\r\n backgroundColor: \"#e0dce4\",\r\n marginBottom: \"15px\",\r\n },\r\n addRow: {\r\n opacity: \"0.3\"\r\n },\r\n tableTd: {\r\n padding: \"5px\",\r\n },\r\n descriptionField: {\r\n width: \"100%\",\r\n },\r\n editButton: {\r\n fontSize: '2rem !important',\r\n color: '#0B4097 !important',\r\n },\r\n functionButton: {\r\n fontSize: '2rem !important',\r\n },\r\n indexTd: {\r\n borderRight: '2px solid rgb(224, 224, 224)',\r\n width: '25px',\r\n background: 'rgba(0, 0, 0, 0.54)',\r\n color: 'white',\r\n zIndex: '2',\r\n },\r\n emptydrag: {\r\n padding: '17px !important',\r\n border: '0'\r\n },\r\n listOrder: {\r\n paddingLeft: '5px',\r\n paddingRight: '5px',\r\n },\r\n dragTd: {\r\n border: '0',\r\n width: '24px',\r\n },\r\n dragIcon: {\r\n float: 'left',\r\n },\r\n});","import React, { useEffect, useState } from 'react';\r\nimport TextfieldInput from '../../Shared/TextField';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport DescriptionItem from '../../Shared/DescriptionItem';\r\nimport ButtonSave from '../../Shared/Buttons/ButtonSave';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Grid } from '@mui/material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport TableList from './Components/TableCreateList';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nfunction CreateListPage(props) {\r\n\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const GetUserID = props.Login.userid;\r\n const [listName, setListName] = useState(\"\");\r\n const [listDescription, setListDescription] = useState(\"\");\r\n const [helperTextListName, setHelperTextListName] = useState(null);\r\n const [errorListName, setErrorListName] = useState(false);\r\n const [emptyDetails, setEmptyDetails] = useState(false);\r\n const [listItems, setListItems] = useState([]);\r\n var today = new Date();\r\n\r\n useEffect(() => {\r\n }, [props.Login.userid]);\r\n\r\n const setList = (event) => {\r\n setListName(event.target.value);\r\n }\r\n\r\n const setDescription = (event) => {\r\n setListDescription(event.target.value);\r\n }\r\n\r\n const sendToApi = () => {\r\n if (listName === \"\") {\r\n setHelperTextListName(\"Please enter a dropdown name.\")\r\n setErrorListName(true)\r\n }\r\n else {\r\n setHelperTextListName(null)\r\n setErrorListName(false)\r\n setEmptyDetails(false)\r\n if (listItems.length === 0 || listItems[0].itemName === \"\") {\r\n setEmptyDetails(true)\r\n }\r\n else if (listItems[listItems.findIndex(x => x.itemName === \"\")]) {\r\n let DataListItemsToRemove = [...listItems];\r\n let RemoveObjectId = DataListItemsToRemove[DataListItemsToRemove.findIndex(x => x.itemName === \"\")].Id;\r\n DataListItemsToRemove.splice(RemoveObjectId - 1, 1);\r\n let userid = props.Login.userid\r\n let DataListItems = DataListItemsToRemove.map(x => ({Id: x.Id, Name: x.itemName, Description: x.itemDescription, InsertedOn: x.InsertedOn, InsertedByUserId: x.userid}));\r\n dataService.createNewDataList(listName, listDescription, today, userid, DataListItems).then(results => {\r\n props.actions.listIdAction(results.id)\r\n props.actions.listNameAction(results.name)\r\n props.actions.listDescriptionAction(results.description)\r\n props.actions.listItemsAction(results.dataListItems.map(x => ({Id: x.id, itemName: x.name, itemDescription: x.description, InsertedOn: x.insertedOn, InsertedByUserId: x.insertedByUserId})))\r\n })\r\n history.push(\"/modifydropdown\")\r\n }\r\n else {\r\n // API CALL HERE\r\n let userid = props.Login.userid\r\n let DataListItems = listItems.map(x => ({Id: x.Id, Name: x.itemName, Description: x.itemDescription, InsertedOn: x.InsertedOn, InsertedByUserId: x.userid}));\r\n dataService.createNewDataList(listName, listDescription, today, userid, DataListItems).then(results => {\r\n props.actions.listIdAction(results.id)\r\n props.actions.listNameAction(results.name)\r\n props.actions.listDescriptionAction(results.description)\r\n props.actions.listItemsAction(results.dataListItems.map(x => ({Id: x.id, itemName: x.name, itemDescription: x.description, InsertedOn: x.insertedOn, InsertedByUserId: x.insertedByUserId})))\r\n })\r\n history.push(\"/modifydropdown\")\r\n }\r\n\r\n }\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Create a new dropdown\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Name of your dropdown\" />\r\n <TextfieldInput value={listName} action={setList} label={listName ? \" \" : \"Dropdown\"} InputLabelProps={{ shrink: false }} helperText={helperTextListName} error={errorListName} />\r\n </div>\r\n </div> \r\n <div className={classes.projectOptions}>\r\n <div className={classes.listDescriptionStyle}>\r\n <DescriptionItem Text=\"Description of your dropdown\" />\r\n <TextfieldInput rows={3} multiline value={listDescription} action={setDescription} label={listDescription ? \" \" : \"Description\"} InputLabelProps={{ shrink: false }} />\r\n </div>\r\n </div>\r\n {emptyDetails === true ?\r\n <div style={{marginTop: \"1rem\"}}>\r\n <Grid item xs={12} sm={12} md={12} style={{ border: \"solid 2px\", borderColor: \"#d32f2f\", borderRadius: \"17px\" }}>\r\n <TableList {...props} rows={listItems} setRows={setListItems} makeSave={sendToApi} />\r\n </Grid>\r\n <p style={{ color: \"#d32f2f\", fontWeight: \"400\", fontSize: \"0.75rem\", fontFamily: \"Roboto, Helvetica, Arial\", letterSpacing: \"0.03333em\" }}>Please create atleast one item.</p>\r\n </div>\r\n :\r\n <div style={{marginTop: \"1rem\"}}>\r\n <Grid item xs={12} sm={12} md={12}>\r\n <TableList {...props} rows={listItems} setRows={setListItems}/>\r\n </Grid>\r\n </div>}\r\n <div className={classes.buttonContainer}>\r\n <ButtonSave startIcon={<SaveIcon />} content=\"Save\" onClick={sendToApi} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CreateListPage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n qrButton: {\r\n backgroundColor: \"#C3996B\"\r\n },\r\n buttonContainer: {\r\n marginTop: '15px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n projectOptions: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap'\r\n }\r\n },\r\n projectOption: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: \"250px\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n marginRight: '25px',\r\n },\r\n listDescriptionStyle: {\r\n width: '100%',\r\n }\r\n}));","import React, { useEffect, useState } from 'react';\r\nimport TextfieldInput from '../../Shared/TextField';\r\nimport { TextField } from '@mui/material';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport DescriptionItem from '../../Shared/DescriptionItem';\r\nimport ButtonSave from '../../Shared/Buttons/ButtonSave';\r\nimport Button from '@mui/material/Button';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Grid } from '@mui/material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport TableList from '../CreateList/Components/TableCreateList';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport * as apiHelper from '../../../Utils/API/apiHelper';\r\nimport FileCopyIcon from '@mui/icons-material/FileCopy';\r\nimport Snackbar from '@mui/material/Snackbar';\r\n// import { IconButton } from '@mui/material';\r\n// import CloseIcon from '@mui/icons-material/Close';\r\n\r\nfunction CreateExternalApiPage(props) {\r\n\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const GetUserID = props.Login.userid;\r\n const [connectionName, setConnectionName] = useState(\"\");\r\n const [connectionDesc, setConnectionDesc] = useState(\"\");\r\n const [apiKey, setApiKey] = useState(\"\");\r\n const [errorConnectionName, setErrorConnectionName] = useState(false);\r\n const [errorApiKey, setErrorApiKey] = useState(false);\r\n const [htConnectionName, setHtConnectionName] = useState(\"\");\r\n const [htApiKey, setHtApiKey] = useState(\"\");\r\n const [emptyDetails, setEmptyDetails] = useState(false);\r\n const [apiBodyItems, setApiBodyItems] = useState([]);\r\n const [apiExampleLink, setApiExampleLink] = useState(\"\");\r\n const [apiExamplePoints, setApiExamplePoints] = useState(\"\");\r\n const [openToast, setOpenToast] = useState(false);\r\n\r\n useEffect(() => {\r\n }, [props.Login.userid]);\r\n\r\n const setConnectionNameState = (event) => {\r\n setConnectionName(event.target.value);\r\n }\r\n\r\n const setConnectionDescState = (event) => {\r\n setConnectionDesc(event.target.value);\r\n }\r\n\r\n const setApiKeyState = (event) => {\r\n setApiKey(event.target.value);\r\n }\r\n\r\n const setRows = (event) => {\r\n setApiBodyItems(event);\r\n var ExampleApiValuesMapped = event.map(item => ({ [item.itemName]: \"Your data here\" }))\r\n var NewExampleApiValues = JSON.stringify(Object.assign({}, ...ExampleApiValuesMapped), null, 2);\r\n setApiExamplePoints(NewExampleApiValues)\r\n }\r\n \r\n const validate = () => {\r\n var validationOK = true\r\n if (connectionName === \"\") {\r\n validationOK = false\r\n setHtConnectionName(\"Please enter a connection name\")\r\n setErrorConnectionName(true)\r\n }\r\n else {\r\n setHtConnectionName(\"\")\r\n setErrorConnectionName(false)\r\n }\r\n if (apiKey === \"\") {\r\n validationOK = false\r\n setHtApiKey(\"Please generate an API key\")\r\n setErrorApiKey(true)\r\n } else {\r\n setErrorApiKey(false)\r\n setHtApiKey(\"\")\r\n }\r\n\r\n if (apiBodyItems.length === 0 || apiBodyItems[0].itemName === \"\") {\r\n validationOK = false\r\n setEmptyDetails(true)\r\n }\r\n else {\r\n setEmptyDetails(false)\r\n }\r\n\r\n return validationOK\r\n }\r\n\r\n const sendToApi = () => {\r\n setApiExampleLink(apiHelper.ComposeUri(apiHelper.EXTERNALAPI) + apiKey)\r\n var ExampleApiValuesMapped = apiBodyItems.map(item => ({ [item.itemName]: \"Your data here\" }))\r\n var NewExampleApiValues = JSON.stringify(Object.assign({}, ...ExampleApiValuesMapped), null, 2);\r\n setApiExamplePoints(NewExampleApiValues)\r\n if (validate()) {\r\n var items = JSON.stringify(apiBodyItems.map(item => ({ Name: item.itemName, Description: item.itemDescription })))\r\n dataService.createNewApi(connectionName, connectionDesc, apiKey, items, GetUserID).then(results => {\r\n props.actions.externalApiNameAction(connectionName)\r\n props.actions.externalApiDescriptionAction(connectionDesc)\r\n props.actions.externalApiKeyAction(apiKey)\r\n props.actions.externalApiItemsAction(apiBodyItems.map(x => ({Id: x.Id, InsertedOn: x.InsertedOn, UserID: x.UserID, edit: false, itemName: x.itemName, itemDescription: x.itemDescription})))\r\n props.actions.externalApiIdAction(results.id)\r\n history.push(\"/modifyapi\")\r\n })\r\n }\r\n }\r\n\r\n const generateApiKey = () => {\r\n let key = uuidv4()\r\n setApiKey(key)\r\n setApiExampleLink(apiHelper.ComposeUri(apiHelper.EXTERNALAPI) + key)\r\n }\r\n\r\n const handleOpenToast = () => {\r\n setOpenToast(true);\r\n };\r\n\r\n const handleCloseToast = (reason) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n setOpenToast(false);\r\n };\r\n\r\n const handleCopyLink = () => {\r\n handleOpenToast();\r\n navigator.clipboard.writeText(apiExampleLink);\r\n };\r\n\r\n const handleCopyFormat = () => {\r\n handleOpenToast();\r\n navigator.clipboard.writeText(apiExamplePoints);\r\n };\r\n\r\n // const action = (\r\n // <React.Fragment>\r\n // <IconButton\r\n // size=\"small\"\r\n // aria-label=\"close\"\r\n // color=\"inherit\"\r\n // onClick={handleCloseToast}>\r\n // <CloseIcon fontSize=\"small\" />\r\n // </IconButton>\r\n // </React.Fragment>\r\n // );\r\n\r\n // const buttonStyle = {\r\n // backgroundColor: \"#C3996B\",\r\n // color: \"white\",\r\n // width: \"220px\",\r\n // marginRight: \"5px\",\r\n // height: \"55px\",\r\n // fontSize: \"15px\"\r\n // }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Create a new API\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Name of your API\" />\r\n <TextfieldInput label={connectionName ? \" \" : \"API\"} InputLabelProps={{ shrink: false }} value={connectionName} action={setConnectionNameState} helperText={htConnectionName} error={errorConnectionName} />\r\n </div>\r\n </div>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.listDescriptionStyle}>\r\n <DescriptionItem Text=\"Description of your API\" />\r\n <TextfieldInput label={connectionDesc ? \" \" : \"Description\"} InputLabelProps={{ shrink: false }} rows={3} multiline value={connectionDesc} action={setConnectionDescState} />\r\n </div>\r\n </div>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.listDescriptionStyle}>\r\n <DescriptionItem Text=\"Create API key\" />\r\n <div className={classes.generateApiKeyContainer}>\r\n <Button size='large' variant=\"contained\" style={{ width: \"220px\", background: \"#C3996B\", color: 'white' }} onClick={() => generateApiKey()}>GENERATE API KEY</Button>\r\n <TextField value={apiKey} style={{ marginLeft: \"5px\" }} fullWidth action={setApiKeyState} label=\"API key\" helperText={htApiKey} error={errorApiKey} InputProps={{ readOnly: true, }} />\r\n </div>\r\n </div>\r\n </div>\r\n {emptyDetails === true ?\r\n <div style={{ marginTop: \"2rem\" }}>\r\n <DescriptionItem Text=\"Add data points\" />\r\n <Grid item xs={12} sm={12} md={12} style={{ border: \"solid 2px\", borderColor: \"#d32f2f\", borderRadius: \"17px\" }}>\r\n <TableList {...props} rows={apiBodyItems} setRows={setRows} makeSave={sendToApi} />\r\n </Grid>\r\n <p style={{ color: \"#d32f2f\", fontWeight: \"400\", fontSize: \"0.75rem\", fontFamily: \"Roboto, Helvetica, Arial\", letterSpacing: \"0.03333em\" }}>Please create atleast one data point.</p>\r\n </div>\r\n :\r\n <div style={{ marginTop: \"2rem\" }}>\r\n <DescriptionItem Text=\"Add data points\" />\r\n <Grid item xs={12} sm={12} md={12}>\r\n <TableList {...props} rows={apiBodyItems} setRows={setRows} />\r\n </Grid>\r\n </div>}\r\n <div className={classes.buttonContainer}>\r\n <ButtonSave startIcon={<SaveIcon />} content=\"Save\" onClick={sendToApi} />\r\n </div>\r\n <div style={{ marginTop: \"20px\" }}>\r\n <DescriptionItem Text=\"Your unique API link\" />\r\n <div className={classes.ApiContainer} style={{marginBottom: \"15px\"}}>\r\n <TextField fullWidth disabled multiline value={apiExampleLink} label={apiExampleLink ? \" \" : \"API Link\"} InputLabelProps={{ shrink: false }} style={{ marginRight: \"5px\" }} />\r\n {apiExampleLink !== \"\" ?\r\n <Button size='large' variant=\"contained\" onClick={handleCopyLink} style={{ background: \"#C3996B\", color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n :\r\n <Button disabled size='large' variant=\"contained\" onClick={handleCopyLink} style={{ color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n }\r\n </div>\r\n <DescriptionItem Text=\"API format example\" />\r\n <div className={classes.ApiContainer}>\r\n <TextField fullWidth disabled multiline value={apiExamplePoints} label={apiExamplePoints ? \" \" : \"API Example\"} InputLabelProps={{ shrink: false }} style={{ marginRight: \"5px\" }} />\r\n {apiExamplePoints !== \"\" ?\r\n <Button size='large' variant=\"contained\" onClick={handleCopyFormat} style={{ background: \"#C3996B\", color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n :\r\n <Button disabled size='large' variant=\"contained\" onClick={handleCopyFormat} style={{ color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <Snackbar\r\n open={openToast}\r\n autoHideDuration={3000}\r\n onClose={handleCloseToast}\r\n message=\"Copied to clipboard\"\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default CreateExternalApiPage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n qrButton: {\r\n backgroundColor: \"#C3996B\"\r\n },\r\n buttonContainer: {\r\n marginTop: '25px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n projectOptions: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap'\r\n },\r\n marginTop: \"10px\"\r\n },\r\n projectOption: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: \"250px\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n marginRight: '25px',\r\n },\r\n listDescriptionStyle: {\r\n width: '100%',\r\n },\r\n generateApiKeyContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'center',\r\n },\r\n ApiContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'flex-end',\r\n },\r\n generateApiKeyButton: {\r\n backgroundColor: \"#C3996B\",\r\n color: \"white\",\r\n width: \"220px\",\r\n borderRadius: \"4px\",\r\n border: \"none\",\r\n outline: \"none\",\r\n cursor: \"pointer\",\r\n marginRight: \"5px\",\r\n height: \"55px\",\r\n fontSize: \"15px\"\r\n }\r\n}));","import React, { useEffect, useState } from \"react\";\r\nimport Table from '@mui/material/Table';\r\nimport Fab from '@mui/material/Fab';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport TextField from '@mui/material/TextField';\r\nimport { TableContainer, TableRow } from '@mui/material';\r\nimport './TableStyle.css';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport IconButton from '@mui/material/IconButton';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport Select from '@mui/material/Select';\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Paper from '@mui/material/Paper';\r\n\r\nfunction TableModifyList(props) {\r\n const classes = useStyles();\r\n var today = new Date();\r\n\r\n useEffect(() => {\r\n // eslint-disable-next-line \r\n }, [props.Login.userid])\r\n\r\n const setItemName = (event, id) => {\r\n let tempArray = [...props.rows]\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).itemName = event.target.value\r\n } else {\r\n tempArray.find(x => x.edit === true).itemName = event.target.value;\r\n }\r\n props.setRows(tempArray)\r\n }\r\n\r\n const setItemDescription = (event, id) => {\r\n let tempArray = [...props.rows]\r\n if (tempArray.find(x => x.Id === id) !== undefined) {\r\n tempArray.find(x => x.Id === id).itemDescription = event.target.value\r\n } else {\r\n tempArray.find(x => x.edit === true).itemDescription = event.target.value;\r\n }\r\n props.setRows(tempArray)\r\n }\r\n\r\n const GenerateID = () => {\r\n let tempArray = [...props.rows];\r\n const ids = tempArray.map(object => {\r\n return object.Id;\r\n });\r\n\r\n const max = Math.max(...ids);\r\n\r\n if (tempArray.length === 0) {\r\n return 1;\r\n }\r\n else {\r\n let index = max;\r\n index++;\r\n return index;\r\n }\r\n }\r\n\r\n const editListItem = (id) => {\r\n let tempArray = [...props.rows];\r\n console.log(tempArray);\r\n tempArray.find(x => x.Id === id).edit = true;\r\n props.setRows(tempArray);\r\n }\r\n\r\n const saveListItem = (id) => {\r\n let tempArray = [...props.rows];\r\n if (tempArray.find(x => x.Id === id).itemName !== \"\" || tempArray.find(x => x.Id === id).itemName !== null) {\r\n tempArray.find(x => x.Id === id).edit = false;\r\n props.setRows(tempArray);\r\n }\r\n }\r\n\r\n const deleteListItem = (id) => {\r\n let tempArray = [...props.rows];\r\n let index = tempArray.indexOf(tempArray.find(x => x.Id === id));\r\n tempArray.splice(index, 1);\r\n props.setRows(tempArray);\r\n }\r\n\r\n const addRow = () => {\r\n let userid = props.Login.userid;\r\n let Rowid = { Id: GenerateID(), itemDescription: \"\", edit: true, itemName: \"\", UserID: props.Login.userid, InsertedOn: today, InsertedByUserId: userid }\r\n let PrevId = GenerateID() - 1;\r\n var tempArray = [...props.rows];\r\n if (tempArray.find(x => x.itemName === \"\") === undefined) {\r\n if (tempArray.length !== 0) {\r\n if (tempArray.find(x => x.Id === PrevId).itemDescription !== \"\") {\r\n tempArray.find(x => x.Id === PrevId).edit = false;\r\n tempArray.push(Rowid);\r\n props.setRows(tempArray);\r\n }\r\n else {\r\n tempArray.push(Rowid);\r\n props.setRows(tempArray);\r\n }\r\n }\r\n else {\r\n tempArray.push(Rowid);\r\n props.setRows(tempArray);\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <TableContainer style={{ borderRadius: \"15px\" }} component={Paper}>\r\n <Table>\r\n <thead className={classes.tableHead}>\r\n <tr>\r\n <th style={{ paddingRight: '6px', paddingLeft: '6px' }}>#</th>\r\n <th width=\"30%\">Name</th>\r\n <th width=\"60%\">Description</th>\r\n <th width=\"10%\" colSpan={2} style={{ paddingLeft: \"50px\", paddingRight: \"43px\" }} >Action</th>\r\n </tr>\r\n </thead>\r\n <tbody align=\"center\" className={classes.tableContent}>\r\n {\r\n props.rows.map((x, index) =>\r\n <TableRow key={x.Id} className={classes.tableRow}>\r\n <td className={classes.indexTd} >\r\n <div className={classes.listOrder}>\r\n {index + 1}\r\n </div>\r\n </td>\r\n <td className={classes.tableTd}>\r\n {x.edit ?// eslint-disable-next-line\r\n <TextField label={x.itemName ? \" \" : \"Name\"} InputLabelProps={{ shrink: false }} style={{ width: '100%' }} className={classes.descriptionField} id=\"outlined-basic\" type={\"search\"} variant=\"outlined\" value={x.itemName === undefined ? '' : x.itemName.length > 0 ? x.itemName : ''} onChange={(event) => setItemName(event, x.Id)} /> :\r\n <TextField style={{ width: '100%' }} disabled value={x.itemName} />\r\n }\r\n </td>\r\n <td className={classes.tableTd}>\r\n {x.edit ?// eslint-disable-next-line\r\n <TextField label={x.itemDescription ? \" \" : \"Description\"} style={{ width: '100%' }} className={classes.descriptionField} id=\"outlined-basic\" type={\"search\"} variant=\"outlined\" value={x.itemDescription === undefined ? '' : x.itemDescription.length > 0 ? x.itemDescription : ''} onChange={(event) => setItemDescription(event, x.Id)} /> :\r\n <TextField style={{ width: '100%' }} disabled value={x.itemDescription} />\r\n }\r\n </td>\r\n <td className={classes.tableTd} align=\"center\">\r\n {x.edit ?\r\n <IconButton aria-label=\"save\" onClick={() => saveListItem(x.Id)} className={classes.editButton} size=\"large\">\r\n <SaveIcon fontSize=\"inherit\" />\r\n </IconButton> :\r\n <IconButton aria-label=\"edit\" onClick={() => editListItem(x.Id)} className={classes.editButton} size=\"large\">\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n }\r\n </td>\r\n <td>\r\n <IconButton aria-label=\"delete\" onClick={() => deleteListItem(x.Id)} className={classes.functionButton} color='error' size=\"large\">\r\n <DeleteIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </td>\r\n </TableRow>\r\n )\r\n }\r\n <TableRow className={classes.addRow} onClick={addRow}>\r\n <td className={classes.indexTd}>\r\n -\r\n </td>\r\n <td className={classes.tableTd}>\r\n <FormControl fullWidth>\r\n <InputLabel>Name</InputLabel>\r\n <Select\r\n IconComponent={() => (null\r\n )} disabled />\r\n </FormControl>\r\n </td>\r\n <td className={classes.tableTd}>\r\n <FormControl fullWidth>\r\n <InputLabel>Description</InputLabel>\r\n <Select\r\n IconComponent={() => (null\r\n )} disabled />\r\n </FormControl>\r\n </td>\r\n <td className={classes.tableTd} colSpan=\"2\" align=\"center\">\r\n <Fab size=\"medium\">\r\n <AddIcon />\r\n </Fab>\r\n </td>\r\n </TableRow>\r\n </tbody>\r\n </Table>\r\n </TableContainer>\r\n )\r\n}\r\n\r\nexport default TableModifyList;\r\n\r\nconst useStyles = makeStyles({\r\n tableContent: {\r\n paddingTop: \"15px\",\r\n },\r\n tableRow: {\r\n height: '60px',\r\n },\r\n tableHead: {\r\n backgroundColor: \"#e0dce4\",\r\n marginBottom: \"15px\",\r\n },\r\n descriptionField: {\r\n width: \"100%\",\r\n },\r\n editButton: {\r\n fontSize: '2rem !important',\r\n color: '#0B4097 !important',\r\n },\r\n functionButton: {\r\n fontSize: '2rem !important',\r\n\r\n },\r\n tableHead: {\r\n backgroundColor: \"#e0dce4\",\r\n marginBottom: \"15px\",\r\n },\r\n addRow: {\r\n opacity: \"0.3\"\r\n },\r\n tableTd: {\r\n padding: \"-5px\",\r\n },\r\n indexTd: {\r\n borderRight: '2px solid rgb(224, 224, 224)',\r\n width: '25px',\r\n background: 'rgba(0, 0, 0, 0.54)',\r\n color: 'white',\r\n zIndex: '2',\r\n },\r\n emptydrag: {\r\n padding: '17px !important',\r\n border: '0'\r\n },\r\n listOrder: {\r\n paddingLeft: '5px',\r\n paddingRight: '5px',\r\n },\r\n dragTd: {\r\n border: '0',\r\n width: '24px',\r\n },\r\n dragIcon: {\r\n float: 'left',\r\n },\r\n\r\n descriptionField: {\r\n width: \"100%\",\r\n },\r\n\r\n editButton: {\r\n fontSize: '2rem !important',\r\n color: '#0B4097 !important',\r\n },\r\n functionButton: {\r\n fontSize: '2rem !important',\r\n\r\n },\r\n});","import React, { useEffect, useState } from 'react';\r\nimport TextfieldInput from '../../Shared/TextField';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport DescriptionItem from '../../Shared/DescriptionItem';\r\nimport ButtonSave from '../../Shared/Buttons/ButtonSave';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport ButtonNormalText from '../../Shared/Buttons/ButtonNormalText';\r\nimport ButtonNormalDelete from '../../Shared/Buttons/ButtonNormalDelete';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Grid } from '@mui/material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport TableList from './Components/TableModifyList';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nfunction ModifyListPage(props) {\r\n\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const GetUserID = props.Login.userid;\r\n const [listName, setListName] = useState(\"\");\r\n const [listDescription, setListDescription] = useState(\"\");\r\n const [helperTextListName, setHelperTextListName] = useState(null);\r\n const [errorListName, setErrorListName] = useState(false);\r\n const [emptyDetails, setEmptyDetails] = useState(false);\r\n const [listItems, setListItems] = useState([]);\r\n const [delopen, setDelOpen] = useState(false);\r\n const [viewSize, setViewSize] = useState(0);\r\n const [listId, setListId] = useState(0);\r\n var today = new Date();\r\n\r\n useEffect(() => {\r\n let tempListName = props.listCopy.listName;\r\n let tempListDescription = props.listCopy.listDescription;\r\n let tempListItems = [...props.listCopy.listItems.map(x => ({ Id: x.Id, itemName: x.itemName, itemDescription: x.itemDescription, InsertedOn: x.InsertedOn, InsertedByUserId: x.InsertedByUserId, edit: false }))];\r\n let tempListId = props.listCopy.listId;\r\n \r\n setListDescription(tempListDescription)\r\n setListName(tempListName)\r\n setListItems(tempListItems)\r\n setListId(tempListId)\r\n const display1 = window.matchMedia('(min-width: 520px)');\r\n const listener = () => {\r\n if (!display1.matches) {\r\n setViewSize(1)\r\n }\r\n else {\r\n setViewSize(0)\r\n }\r\n }\r\n listener();\r\n window.addEventListener('resize', listener);\r\n\r\n }, [props.Login.userid]);\r\n\r\n const handleDialogOpenDel = () => {\r\n setDelOpen(true);\r\n }\r\n const handleDialogCloseDel = () => {\r\n setDelOpen(false);\r\n }\r\n\r\n const handleDeleteList = () => {\r\n let userid = props.Login.userid\r\n let DataListItems = listItems.map(x => ({ Name: x.itemName, Description: x.itemDescription, InsertedOn: x.InsertedOn, InsertedByUserId: x.UserID, Id: x.Id }));\r\n dataService.deleteDataList(listName, listDescription, today, userid, DataListItems, listId).then(response => {\r\n if (response.success === true) {\r\n toast.success('Dropdown was deleted successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n\r\n });\r\n history.push(\"/dropdownoverview\");\r\n }\r\n\r\n const setList = (event) => {\r\n setListName(event.target.value);\r\n }\r\n\r\n const setDescription = (event) => {\r\n setListDescription(event.target.value);\r\n }\r\n\r\n const sendToApi = () => {\r\n if (listName === \"\") {\r\n setHelperTextListName(\"Please enter a dropdown name.\")\r\n setErrorListName(true)\r\n }\r\n else {\r\n setHelperTextListName(null)\r\n setErrorListName(false)\r\n setEmptyDetails(false)\r\n if (listItems.length === 0) {\r\n setEmptyDetails(true)\r\n }\r\n else {\r\n // API CALL HERE\r\n let userid = props.Login.userid\r\n let DataListItems = listItems.map(x => ({ Name: x.itemName, Description: x.itemDescription, InsertedOn: x.InsertedOn, InsertedByUserId: x.InsertedByUserId, Id: x.Id }));\r\n dataService.modifyDataList(listName, listDescription, today, userid, DataListItems, listId).then((response) => {\r\n if (response.success === true) {\r\n toast.success('Dropdown was saved successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Modify your dropdown\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Name of your dropdown\" />\r\n <TextfieldInput value={listName} action={setList} label={listName ? \" \" : \"Dropdown\"} InputLabelProps={{ shrink: false }} helperText={helperTextListName} error={errorListName} />\r\n </div>\r\n </div>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.listDescriptionStyle}>\r\n <DescriptionItem Text=\"Description of your dropdown\" />\r\n <TextfieldInput rows={3} multiline value={listDescription} action={setDescription} label={listDescription ? \" \" : \"Description\"} InputLabelProps={{ shrink: false }} />\r\n </div>\r\n </div>\r\n {emptyDetails === true ?\r\n <div style={{ marginTop: \"1rem\" }}>\r\n <Grid item xs={12} sm={12} md={12} style={{ border: \"solid 2px\", borderColor: \"#d32f2f\", borderRadius: \"17px\" }}>\r\n <TableList {...props} rows={listItems} setRows={setListItems} makeSave={sendToApi} />\r\n </Grid>\r\n <p style={{ color: \"#d32f2f\", fontWeight: \"400\", fontSize: \"0.75rem\", fontFamily: \"Roboto, Helvetica, Arial\", letterSpacing: \"0.03333em\" }}>Please create atleast one item.</p>\r\n </div>\r\n :\r\n <div style={{ marginTop: \"1rem\" }}>\r\n <Grid item xs={12} sm={12} md={12}>\r\n <TableList {...props} rows={listItems} setRows={setListItems} />\r\n </Grid>\r\n </div>}\r\n <div className={classes.buttonContainer}>\r\n <ButtonSave startIcon={<SaveIcon />} content=\"Save\" onClick={sendToApi} />\r\n <ButtonNormalDelete startIcon={<DeleteIcon />} content=\"Delete\" onClick={handleDialogOpenDel}>Delete</ButtonNormalDelete>\r\n </div>\r\n </div>\r\n\r\n <Dialog\r\n open={delopen}\r\n onClose={handleDialogCloseDel}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">\r\n {\"Delete dropdown\"}\r\n </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id=\"alert-dialog-description\">\r\n {\"Are you sure you want to delete dropdown \" + listName + \" ?\"}\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <ButtonNormalText content=\"Close\" onClick={handleDialogCloseDel}>Close</ButtonNormalText>\r\n <ButtonNormalDelete startIcon={<DeleteIcon />} content=\"Delete\" onClick={handleDeleteList}>Delete</ButtonNormalDelete>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ModifyListPage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n qrButton: {\r\n backgroundColor: \"#C3996B\"\r\n },\r\n buttonContainer: {\r\n marginTop: '15px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n projectOptions: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap'\r\n }\r\n },\r\n projectOption: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: \"250px\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n marginRight: '25px',\r\n },\r\n listDescriptionStyle: {\r\n width: '100%',\r\n }\r\n}));","import React, { useEffect, useState } from 'react';\r\nimport TextfieldInput from '../../Shared/TextField';\r\nimport { TextField } from '@mui/material';\r\nimport TitlePage from '../../Shared/TitlePage';\r\nimport DescriptionItem from '../../Shared/DescriptionItem';\r\nimport ButtonSave from '../../Shared/Buttons/ButtonSave';\r\nimport Button from '@mui/material/Button';\r\nimport ButtonNormalText from '../../Shared/Buttons/ButtonNormalText';\r\nimport ButtonNormalDelete from '../../Shared/Buttons/ButtonNormalDelete';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport { Grid } from '@mui/material';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SaveIcon from '@mui/icons-material/Save';\r\nimport TableList from '../CreateList/Components/TableCreateList';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport * as apiHelper from '../../../Utils/API/apiHelper';\r\nimport FileCopyIcon from '@mui/icons-material/FileCopy';\r\nimport Snackbar from '@mui/material/Snackbar';\r\nimport { IconButton } from '@mui/material';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { toast } from 'react-toastify';\r\n\r\nfunction ModifyExternalApiPage(props) {\r\n\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const GetUserID = props.Login.userid;\r\n const [connectionName, setConnectionName] = useState(\"\");\r\n const [connectionDesc, setConnectionDesc] = useState(\"\");\r\n const [apiKey, setApiKey] = useState(\"\");\r\n const [errorConnectionName, setErrorConnectionName] = useState(false);\r\n const [errorApiKey, setErrorApiKey] = useState(false);\r\n const [htConnectionName, setHtConnectionName] = useState(\"\");\r\n const [htApiKey, setHtApiKey] = useState(\"\");\r\n const [emptyDetails, setEmptyDetails] = useState(false);\r\n const [apiBodyItems, setApiBodyItems] = useState([]);\r\n const [apiExampleLink, setApiExampleLink] = useState(\"\");\r\n const [apiExamplePoints, setApiExamplePoints] = useState(\"\");\r\n const [ApiId, setApiId] = useState(\"\");\r\n const [openToast, setOpenToast] = useState(false);\r\n const [delopen, setDelOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n setConnectionName(props.externalApiCopy.ExternalApiName)\r\n setConnectionDesc(props.externalApiCopy.ExternalApiDescription)\r\n setApiKey(props.externalApiCopy.ExternalApiKey)\r\n setApiBodyItems(props.externalApiCopy.ExternalApiItems)\r\n console.log(props.externalApiCopy.ExternalApiItems)\r\n setApiId(props.externalApiCopy.ExternalApiId)\r\n setApiExampleLink(apiHelper.ComposeUri(apiHelper.EXTERNALAPI) + props.externalApiCopy.ExternalApiKey)\r\n var ExampleApiValuesMapped = props.externalApiCopy.ExternalApiItems.map(item => ({ [item.itemName]: \"Your data here\" }))\r\n var NewExampleApiValues = JSON.stringify(Object.assign({}, ...ExampleApiValuesMapped), null, 2);\r\n setApiExamplePoints(NewExampleApiValues)\r\n }, [props.Login.userid]);\r\n\r\n const handleDialogOpenDel = () => {\r\n setDelOpen(true);\r\n }\r\n const handleDialogCloseDel = () => {\r\n setDelOpen(false);\r\n }\r\n\r\n const setConnectionNameState = (event) => {\r\n setConnectionName(event.target.value);\r\n }\r\n\r\n const setConnectionDescState = (event) => {\r\n setConnectionDesc(event.target.value);\r\n }\r\n\r\n const setApiKeyState = (event) => {\r\n setApiKey(event.target.value);\r\n }\r\n\r\n const setRows = (event) => {\r\n setApiBodyItems(event);\r\n var ExampleApiValuesMapped = event.map(item => ({ [item.itemName]: \"Your data here\" }))\r\n var NewExampleApiValues = JSON.stringify(Object.assign({}, ...ExampleApiValuesMapped), null, 2);\r\n setApiExamplePoints(NewExampleApiValues)\r\n }\r\n\r\n const validate = () => {\r\n var validationOK = true\r\n if (connectionName === \"\") {\r\n validationOK = false\r\n setHtConnectionName(\"Please enter a connection name\")\r\n setErrorConnectionName(true)\r\n }\r\n else {\r\n setHtConnectionName(\"\")\r\n setErrorConnectionName(false)\r\n }\r\n if (apiKey === \"\") {\r\n validationOK = false\r\n setHtApiKey(\"Please generate an API key\")\r\n setErrorApiKey(true)\r\n } else {\r\n setErrorApiKey(false)\r\n setHtApiKey(\"\")\r\n }\r\n\r\n if (apiBodyItems.length === 0 || apiBodyItems[0].itemName == \"\") {\r\n validationOK = false\r\n setEmptyDetails(true)\r\n }\r\n else {\r\n setEmptyDetails(false)\r\n }\r\n\r\n return validationOK\r\n }\r\n\r\n const sendToApi = () => {\r\n setApiExampleLink(apiHelper.ComposeUri(apiHelper.EXTERNALAPI) + apiKey)\r\n var ExampleApiValuesMapped = apiBodyItems.map(item => ({ [item.itemName]: \"Your data here\" }))\r\n var NewExampleApiValues = JSON.stringify(Object.assign({}, ...ExampleApiValuesMapped), null, 2);\r\n let userid = props.Login.userid\r\n setApiExamplePoints(NewExampleApiValues)\r\n if (validate()) {\r\n var items = JSON.stringify(apiBodyItems.map(item => ({ Name: item.itemName, Description: item.itemDescription })))\r\n dataService.modifyApi(ApiId, connectionName, connectionDesc, apiKey, items, userid).then((response) => {\r\n if (response.success === true) {\r\n toast.success('External Api was saved successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n });\r\n }\r\n }\r\n\r\n const generateApiKey = () => {\r\n let key = uuidv4()\r\n setApiKey(key)\r\n setApiExampleLink(apiHelper.ComposeUri(apiHelper.EXTERNALAPI) + key)\r\n }\r\n\r\n const handleOpenToast = () => {\r\n setOpenToast(true);\r\n };\r\n\r\n const handleCloseToast = (reason) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n setOpenToast(false);\r\n };\r\n\r\n const handleCopyLink = () => {\r\n handleOpenToast();\r\n navigator.clipboard.writeText(apiExampleLink);\r\n };\r\n\r\n const handleCopyFormat = () => {\r\n handleOpenToast();\r\n navigator.clipboard.writeText(apiExamplePoints);\r\n };\r\n\r\n const handleDeleteExternalApi = () => {\r\n let userid = props.Login.userid\r\n var items = JSON.stringify(apiBodyItems.map(item => ({ Name: item.itemName, Description: item.itemDescription })))\r\n dataService.deleteApi(ApiId, connectionName, connectionDesc, apiKey, items, userid).then(response => {\r\n if (response.success === true) {\r\n toast.success('External Api was deleted successfully', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Something went wrong.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n history.push(\"/externalapioverview\");\r\n });\r\n }\r\n\r\n const action = (\r\n <React.Fragment>\r\n <IconButton\r\n size=\"small\"\r\n aria-label=\"close\"\r\n color=\"inherit\"\r\n onClick={handleCloseToast}>\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </React.Fragment>\r\n );\r\n\r\n const buttonStyle = {\r\n backgroundColor: \"#C3996B\",\r\n color: \"white\",\r\n width: \"220px\",\r\n marginRight: \"5px\",\r\n height: \"55px\",\r\n fontSize: \"15px\"\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Modify a data connection\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.projectOption}>\r\n <DescriptionItem Text=\"Name of your connection\" />\r\n <TextfieldInput label={connectionName ? \" \" : \"Connection\"} InputLabelProps={{ shrink: false }} value={connectionName} action={setConnectionNameState} helperText={htConnectionName} error={errorConnectionName} />\r\n </div>\r\n </div>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.listDescriptionStyle}>\r\n <DescriptionItem Text=\"Description of your connection\" />\r\n <TextfieldInput label={connectionDesc ? \" \" : \"Description\"} InputLabelProps={{ shrink: false }} rows={3} multiline value={connectionDesc} action={setConnectionDescState} />\r\n </div>\r\n </div>\r\n <div className={classes.projectOptions}>\r\n <div className={classes.listDescriptionStyle}>\r\n <DescriptionItem Text=\"Create API key\" />\r\n <div className={classes.generateApiKeyContainer}>\r\n <Button size='large' variant=\"contained\" style={{ width: \"220px\", background: \"#C3996B\", color: 'white' }} onClick={() => generateApiKey()}>GENERATE API KEY</Button>\r\n <TextField value={apiKey} style={{ marginLeft: \"5px\" }} fullWidth action={setApiKeyState} label=\"API key\" helperText={htApiKey} error={errorApiKey} InputProps={{ readOnly: true, }} />\r\n </div>\r\n </div>\r\n </div>\r\n {emptyDetails === true ?\r\n <div style={{ marginTop: \"2rem\" }}>\r\n <DescriptionItem Text=\"Add data points\" />\r\n <Grid item xs={12} sm={12} md={12} style={{ border: \"solid 2px\", borderColor: \"#d32f2f\", borderRadius: \"17px\" }}>\r\n <TableList {...props} rows={apiBodyItems} setRows={setRows} makeSave={sendToApi} />\r\n </Grid>\r\n <p style={{ color: \"#d32f2f\", fontWeight: \"400\", fontSize: \"0.75rem\", fontFamily: \"Roboto, Helvetica, Arial\", letterSpacing: \"0.03333em\" }}>Please create atleast one data point.</p>\r\n </div>\r\n :\r\n <div style={{ marginTop: \"2rem\" }}>\r\n <DescriptionItem Text=\"Add data points\" />\r\n <Grid item xs={12} sm={12} md={12}>\r\n <TableList {...props} rows={apiBodyItems} setRows={setRows} />\r\n </Grid>\r\n </div>}\r\n <div className={classes.buttonContainer}>\r\n <ButtonSave startIcon={<SaveIcon />} content=\"Save\" onClick={sendToApi} />\r\n <ButtonNormalDelete startIcon={<DeleteIcon />} content=\"Delete\" onClick={handleDialogOpenDel}>Delete</ButtonNormalDelete>\r\n </div>\r\n <div style={{ marginTop: \"20px\" }}>\r\n <DescriptionItem Text=\"Your unique Api link\" />\r\n <div className={classes.ApiContainer} style={{ marginBottom: \"15px\" }}>\r\n <TextField fullWidth disabled multiline value={apiExampleLink} label={apiExampleLink ? \" \" : \"Connection Link\"} InputLabelProps={{ shrink: false }} style={{ marginRight: \"5px\" }} />\r\n {apiExampleLink !== \"\" ?\r\n <Button size='large' variant=\"contained\" onClick={handleCopyLink} style={{ background: \"#C3996B\", color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n :\r\n <Button disabled size='large' variant=\"contained\" onClick={handleCopyLink} style={{ color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n }\r\n </div>\r\n <DescriptionItem Text=\"Api format example\" />\r\n <div className={classes.ApiContainer}>\r\n <TextField fullWidth disabled multiline value={apiExamplePoints} label={apiExamplePoints ? \" \" : \"Connection Example\"} InputLabelProps={{ shrink: false }} style={{ marginRight: \"5px\" }} />\r\n {apiExamplePoints !== \"\" ?\r\n <Button size='large' variant=\"contained\" onClick={handleCopyFormat} style={{ background: \"#C3996B\", color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n :\r\n <Button disabled size='large' variant=\"contained\" onClick={handleCopyFormat} style={{ color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <Snackbar\r\n open={openToast}\r\n autoHideDuration={3000}\r\n onClose={handleCloseToast}\r\n message=\"Copied to clipboard\"\r\n />\r\n\r\n <Dialog\r\n open={delopen}\r\n onClose={handleDialogCloseDel}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">\r\n {\"Delete External API\"}\r\n </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id=\"alert-dialog-description\">\r\n {\"Are you sure you want to delete ExternalApi \" + htConnectionName + \" ?\"}\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <ButtonNormalText content=\"Close\" onClick={handleDialogCloseDel}>Close</ButtonNormalText>\r\n <ButtonNormalDelete startIcon={<DeleteIcon />} content=\"Delete\" onClick={handleDeleteExternalApi}>Delete</ButtonNormalDelete>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ModifyExternalApiPage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n qrButton: {\r\n backgroundColor: \"#C3996B\"\r\n },\r\n buttonContainer: {\r\n marginTop: '25px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n projectOptions: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n flexWrap: 'nowrap'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexWrap: 'wrap'\r\n },\r\n marginTop: \"10px\"\r\n },\r\n projectOption: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: \"250px\",\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n marginRight: '25px',\r\n },\r\n listDescriptionStyle: {\r\n width: '100%',\r\n },\r\n generateApiKeyContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'center',\r\n },\r\n ApiContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'flex-end',\r\n },\r\n generateApiKeyButton: {\r\n backgroundColor: \"#C3996B\",\r\n color: \"white\",\r\n width: \"220px\",\r\n borderRadius: \"4px\",\r\n border: \"none\",\r\n outline: \"none\",\r\n cursor: \"pointer\",\r\n marginRight: \"5px\",\r\n height: \"55px\",\r\n fontSize: \"15px\"\r\n }\r\n}));","import React from 'react';\r\nimport { bindActionCreators, compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport * as Actions from '../../../../Reducers/actions'\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nfunction EditListsButton(props) {\r\n const history = useHistory();\r\n const SaveAndRedirect = () => { \r\n var tempListName = props.data.listName;\r\n var tempListDescription = props.data.listDescription;\r\n var tempListActive = props.data.listActive;\r\n var tempListId = props.data.listItems[0].dataListId;\r\n var tempListItems = props.data.listItems.map(x => ({ Id: x.id, itemName: x.name, itemDescription: x.description, InsertedOn: x.insertedOn, InsertedByUserId: x.insertedByUserId }))\r\n\r\n props.actions.listNameAction(tempListName)\r\n props.actions.listDescriptionAction(tempListDescription)\r\n props.actions.listItemsAction(tempListItems)\r\n props.actions.listIsActiveAction(tempListActive)\r\n props.actions.listIdAction(tempListId)\r\n history.push(\"/modifydropdown\");\r\n }\r\n\r\n return (\r\n <div>\r\n <IconButton onClick={SaveAndRedirect} size='large' style={{ borderRadius: 0 }}>\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </div>\r\n )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n lists: state.lists,\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n actions: bindActionCreators(Actions, dispatch)\r\n})\r\n\r\nexport default compose(connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n))(EditListsButton);","import React from 'react';\r\nimport { makeStyles, TextField } from '@material-ui/core';\r\nimport { dataListTypes } from '../../../Config/constants';\r\n\r\n\r\nexport default function FilterListRow(props) {\r\n const classes = useStyles();\r\n const getValue = (type) => {\r\n\r\n let filter = props.filters.find(x => x.type === type)\r\n\r\n if (filter) {\r\n return filter.filterValue\r\n }\r\n else {\r\n return \"\"\r\n }\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <tr key={\"filter\"} className={classes.filterRow}>\r\n <th></th>\r\n {/*CompanyName */}\r\n <th className={classes.midCell}>\r\n <TextField \r\n autoFocus={props.filters.length > 0 ? props.filters[0].type === dataListTypes.NAME : false} \r\n id=\"outlined-search\" \r\n label=\"\" \r\n type=\"search\" \r\n variant=\"outlined\" \r\n value={getValue(dataListTypes.NAME)} \r\n className={classes.textField} \r\n size=\"small\" \r\n onChange={(e) => props.updateFilters(dataListTypes.NAME, e)}/>\r\n \r\n </th>\r\n{/* {props.groupType !== salesorderGroupingTypes.SLICE_TYPE && <th className={classes.midCell}>\r\n */}{/* <TextField autoFocus={props.filters.length > 0 ? props.filters[0].type === customerProductFilterTypes.SLICE_TYPE : false} id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\" value={getValue(customerProductFilterTypes.SLICE_TYPE)} className={classes.textField} size=\"small\" onChange={(e) => props.updateFilters(customerProductFilterTypes.SLICE_TYPE, e)} />\r\n </th>} */} \r\n <th className={classes.midCell}>\r\n{/* <TextField autoFocus={props.filters.length > 0 ? props.filters[0].type === customerProductFilterTypes.PALLET_TYPE : false} id=\"outlined-search\" label=\"\" type=\"search\" variant=\"outlined\" value={getValue(customerProductFilterTypes.PALLET_TYPE)} className={classes.textField} size=\"small\" onChange={(e) => props.updateFilters(customerProductFilterTypes.PALLET_TYPE, e)} />\r\n */} </th>\r\n <th className={classes.midCell}>\r\n </th>\r\n </tr>\r\n </React.Fragment>\r\n )\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n filterRow: {\r\n marginBottom: '10px',\r\n width: '100%',\r\n },\r\n leftCell: {\r\n fontSize: \"14px\",\r\n color: \"#020100\",\r\n padding: \"10px\",\r\n fontWeight: \"normal\",\r\n paddingLeft: \"20px\",\r\n },\r\n midCell: {\r\n paddingTop: '5px',\r\n paddingBottom: '5px',\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#020100\",\r\n height: \"40px\",\r\n },\r\n rightCell: {\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#020100\",\r\n paddingLeft: \"10px\",\r\n },\r\n textField: {\r\n backgroundColor: \"white\",\r\n width: \"90%\",\r\n },\r\n checkBox: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n float: \"left\"\r\n },\r\n icon: {\r\n borderRadius: 3,\r\n width: 16,\r\n height: 16,\r\n boxShadow: 'inset 0 0 0 1px rgba(16,22,26,.2), inset 0 -1px 0 rgba(16,22,26,.1)',\r\n backgroundColor: '#f5f8fa',\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0))',\r\n 'input:hover ~ &': {\r\n backgroundColor: '#ebf1f5',\r\n },\r\n 'input:disabled ~ &': {\r\n boxShadow: 'none',\r\n background: 'rgba(206,217,224,.5)',\r\n },\r\n },\r\n checkedIcon: {\r\n backgroundColor: \"black\",\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))',\r\n '&:before': {\r\n display: 'block',\r\n width: 16,\r\n height: 16,\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath\" +\r\n \" fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 \" +\r\n \"1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='%23fff'/%3E%3C/svg%3E\\\")\",\r\n content: '\"\"',\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: \"black\",\r\n },\r\n },\r\n}));\r\n","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport EditListsButton from './EditListsButton';\r\nimport Box from '@mui/material/Box';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Table from '@mui/material/Table';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport TableCell from '@mui/material/TableCell';\r\nimport TableContainer from '@mui/material/TableContainer';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport Typography from '@mui/material/Typography';\r\nimport Paper from '@mui/material/Paper';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\r\nimport SortByAlphaIcon from '@mui/icons-material/SortByAlpha';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport FilterListRow from '../../../Shared/Tables/FilterListRow';\r\n\r\nfunction Row(props) {\r\n const classes = useStyles();\r\n const row = props.row;\r\n const [open, setOpen] = useState(false);\r\n return (\r\n <React.Fragment>\r\n <tr className={classes.tableBodyRow} key={\"thow\"} style={props.index % 2 ? { background: \"#e6ecf0\" } : { background: \"white\" }}>\r\n <td>\r\n <IconButton style={{ borderRadius: 0 }}\r\n aria-label=\"expand row\"\r\n size=\"small\"\r\n onClick={() => setOpen(!open)}>\r\n {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}\r\n </IconButton>\r\n </td>\r\n <td>\r\n {row.name}\r\n </td>\r\n <td>\r\n {row.description}\r\n </td>\r\n <td><EditListsButton style={{ borderRadius: 0 }} data={\r\n ({\r\n listName: props.row.name, \r\n listDescription: props.row.description, \r\n listItems: props.row.dataListItems,\r\n listIsActive: props.row.listIsActive,\r\n listId: props.row.listId\r\n })} />\r\n </td>\r\n </tr>\r\n\r\n <tr style={props.index % 2 ? { background: \"#e6ecf0\" } : { background: \"white\" }}>\r\n <td style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={4}>\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n <Box sx={{ margin: 1 }}>\r\n <Typography variant=\"h6\" gutterBottom component=\"div\">\r\n {row.name}\r\n </Typography>\r\n <Table size=\"small\">\r\n <thead>\r\n <TableRow className={classes.tableRow} >\r\n <td style={{ fontWeight: 'bold' }}>#</td>\r\n <td style={{ fontWeight: 'bold' }}>Name</td>\r\n <td style={{ fontWeight: 'bold' }}>Description</td>\r\n </TableRow>\r\n </thead>\r\n <TableBody>\r\n {row.dataListItems.map((ItemRows, index) => (\r\n <tr className={classes.tableRow} key={\"throw\"} style={props.index % 2 ? { background: \"#e6ecf0\" } : { background: \"white\" }}>\r\n <td>{index + 1}</td>\r\n <td>{ItemRows.name}</td>\r\n <td>{ItemRows.description}</td>\r\n </tr>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </Box>\r\n </Collapse>\r\n </td>\r\n </tr>\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport default function TableList(props) {\r\n const classes = useStyles();\r\n return (\r\n <TableContainer style={{ borderRadius: \"15px\" }} component={Paper}>\r\n <Table size=\"sm\" key={props.rows.id}>\r\n <TableHead className={classes.headStyle} key={props.rows.id}>\r\n <TableRow className={classes.tableBodyRow} key={props.rows.id}>\r\n <th className={classes.tableHead} style={{ width: '2%' }} />\r\n <th className={classes.tableHead} >\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n <Tooltip title=\"Alphabetical order\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.handleSorting('name')}>\r\n <SortByAlphaIcon />\r\n </IconButton>\r\n </Tooltip>\r\n Dropdown Name\r\n <Tooltip title=\"Search project\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.toggleFilter()}>\r\n <SearchIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead}>\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n Dropdown Description\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead} style={{ width: '2%'}}>\r\n Actions\r\n </th>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {props.filterOn && <FilterListRow rows={props.rows} filters={props.filters} filterList={props.filterList} updateFilters={props.updateFilters}></FilterListRow>}\r\n {props.rows.map((row, index) => (\r\n <Row row={row} index={index} className={classes.tableBodyRow} />\r\n ))}\r\n {props.rows.length === 0 &&\r\n <tr className={classes.tableBodyRow} >\r\n <td colSpan={4}>No dropdown available</td>\r\n </tr>}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n tableHead: {\r\n height: '42px',\r\n },\r\n titleSearch: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n headStyle: {\r\n backgroundColor: \"#e0dce4\",\r\n },\r\n tableBodyRow: {\r\n justifyContent: \"center\",\r\n textAlign: \"center\",\r\n },\r\n tableRow: {\r\n borderBottom: '2px solid #e0dce4',\r\n },\r\n actionButtons: {\r\n padding: '0px !important',\r\n textAlign: \"center\",\r\n display: \"flex\",\r\n justifyContent: \"center\"\r\n },\r\n tableFooter: {\r\n width: '100%'\r\n },\r\n footer: {\r\n display: 'flex',\r\n },\r\n icons: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n }\r\n}));\r\n\r\n","import React, { useState, useEffect } from \"react\";\r\nimport TitlePage from \"../../Shared/TitlePage\";\r\nimport { dataService } from \"../../../Services/data/data.service\";\r\nimport { Grid } from \"@mui/material\";\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { dataListTypes } from '../../../Config/constants';\r\nimport Button from '@mui/material/Button';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\nimport TableList from \"./Components/TableList\";\r\n\r\nfunction ListOverviewPage(props) {\r\n const history = useHistory();\r\n const [firstLoad, setFirstLoad] = useState(0);\r\n const GetUserID = props.Login.userid;\r\n const classes = useStyles();\r\n const [filters, setFilters] = useState([]);\r\n const [filterOn, setFilterOn] = useState(false);\r\n const [list, setList] = useState([]);\r\n const [selectedFilter, setSelectedFilter] = useState(1);\r\n const theme = createTheme({\r\n palette: {\r\n neutral: {\r\n main: '#C3996B',\r\n contrastText: '#fff',\r\n },\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n dataService.getLists(GetUserID).then(result => {\r\n setList(result)\r\n });\r\n }, [])\r\n \r\n if (firstLoad === 0) {\r\n setFirstLoad(1);\r\n }\r\n\r\n const filter = [\r\n { number: 1, column: \"name\", sortOrder: \"ASC\" },\r\n { number: 2, column: \"name\", sortOrder: \"DESC\" },\r\n \r\n ]\r\n \r\n const dynamicSorting = (property) => {\r\n var sortOrder = 1;\r\n if (property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n let asc = false;\r\n let desc = false;\r\n /* SC: Filter now works both ways (ASC, DESC) */\r\n if (filter.find(x => x.number === selectedFilter).column === property) {\r\n if (filter.find(x => x.number === selectedFilter).sortOrder === 'ASC') {\r\n desc = true;\r\n asc = false;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'DESC').number);\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'ASC').number);\r\n }\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'DESC').number);\r\n }\r\n if (asc === true) {\r\n return function (a, b) {\r\n //ASC A-Z\r\n var result = (a[property].toLowerCase() > b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n } else {\r\n return function (a, b) {\r\n //DESC Z-A\r\n var result = (a[property].toLowerCase() < b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n }\r\n }\r\n\r\n const handleSorting = (sortType) => {\r\n let tempMeasurementRows = [...list]\r\n setList(tempMeasurementRows.sort(dynamicSorting(sortType)));\r\n }\r\n\r\n const toggleFilter = () => {\r\n if (filterOn) {\r\n setFilters([]);\r\n }\r\n setFilterOn(!filterOn);\r\n }\r\n\r\n const updateFilters = (type, event) => {\r\n let tempFilters = [...filters];\r\n if (tempFilters.some(x => x.type === type)) {\r\n let index = tempFilters.indexOf(tempFilters.find(x => x.type === type));\r\n tempFilters.splice(index, 1);\r\n tempFilters.unshift({ type: type, filterValue: event.target.value });\r\n }\r\n else {\r\n tempFilters.unshift({ type: type, filterValue: event.target.value });\r\n }\r\n setFilters(tempFilters);\r\n filterList(tempFilters);\r\n }\r\n\r\n const filterList = (thisFilters) => {\r\n let varFilteredlist = [...list]\r\n var i;\r\n for (i = 0; i < thisFilters.length; i++) {\r\n let filter = thisFilters[i]\r\n switch (filter.type) {\r\n case dataListTypes.NAME:\r\n varFilteredlist = varFilteredlist.filter(x => x.name.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n\r\n }\r\n }\r\n setList(varFilteredlist)\r\n }\r\n\r\n const navigateTo = (destination) => {\r\n history.push(destination);\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Manage your dropdowns\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n <Grid\r\n container\r\n columnSpacing={3}\r\n rowSpacing={1}\r\n alignItems=\"center\">\r\n <Grid item xs={12} >\r\n <div className={classes.dateAndCreateDiv}>\r\n <div>\r\n <ThemeProvider theme={theme}>\r\n <Button size='large' className={classes.linkButton} color='neutral' variant=\"contained\" onClick={() => navigateTo('/createlist')}>\r\n <span className={classes.iconItem}>\r\n <AddIcon></AddIcon>\r\n </span>Create a dropdown\r\n </Button>\r\n </ThemeProvider>\r\n </div>\r\n </div>\r\n <Divider style={{ marginTop: \"1rem\", marginBottom: \"1rem\" }}></Divider>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <TableList toggleFilter={toggleFilter} filters={filters} handleSorting={handleSorting} filterOn={filterOn} filterList={filterList} updateFilters={updateFilters} rows={list} />\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ListOverviewPage;\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n titleTextStyle: {\r\n marginLeft: \"20px\",\r\n },\r\n titleSection: {\r\n width: \"100%\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"10%\",\r\n paddingRight: \"10%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#FFFFFF\",\r\n justifyContent: \"space-between\"\r\n },\r\n dateAndCreateDiv: {\r\n display: 'flex',\r\n justifyContent: 'end',\r\n alignItems: 'end',\r\n flexWrap: 'wrap',\r\n },\r\n activeFor: {\r\n color: \"#696969\",\r\n fontSize: \"15px\",\r\n },\r\n backIcon: {\r\n padding: \"20px\",\r\n cursor: \"pointer\"\r\n },\r\n iconItem: {\r\n display: 'flex !important',\r\n alignItems: 'center !important'\r\n }\r\n\r\n});","import React from 'react';\r\nimport { bindActionCreators, compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport * as Actions from '../../../../Reducers/actions'\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nfunction EditExternalApiButton(props) {\r\n const history = useHistory();\r\n var today = new Date();\r\n \r\n const SaveAndRedirect = () => {\r\n props.actions.externalApiNameAction(props.data.externalApiName)\r\n props.actions.externalApiDescriptionAction(props.data.externalApiDescription)\r\n props.actions.externalApiKeyAction(props.data.externalApiKey)\r\n var apiFormatParsed = JSON.parse(props.data.externalApiFormat)\r\n var apiFormat = apiFormatParsed.map((item, index) => ({ Id: index +1 , itemDescription: item.Description, edit: false, itemName: item.Name, UserID: props.Login.userid, InsertedOn: today }))\r\n props.actions.externalApiItemsAction(apiFormat)\r\n props.actions.externalApiIdAction(props.data.externalApiId)\r\n history.push(\"/modifyapi\")\r\n }\r\n\r\n return (\r\n <div>\r\n <IconButton onClick={SaveAndRedirect} size='large' style={{ borderRadius: 0 }}>\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </div>\r\n )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n lists: state.lists,\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n actions: bindActionCreators(Actions, dispatch)\r\n})\r\n\r\nexport default compose(connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n))(EditExternalApiButton);","import React, { useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport { TextField } from '@mui/material';\r\nimport EditExternalApisButton from './EditExternalApisButton';\r\nimport Box from '@mui/material/Box';\r\nimport Collapse from '@mui/material/Collapse';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Table from '@mui/material/Table';\r\nimport Button from '@mui/material/Button';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport DescriptionItem from '../../../Shared/DescriptionItem';\r\nimport TableContainer from '@mui/material/TableContainer';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport Typography from '@mui/material/Typography';\r\nimport Paper from '@mui/material/Paper';\r\nimport FileCopyIcon from '@mui/icons-material/FileCopy';\r\nimport Snackbar from '@mui/material/Snackbar';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\r\nimport SortByAlphaIcon from '@mui/icons-material/SortByAlpha';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport FilterListRow from '../../../Shared/Tables/FilterListRow';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nfunction Row(props) {\r\n const classes = useStyles();\r\n const row = props.row;\r\n const [open, setOpen] = useState(false);\r\n const [apiExamplePoints, setApiExamplePoints] = useState(\"\");\r\n const [openToast, setOpenToast] = useState(false);\r\n const handleCopyFormat = () => {\r\n handleOpenToast();\r\n navigator.clipboard.writeText(apiExamplePoints);\r\n };\r\n\r\n const handleOpenToast = () => {\r\n setOpenToast(true);\r\n };\r\n\r\n const handleCloseToast = (reason) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n setOpenToast(false);\r\n };\r\n\r\n const handleOpen = () => {\r\n var apiFormat = JSON.parse(row.apiFormat);\r\n var ExampleApiValuesMapped = apiFormat.map(item => ({ [item.Name]: \"Your data here\" }))\r\n var NewExampleApiValues = JSON.stringify(Object.assign({}, ...ExampleApiValuesMapped), null, 2);\r\n setApiExamplePoints(NewExampleApiValues)\r\n setOpen(!open);\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <tr className={classes.tableBodyRow} key={\"thow\"} style={props.index % 2 ? { background: \"#e6ecf0\" } : { background: \"white\" }}>\r\n <td>\r\n <IconButton style={{ borderRadius: 0 }}\r\n aria-label=\"expand row\"\r\n size=\"small\"\r\n onClick={handleOpen}>\r\n {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}\r\n </IconButton>\r\n </td>\r\n <td>\r\n {row.name}\r\n </td>\r\n <td>\r\n {row.description}\r\n </td>\r\n <td><EditExternalApisButton {...props} style={{ borderRadius: 0 }} data={\r\n ({\r\n externalApiName: props.row.name,\r\n externalApiDescription: props.row.description,\r\n externalApiFormat: props.row.apiFormat,\r\n externalApiKey: props.row.apiKey,\r\n externalApiId: props.row.id \r\n })} />\r\n </td>\r\n </tr>\r\n\r\n <tr style={props.index % 2 ? { background: \"#e6ecf0\" } : { background: \"white\" }}>\r\n <td style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={4}>\r\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\r\n <Box sx={{ margin: 1 }}>\r\n <Typography variant=\"h6\" gutterBottom component=\"div\">\r\n {row.name}\r\n </Typography>\r\n <DescriptionItem Text=\"Api format example\" />\r\n <div className={classes.ApiContainer}>\r\n <TextField fullWidth disabled multiline value={apiExamplePoints} label={apiExamplePoints ? \" \" : \"API Example\"} InputLabelProps={{ shrink: false }} style={{ marginRight: \"5px\" }} />\r\n {apiExamplePoints !== \"\" ?\r\n <Button size='large' variant=\"contained\" onClick={handleCopyFormat} style={{ background: \"#C3996B\", color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n :\r\n <Button disabled size='large' variant=\"contained\" onClick={handleCopyFormat} style={{ color: 'white', marginBottom: \"8px\" }} startIcon={<FileCopyIcon />} content=\"Copy\">Copy</Button>\r\n }\r\n </div>\r\n </Box>\r\n </Collapse>\r\n </td>\r\n </tr>\r\n <Snackbar\r\n open={openToast}\r\n autoHideDuration={3000}\r\n onClose={handleCloseToast}\r\n message=\"Copied to clipboard\"\r\n />\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport default function TableExternalApi(props) {\r\n const classes = useStyles();\r\n return (\r\n <TableContainer style={{ borderRadius: \"15px\" }} component={Paper}>\r\n <Table size=\"sm\" key={\"table\"}>\r\n <TableHead className={classes.headStyle} key={\"thead\"}>\r\n <TableRow className={classes.tableBodyRow} key={\"throw\"}>\r\n <th className={classes.tableHead} style={{ width: '2%' }} />\r\n <th className={classes.tableHead} >\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n <Tooltip title=\"Alphabetical order\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.handleSorting('name')}>\r\n <SortByAlphaIcon />\r\n </IconButton>\r\n </Tooltip>\r\n API Name\r\n <Tooltip title=\"Search project\" placement=\"top\" arrow>\r\n <IconButton style={{ borderRadius: 0 }} onClick={() => props.toggleFilter()}>\r\n <SearchIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead}>\r\n <span className={classes.titleSearch}>\r\n <div className={classes.icons}>\r\n API Description\r\n </div>\r\n </span>\r\n </th>\r\n <th className={classes.tableHead} style={{ width: '2%' }}>\r\n Actions\r\n </th>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {props.filterOn && <FilterListRow rows={props.rows} filters={props.filters} filterList={props.filterApi} updateFilters={props.updateFilters}></FilterListRow>}\r\n {props.rows.map((row, index) => (\r\n <Row {...props} row={row} index={index} className={classes.tableBodyRow} />\r\n ))}\r\n {props.rows.length === 0 &&\r\n <tr className={classes.tableBodyRow}>\r\n <td colSpan={4}>No connection available</td>\r\n </tr>}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n tableHead: {\r\n height: '42px',\r\n },\r\n titleSearch: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n headStyle: {\r\n backgroundColor: \"#e0dce4\",\r\n },\r\n tableBodyRow: {\r\n justifyContent: \"center\",\r\n textAlign: \"center\",\r\n },\r\n tableRow: {\r\n borderBottom: '2px solid #e0dce4',\r\n },\r\n actionButtons: {\r\n padding: '0px !important',\r\n textAlign: \"center\",\r\n display: \"flex\",\r\n justifyContent: \"center\"\r\n },\r\n tableFooter: {\r\n width: '100%'\r\n },\r\n footer: {\r\n display: 'flex',\r\n },\r\n icons: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n ApiContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: 'flex-end',\r\n },\r\n}));\r\n\r\n","import React, { useState, useEffect } from \"react\";\r\nimport TitlePage from \"../../Shared/TitlePage\";\r\nimport { dataService } from \"../../../Services/data/data.service\";\r\nimport { Grid } from \"@mui/material\";\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { ExternalApiTypes } from '../../../Config/constants';\r\nimport Button from '@mui/material/Button';\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\nimport TableExternalApi from \"./Components/TableExternalApi\";\r\n\r\nfunction ExternalApiOverviewPage(props) {\r\n const history = useHistory();\r\n const [firstLoad, setFirstLoad] = useState(0);\r\n const GetUserID = props.Login.userid;\r\n const classes = useStyles();\r\n const [filters, setFilters] = useState([]);\r\n const [filterOn, setFilterOn] = useState(false);\r\n const [externalApis, setExternalApis] = useState([]);\r\n const [selectedFilter, setSelectedFilter] = useState(1);\r\n const theme = createTheme({\r\n palette: {\r\n neutral: {\r\n main: '#C3996B',\r\n contrastText: '#fff',\r\n },\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n dataService.getApis(GetUserID).then(result => {\r\n setExternalApis(result)\r\n });\r\n }, [])\r\n \r\n if (firstLoad === 0) {\r\n setFirstLoad(1);\r\n }\r\n\r\n const filter = [\r\n { number: 1, column: \"name\", sortOrder: \"ASC\" },\r\n { number: 2, column: \"name\", sortOrder: \"DESC\" },\r\n \r\n ]\r\n \r\n const dynamicSorting = (property) => {\r\n var sortOrder = 1;\r\n if (property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n let asc = false;\r\n let desc = false;\r\n /* SC: Filter now works both ways (ASC, DESC) */\r\n if (filter.find(x => x.number === selectedFilter).column === property) {\r\n if (filter.find(x => x.number === selectedFilter).sortOrder === 'ASC') {\r\n desc = true;\r\n asc = false;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'DESC').number);\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'ASC').number);\r\n }\r\n } else {\r\n desc = false;\r\n asc = true;\r\n setSelectedFilter(filter.find(x => x.column === property && x.sortOrder === 'DESC').number);\r\n }\r\n if (asc === true) {\r\n return function (a, b) {\r\n //ASC A-Z\r\n var result = (a[property].toLowerCase() > b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n } else {\r\n return function (a, b) {\r\n //DESC Z-A\r\n var result = (a[property].toLowerCase() < b[property].toLowerCase() ? 1 : -1);\r\n return result * sortOrder;\r\n }\r\n }\r\n }\r\n\r\n const handleSorting = (sortType) => {\r\n let tempMeasurementRows = [...externalApis]\r\n setExternalApis(tempMeasurementRows.sort(dynamicSorting(sortType)));\r\n }\r\n\r\n const toggleFilter = () => {\r\n if (filterOn) {\r\n setFilters([]);\r\n }\r\n setFilterOn(!filterOn);\r\n }\r\n\r\n const updateFilters = (type, event) => {\r\n let tempFilters = [...filters];\r\n if (tempFilters.some(x => x.type === type)) {\r\n let index = tempFilters.indexOf(tempFilters.find(x => x.type === type));\r\n tempFilters.splice(index, 1);\r\n tempFilters.unshift({ type: type, filterValue: event.target.value });\r\n }\r\n else {\r\n tempFilters.unshift({ type: type, filterValue: event.target.value });\r\n }\r\n setFilters(tempFilters);\r\n filterApi(tempFilters);\r\n }\r\n\r\n const filterApi = (thisFilters) => {\r\n let varFilteredApi = [...externalApis]\r\n var i;\r\n for (i = 0; i < thisFilters.length; i++) {\r\n let filter = thisFilters[i]\r\n switch (filter.type) {\r\n case ExternalApiTypes.NAME:\r\n varFilteredApi = varFilteredApi.filter(x => x.name.toLowerCase().includes(filter.filterValue.toLowerCase()));\r\n break;\r\n\r\n }\r\n }\r\n setExternalApis(varFilteredApi);\r\n }\r\n\r\n const navigateTo = (destination) => {\r\n history.push(destination);\r\n }\r\n\r\n return (\r\n <div>\r\n <TitlePage Text=\"Manage your APIs\" backbutton={true} {...props} />\r\n <div className={classes.container}>\r\n <Grid\r\n container\r\n columnSpacing={3}\r\n rowSpacing={1}\r\n alignItems=\"center\">\r\n <Grid item xs={12} >\r\n <div className={classes.dateAndCreateDiv}>\r\n <div>\r\n <ThemeProvider theme={theme}>\r\n <Button size='large' className={classes.linkButton} color='neutral' variant=\"contained\" onClick={() => navigateTo('/createapi')}>\r\n <span className={classes.iconItem}>\r\n <AddIcon></AddIcon>\r\n </span>Create a API\r\n </Button>\r\n </ThemeProvider>\r\n </div>\r\n </div>\r\n <Divider style={{ marginTop: \"1rem\", marginBottom: \"1rem\" }}></Divider>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <TableExternalApi {...props} toggleFilter={toggleFilter} filters={filters} handleSorting={handleSorting} filterOn={filterOn} filterApi={filterApi} updateFilters={updateFilters} rows={externalApis} />\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ExternalApiOverviewPage;\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n background: \"#FFFFFF\",\r\n borderRadius: \"8px\",\r\n padding: \"1.5rem\",\r\n maxWidth: \"80%\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\",\r\n marginTop: \"1rem\"\r\n },\r\n titleTextStyle: {\r\n marginLeft: \"20px\",\r\n },\r\n titleSection: {\r\n width: \"100%\",\r\n },\r\n titleStyle: {\r\n paddingLeft: \"10%\",\r\n paddingRight: \"10%\",\r\n display: \"flex\",\r\n alignContent: \"space-around\",\r\n alignItems: \"center\",\r\n background: \"#FFFFFF\",\r\n justifyContent: \"space-between\"\r\n },\r\n dateAndCreateDiv: {\r\n display: 'flex',\r\n justifyContent: 'end',\r\n alignItems: 'end',\r\n flexWrap: 'wrap',\r\n },\r\n activeFor: {\r\n color: \"#696969\",\r\n fontSize: \"15px\",\r\n },\r\n backIcon: {\r\n padding: \"20px\",\r\n cursor: \"pointer\"\r\n },\r\n iconItem: {\r\n display: 'flex !important',\r\n alignItems: 'center !important'\r\n }\r\n\r\n});","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAj4AAAACCAMAAABvyyZhAAAAVFBMVEU+OTo+OTk+ODk+OTo9ODo8ODg+OTo+OTo/ODk+ODg+OTo+OTo+ODo+OTo+OTo+OTo+OTo+OTo+OTo+OTo+OTo/PT0+OTo9OTo+OToAAAA+OTo+OTocJmQmAAAAHHRSTlNJGCh+EwlsRB4OMi0iO3F6W09jP3UEUzZnAFdfeS5KggAAALlJREFUOMuFkgsSgjAMRFFEQQUKrfjp/e/pEpxxskmH9zbQA7zqrXlghsalazqPk8uhROtyNxwxl5vL1eVp6T0icSlQFZgMy4JpPpgiYIYcsmLOs+WlOfsMljQky+hQj7VD3M2ngZhJB3b4q3BEjNOBGGWz2cpLlSPqdCC+ok5HxHQ6EDPtrP7p1/UYFRQhxSMHFZXI3WzKy/QzUTvUTwiYJmcctZOpHEjxyHE6PykewO2kEaN0oEv8Ak5DOMraOLhTAAAAAElFTkSuQmCC\"","import { Divider, makeStyles } from '@material-ui/core';\r\nimport React, { useState } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { dataService } from '../../../Services/data/data.service';\r\nimport DividerImage from '../../../Images/line2.png';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nfunction LandingPage(props) {\r\n\r\n const classes = useStyles();\r\n const history = useHistory();\r\n\r\n const [firstName, setFirstName] = useState(null);\r\n const [lastName, setLastName] = useState(null);\r\n const [email, setEmail] = useState(null);\r\n\r\n\r\n\r\n const gotoLogin = () => {\r\n history.push(\"/login\");\r\n }\r\n const requestLogin = () => {\r\n console.log(firstName, lastName, email)\r\n const errors = {}\r\n if (lastName === null) {\r\n errors.lastName = 'Required';\r\n }\r\n if (firstName === null) {\r\n errors.firstName = 'Required';\r\n }\r\n if (email === null) {\r\n errors.email = 'Required';\r\n } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(email)) {\r\n errors.email = 'Invalid email address';\r\n }\r\n\r\n if (Object.keys(errors).length > 0) {\r\n return errors;\r\n } else {\r\n dataService.requestLogin(firstName, lastName, email).then(response => {\r\n if (response.success === true) {\r\n toast.success('Uw aanvraag werd verzonden! Wij nemen zo snel mogelijk contact op met u!', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n } else {\r\n toast.error('Er liep iets verkeerd, probeer opnieuw.', { position: toast.POSITION.TOP_CENTER, autoClose: 2000 });\r\n }\r\n\r\n\r\n });\r\n\r\n }\r\n }\r\n\r\n const handleFirstNameChange = (event) => {\r\n setFirstName(event.target.value);\r\n }\r\n const handleLastNameChange = (event) => {\r\n setLastName(event.target.value);\r\n }\r\n const handleEmailChange = (event) => {\r\n setEmail(event.target.value);\r\n }\r\n\r\n\r\n\r\n return (\r\n <div style={{ backgroundColor: \"#231F20\" }}>\r\n <div class=\"container\">\r\n <header class=\"headersec\">\r\n <div >\r\n <div class=\"hderinr\">\r\n <div class=\"hdrlgo\">\r\n <a href=\"/\"><img src=\"images/hderlogo.png\" alt=\"\" /></a>\r\n <button className={classes.loginButton} onClick={() => gotoLogin()}>Login</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </header>\r\n <div class=\"maadeSec\">\r\n <div class=\"mademain\">\r\n \r\n <div className={classes.infoAndVideoContainer}>\r\n\r\n <div className={classes.infoPannel}>\r\n <h2>Hoe efficiënt zijn jouw machines?</h2>\r\n <ul class=\"ulList\">\r\n <li class=\"listItem\">\r\n <div className={classes.listPoint}>\r\n <span class=\"icon-Vector4\"></span>\r\n <div class=\"media-object\">\r\n <h5>Registreer</h5>\r\n <p>Verzamel real-time events per registratiepunt</p>\r\n </div>\r\n </div>\r\n <img className={classes.imageStyle} src={DividerImage} alt=\"\" />\r\n </li>\r\n <li class=\"listItem\">\r\n <div className={classes.listPoint}>\r\n <span class=\"icon-Vector5\"></span>\r\n <div class=\"media-object\">\r\n <h5>Evalueer</h5>\r\n <p>Bekijk alle geregistreerde events op een tijdsas</p>\r\n </div>\r\n </div>\r\n <img className={classes.imageStyle} src={DividerImage} alt=\"\" />\r\n\r\n </li>\r\n <li class=\"listItem\">\r\n <div className={classes.listPoint}>\r\n <span class=\"icon-Vector6\"></span>\r\n <div class=\"media-object\">\r\n <h5>Reageer</h5>\r\n <p>Verhoog je efficiëntie door gericht je processen te verbeteren</p>\r\n </div>\r\n </div>\r\n <img className={classes.imageStyle} src={DividerImage} alt=\"\" />\r\n\r\n </li>\r\n </ul>\r\n </div>\r\n <div className={classes.videoPannel}>\r\n <div className={classes.videoResponsive}>\r\n <iframe src=\"https://www.youtube.com/embed/ubZkyYdHrPQ\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n {/* <iframe src=\"https://www.youtube.com/embed/ubZkyYdHrPQ\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe> */}\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"loginSec\">\r\n <div >\r\n <div class=\"loginhed\">\r\n <h1>Vraag nu je login aan</h1>\r\n </div>\r\n <div class=\"loginform\">\r\n {/* <div> */}\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"frmbx\">\r\n <label>voornaam</label>\r\n <input type=\"text\" onChange={handleFirstNameChange} value={firstName} placeholder=\"\" />\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"frmbx\">\r\n <label>familienaam</label>\r\n <input onChange={handleLastNameChange} value={lastName} type=\"text\" placeholder=\"\" />\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"frmbx\">\r\n <label>emailadres</label>\r\n <input onChange={handleEmailChange} value={email} type=\"email\" placeholder=\"\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-12\">\r\n <div class=\"frmsubmt\">\r\n <input type=\"submit\" onClick={() => requestLogin()} value=\"Vraag nu je login aan\" />\r\n </div>\r\n </div>\r\n </div>\r\n {/* </form> */}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panelSec\">\r\n <div>\r\n <div class=\"panelinr\">\r\n <img src=\"images/Design_02a.png\" alt=\"\" />\r\n <div class=\"panelcont\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <div class=\"pnlcontinr\">\r\n <span class=\"icon-Vector1\"></span>\r\n <h4>Minder dan een minuut</h4>\r\n <p>Dit is de kost om een registratiepunt te configureren</p>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-3\">\r\n <div class=\"pnlcontinr\">\r\n <span class=\"icon-Vector2-svg\"></span>\r\n <h4>Gemakkelijk</h4>\r\n <p>Taplr is even inuïtief als Payconiq</p>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-3\">\r\n <div class=\"pnlcontinr\">\r\n <span class=\"icon-Vector3\"></span>\r\n <h4>Real-time</h4>\r\n <p>Bekijk real-time wat er gebeurt per registratiepunt</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <footer class=\"foterSec\">\r\n <div class=\"container\">\r\n <div class=\"ftrinr\">\r\n <a href=\"#url\" class=\"ftrlgo\"><img src=\"images/foterlogo.png\" alt=\"\" /></a>\r\n <div class=\"ftrRt\">\r\n <p>© 2022 <a href=\"#url\">Taplr</a>. Alle rechten voorbehouden.</p>\r\n <a href=\"#url\" target=\"_blank\" class=\"ftrsocil\"><span class=\"icon-Vector\"></span></a>\r\n </div>\r\n </div>\r\n </div>\r\n </footer>\r\n\r\n </div>\r\n\r\n )\r\n}\r\n\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n infoAndVideoContainer: {\r\n display: 'flex',\r\n position: 'relative',\r\n flexWrap: 'wrap',\r\n [theme.breakpoints.down('lg')]: {\r\n flexDirection: 'column'\r\n },\r\n },\r\n imageStyle: {\r\n width: '100%'\r\n },\r\n infoPannel: {\r\n width: '49%',\r\n\r\n [theme.breakpoints.down('lg')]: {\r\n width: '100%',\r\n marginBottom: '50px',\r\n },\r\n '& h2': {\r\n\r\n color: '#F7921C',\r\n font: '700 42px/50px \"Comfortaa\", cursive',\r\n },\r\n '& ul': {\r\n width: '100%',\r\n display: 'inline-block',\r\n position: 'relative',\r\n '& li': {\r\n position: 'relative',\r\n },\r\n\r\n '& li:last-child': {\r\n margin: '0px',\r\n },\r\n\r\n },\r\n '& ul:before': {\r\n position: 'absolute',\r\n content: '\"\"',\r\n top: '10px',\r\n bottom: '10px',\r\n left: '59px',\r\n width: '1.2px',\r\n background: '#F8931D',\r\n zIndex: '-1',\r\n\r\n },\r\n\r\n\r\n },\r\n listPoint: {\r\n display: 'flex',\r\n\r\n '& span': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n border: '2px solid #F8931D',\r\n width: '118px',\r\n height: '118px',\r\n borderRadius: '100%',\r\n marginRight: '24px',\r\n color: '#F7921C',\r\n fontSize: '46px',\r\n background: '#231F20',\r\n position: 'relative',\r\n },\r\n\r\n '& div': {\r\n alignItems: 'center',\r\n '& h5': {\r\n color: '#F7921C',\r\n font: '600 24px/30px \"Roboto\", sans-serif',\r\n\r\n },\r\n '& p': {\r\n color: '#B9B9B9',\r\n font: '400 20px/27px \"Roboto\", sans-serif',\r\n margin: '10px 0 0',\r\n\r\n\r\n },\r\n\r\n },\r\n },\r\n videoPannel: {\r\n width: '48%',\r\n display: 'block',\r\n height: '100%',\r\n position: 'relative',\r\n marginBottom: 'auto',\r\n marginTop: 'auto',\r\n marginRight: 'auto',\r\n marginLeft: 'auto',\r\n\r\n [theme.breakpoints.down('lg')]: {\r\n marginTop: '50px',\r\n width: '100%',\r\n\r\n },\r\n\r\n\r\n },\r\n videoResponsive: {\r\n position: 'relative',\r\n height: '100%',\r\n width: '100%',\r\n paddingBottom: '56.25%',\r\n\r\n [theme.breakpoints.down('lg')]: {\r\n paddingBottom: '56.25%',\r\n\r\n\r\n },\r\n\r\n '& iframe': {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n width: '100%',\r\n height: '100%',\r\n }\r\n\r\n },\r\n loginButton: {\r\n backgroundColor: \"#F8931D\",\r\n color: \"white\",\r\n borderRadius: \"20px\",\r\n cursor: \"pointer\",\r\n outline: \"none\",\r\n border: \"none\",\r\n fontFamily: \"'Roboto', sans-serif\",\r\n fontSize: \"24px\",\r\n fontWeight: 500,\r\n float: \"right\",\r\n width: \"120px\",\r\n height: \"60px\",\r\n marginTop: \"20px\"\r\n },\r\n videoContainter: {\r\n width: \"100%\",\r\n height: \"100%\",\r\n position: \"relative\",\r\n overflow: \"hidden\",\r\n paddingTop: \"56.25%\",\r\n },\r\n video: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n }\r\n\r\n}));\r\nexport default LandingPage;","import {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n} from \"react-router-dom\";\r\nimport LoginPage from '../Login/LoginPage';\r\nimport SelectMenuPage from '../SelectMenu/SelectMenuPage';\r\nimport ResultsPage from '../Results/ResultsPage';\r\nimport { PrivateRoute } from '../../Shared/PrivateRoute';\r\nimport CreatePage from '../CreateProject/CreatePage';\r\nimport ConfigurationPage from '../Configuration/ConfigurationPage';\r\nimport UserSettingsPage from '../User/UserSettings/userSettings';\r\nimport ProjectReportPage from \"../ProjectReport/ProjectReport\";\r\nimport ProjectReportOverviewPage from \"../ProjectReportOverview/ProjectReportOverview\";\r\nimport ModifyPage from '../ModifyProject/ModifyPage';\r\nimport PerformMeasurementPage from \"../PerformMeasurement/PerformMeasurementPage\";\r\nimport ManagePage from \"../ProjectOverview/ManagePage\";\r\nimport DuplicatePage from \"../DuplicateProject/DuplicatePage\";\r\nimport CreateListPage from \"../CreateList/CreateList\";\r\nimport CreateExternalApiPage from \"../CreateExternalApi/CreateExternalApi\";\r\nimport ModifyListPage from \"../ModifyList/ModifyList\";\r\nimport ModifyExternalApiPage from \"../ModifyExternalApi/ModifyExternalApi\";\r\nimport ListOverviewPage from \"../ProjectListOverview/ListOverview\";\r\nimport ExternalApiOverviewPage from \"../ExternalApiListOverview/ExternalApiOverview\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport React from \"react\";\r\nimport { createTheme } from '@mui/material/styles';\r\nimport LandingPage from \"../Landing/LandingPage\";\r\nimport { getAuth, RecaptchaVerifier } from \"firebase/auth\";\r\n\r\nfunction NavigationPage(props) {\r\n\r\n const loggedInState = props.Login.loginState;\r\n const classes = useStyles();\r\n const breakpoints = createTheme({\r\n breakpoints: {\r\n values: {\r\n xs: 0,\r\n sm: 600,\r\n md: 900,\r\n lg: 1200,\r\n xl: 1536,\r\n },\r\n },\r\n });\r\n\r\n return (\r\n <Router >\r\n {/* basename={`${process.env.PUBLIC_URL}`} */}\r\n {/* Basename process env public url should be used for the dev env not live */}\r\n\r\n {/* A <Switch> looks through its children <Route>s and\r\n renders the first one that matches the current URL. */}\r\n \r\n <Switch>\r\n <div className={loggedInState ? classes.container : classes.navigationLoginContainer}>\r\n {loggedInState ?\r\n <PrivateRoute path={\"/\"} exact loggedInState={loggedInState} component={() => <SelectMenuPage {...props}></SelectMenuPage>}></PrivateRoute>\r\n :\r\n <React.Fragment>\r\n {/* <Route path=\"/reset\" exact loggedInState={loggedInState} component={() => <ResetPage {...props} />}><ResetPage {...props} /></Route> */}\r\n <Route path=\"/login\" exact loggedInState={loggedInState} component={() => <LoginPage {...props} />}><LoginPage {...props} /></Route>\r\n <Route path=\"/\" exact loggedInState={loggedInState} component={() => <LandingPage {...props} />}><LandingPage {...props} /></Route>\r\n </React.Fragment>\r\n }\r\n <PrivateRoute path={\"/user\"} loggedInState={loggedInState} component={() => <UserSettingsPage {...props}></UserSettingsPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/create\"} loggedInState={loggedInState} component={() => <CreatePage {...props}></CreatePage>}></PrivateRoute>\r\n <PrivateRoute path={\"/modifydropdown\"} loggedInState={loggedInState} component={() => <ModifyListPage {...props}></ModifyListPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/createdropdown\"} loggedInState={loggedInState} component={() => <CreateListPage {...props}></CreateListPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/projectreport\"} loggedInState={loggedInState} component={() => <ProjectReportPage {...props}></ProjectReportPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/projectreportoverview\"} loggedInState={loggedInState} component={() => <ProjectReportOverviewPage {...props}></ProjectReportOverviewPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/createapi\"} loggedInState={loggedInState} component={() => <CreateExternalApiPage {...props}></CreateExternalApiPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/modifyapi\"} loggedInState={loggedInState} component={() => <ModifyExternalApiPage {...props}></ModifyExternalApiPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/dropdownoverview\"} loggedInState={loggedInState} component={() => <ListOverviewPage {...props}></ListOverviewPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/externalapioverview\"} loggedInState={loggedInState} component={() => <ExternalApiOverviewPage {...props}></ExternalApiOverviewPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/modify\"} loggedInState={loggedInState} component={() => <ModifyPage {...props}></ModifyPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/scanqr\"} loggedInState={loggedInState} component={() => <LoginPage {...props}></LoginPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/results\"} loggedInState={loggedInState} component={() => <ResultsPage {...props}></ResultsPage>}></PrivateRoute>\r\n <PrivateRoute path={\"/manage\"} loggedInState={loggedInState} component={() => <ManagePage {...props}></ManagePage>}></PrivateRoute>\r\n <PrivateRoute path={\"/duplicate\"} loggedInState={loggedInState} component={() => <DuplicatePage {...props}></DuplicatePage>}></PrivateRoute>\r\n <PrivateRoute path={\"/configuration\"} loggedInState={loggedInState} component={() => <ConfigurationPage {...props}></ConfigurationPage>}></PrivateRoute>\r\n <Route path={\"/perfmeasurement\"} loggedInState={loggedInState} component={() => <PerformMeasurementPage loggedInState={loggedInState} {...props} />}></Route>\r\n </div>\r\n </Switch>\r\n </Router>\r\n )\r\n}\r\n\r\n\r\nexport default NavigationPage;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n width: '100%',\r\n height: '100%',\r\n marginTop: '8%',\r\n\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '150px',\r\n\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n marginTop: '12%',\r\n\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n marginTop: '9%',\r\n\r\n },\r\n [theme.breakpoints.up('xl')]: {\r\n marginTop: '7%',\r\n\r\n },\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\"\r\n },\r\n navigationLoginContainer: {\r\n width: '100%',\r\n height: '100%',\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\"\r\n },\r\n}));","import React, { useEffect, useState } from 'react';\r\nimport './index.css';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport NavigationPage from './Components/Pages/Navigation/NavigationPage';\r\n//import AdapterDateFns from '@mui/lab/AdapterDateFns';\r\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\n//import LocalizationProvider from '@mui/lab/LocalizationProvider';\r\nimport * as Actions from './Reducers/actions';\r\nimport { bindActionCreators, compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport ApiHelper from './Utils/API/apiHelper';\r\nimport { initializeApp } from 'firebase/app';\r\nimport { getAnalytics } from \"firebase/analytics\";\r\nimport { getAuth, connectAuthEmulator } from \"firebase/auth\";\r\n\r\nexport const App = (props) => {\r\n\r\n const [settingsLoaded, setSettingsLoaded] = useState(false);\r\n const firebaseConfig = {\r\n apiKey: \"AIzaSyBfrMbCqucO7raJ3hclVNKetkOZXjbRgdQ\",\r\n authDomain: \"taplr-b96e9.firebaseapp.com\",\r\n projectId: \"taplr-b96e9\",\r\n storageBucket: \"taplr-b96e9.appspot.com\",\r\n messagingSenderId: \"228132134105\",\r\n appId: \"1:228132134105:web:b2786c6ed30a43f0c7f2c8\",\r\n measurementId: \"G-2CK1YFLXB3\"\r\n };\r\n // Initialize Firebase\r\n const app = initializeApp(firebaseConfig);\r\n const analytics = getAnalytics(app);\r\n\r\n useEffect(() => {\r\n\r\n fetch(\"appSettings.json\").then(\r\n function (res) {\r\n return res.json()\r\n }).then((data) => {\r\n ApiHelper.appSettings = data;\r\n setSettingsLoaded(true);\r\n }).catch(\r\n function (err) {\r\n console.log(err, ' error')\r\n }\r\n )\r\n\r\n });\r\n\r\n if (settingsLoaded) {\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n <NavigationPage {...props}></NavigationPage>\r\n </LocalizationProvider>\r\n );\r\n }\r\n return (<React.Fragment />);\r\n}\r\n\r\nreportWebVitals();\r\n\r\nconst mapStateToProps = state => ({\r\n listCopy: state.listCopy,\r\n externalApiCopy: state.externalApiCopy,\r\n projectCopy: state.projectCopy,\r\n Login: state.Login,\r\n settings: state.settings\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n actions: bindActionCreators(Actions, dispatch)\r\n})\r\n\r\nexport default compose(connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n))(App);\r\n","import * as types from './ProjectCopyActionTypes.js';\r\n\r\nconst initialState = {\r\n company: \"\",\r\n companyId: \"\",\r\n resource: \"\",\r\n fromDate: null,\r\n toDate: null,\r\n details: [],\r\n projectId: \"\",\r\n projectName: \"\",\r\n projectQr: null,\r\n report: false,\r\n};\r\n\r\nexport default function projectCopy(state = initialState, action) {\r\n switch (action.type) {\r\n case types.SET_COMPANY:\r\n if (action.payload !== state.company) {\r\n return Object.assign({}, state, { company: action.payload });\r\n }\r\n return state;\r\n case types.SET_COMPANYID:\r\n if (action.payload !== state.companyId) {\r\n return Object.assign({}, state, { companyId: action.payload });\r\n }\r\n return state;\r\n case types.SET_RESOURCE:\r\n if (action.payload !== state.resource) {\r\n return Object.assign({}, state, { resource: action.payload });\r\n }\r\n return state;\r\n case types.SET_FROMDATE:\r\n if (action.payload !== state.fromDate) {\r\n return Object.assign({}, state, { fromDate: action.payload });\r\n }\r\n return state;\r\n case types.SET_TODATE:\r\n if (action.payload !== state.toDate) {\r\n return Object.assign({}, state, { toDate: action.payload });\r\n }\r\n return state;\r\n case types.SET_DETAILS:\r\n if (action.payload !== state.details) {\r\n return Object.assign({}, state, { details: action.payload });\r\n }\r\n return state;\r\n case types.SET_PROJECTID:\r\n if (action.payload !== state.projectId) {\r\n return Object.assign({}, state, { projectId: action.payload });\r\n }\r\n return state;\r\n case types.SET_PROJECTNAME:\r\n if (action.payload !== state.projectName) {\r\n return Object.assign({}, state, { projectName: action.payload });\r\n }\r\n return state;\r\n case types.SET_PROJECTQR:\r\n if (action.payload !== state.projectQr) {\r\n return Object.assign({}, state, { projectQr: action.payload });\r\n }\r\n return state;\r\n case types.SET_PROJECTREPORT:\r\n if (action.payload !== state.report) {\r\n return Object.assign({}, state, { report: action.payload });\r\n }\r\n return state;\r\n default: {\r\n return state;\r\n }\r\n }\r\n}","import * as types from './LoginActionTypes.js';\r\n\r\nconst initialState = {\r\n loginState: false,\r\n userid: null,\r\n userName: '',\r\n email: '',\r\n lastName: '',\r\n auth: {}\r\n};\r\n\r\nexport default function Login(state = initialState, action) {\r\n switch (action.type) {\r\n case types.SET_LOGIN:\r\n if (action.payload !== state.loginState) {\r\n return Object.assign({}, state, { loginState: action.payload });\r\n }\r\n return state;\r\n case types.SET_USERID:\r\n if (action.payload !== state.userid) {\r\n return Object.assign({}, state, { userid: action.payload });\r\n }\r\n return state;\r\n case types.SET_USERNAME:\r\n if (action.payload !== state.userName) {\r\n return Object.assign({}, state, { userName: action.payload });\r\n }\r\n return state;\r\n case types.SET_EMAIL:\r\n if (action.payload !== state.email) {\r\n return Object.assign({}, state, { email: action.payload });\r\n }\r\n return state;\r\n case types.SET_LASTNAME:\r\n if (action.payload !== state.lastName) {\r\n return Object.assign({}, state, { lastName: action.payload });\r\n }\r\n return state;\r\n\r\n default: {\r\n return state;\r\n }\r\n }\r\n}","import * as types from './ListCopyActionTypes';\r\n\r\nconst initialState = {\r\n listName: \"\",\r\n listDescription: \"\",\r\n listItems: [],\r\n listIsAvtive: null,\r\n listId: 0\r\n};\r\n\r\nexport default function listCopy(state = initialState, action) {\r\n switch (action.type) {\r\n case types.SET_LISTNAME:\r\n if (action.payload !== state.listName) {\r\n return Object.assign({}, state, { listName: action.payload });\r\n }\r\n return state;\r\n case types.SET_LISTDESCRIPTION:\r\n if (action.payload !== state.listDescription) {\r\n return Object.assign({}, state, { listDescription: action.payload });\r\n }\r\n return state;\r\n case types.SET_LISTITEMS:\r\n if (action.payload !== state.listItems) {\r\n return Object.assign({}, state, { listItems: action.payload });\r\n }\r\n return state;\r\n case types.SET_LISTISACTIVE:\r\n if (action.payload !== state.listIsAvtive) {\r\n return Object.assign({}, state, { listIsAvtive: action.payload });\r\n }\r\n return state;\r\n case types.SET_LISTID:\r\n if (action.payload !== state.listId) {\r\n return Object.assign({}, state, { listId: action.payload });\r\n }\r\n return state;\r\n default: {\r\n return state;\r\n }\r\n }\r\n}","import * as types from './ExternalAPiCopyActionTypes';\r\n\r\nconst initialState = {\r\n ExternalApiName: \"\",\r\n ApiDescription: \"\",\r\n ExternalApiKey: \"\",\r\n ExternalApiItems: [],\r\n ExternalApiId: \"\",\r\n};\r\n\r\nexport default function ExternalApiCopy(state = initialState, action) {\r\n switch (action.type) {\r\n case types.SET_EXTERNALAPINAME:\r\n if (action.payload !== state.ExternalApiName) {\r\n return Object.assign({}, state, { ExternalApiName: action.payload });\r\n }\r\n return state;\r\n case types.SET_EXTERNALAPIDESCRIPTION:\r\n if (action.payload !== state.ExternalApiDescription) {\r\n return Object.assign({}, state, { ExternalApiDescription: action.payload });\r\n }\r\n return state;\r\n case types.SET_EXTERNALAPIKEY:\r\n if (action.payload !== state.ExternalApiKey) {\r\n return Object.assign({}, state, { ExternalApiKey: action.payload });\r\n }\r\n return state;\r\n case types.SET_EXTERNALAPIITEMS:\r\n if (action.payload !== state.ExternalApiItems) {\r\n return Object.assign({}, state, { ExternalApiItems: action.payload });\r\n }\r\n return state;\r\n case types.SET_EXTERNALAPIID:\r\n if (action.payload !== state.ExternalApiId) {\r\n return Object.assign({}, state, { ExternalApiId: action.payload });\r\n }\r\n return state;\r\n default: {\r\n return state;\r\n }\r\n }\r\n}","import projectCopy from \"./ProjectCopy/ProjectCopy.js\";\r\nimport Login from \"./Login/Login\";\r\nimport listCopy from \"./ListCopy/ListCopy.js\";\r\nimport externalApiCopy from \"./ExternalAPiCopy/ExternalApiCopy.js\";\r\nimport {combineReducers} from 'redux';\r\nimport {configureStore} from '@reduxjs/toolkit';\r\nimport storage from 'redux-persist/lib/storage';\r\nimport {\r\n persistReducer,\r\n FLUSH,\r\n REHYDRATE,\r\n PAUSE,\r\n PERSIST,\r\n PURGE,\r\n REGISTER,\r\n} from 'redux-persist';\r\n\r\nconst persistConfig = {\r\n key: 'root',\r\n storage\r\n};\r\n\r\nconst rootReducers = combineReducers({\r\n projectCopy,\r\n Login,\r\n listCopy,\r\n externalApiCopy\r\n});\r\n\r\nconst persistedReducer = persistReducer(persistConfig, rootReducers);\r\n\r\nconst store = configureStore({\r\n reducer: persistedReducer,\r\n middleware: (getDefaultMiddleware) =>\r\n getDefaultMiddleware({\r\n serializableCheck: {\r\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\r\n },\r\n }),\r\n});\r\n\r\nexport default store;","import React, { Suspense } from \"react\";\r\nimport { render } from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport App from './app';\r\nimport store from \"./Reducers/index\";\r\nimport { persistStore } from 'redux-persist';\r\nimport { PersistGate } from 'redux-persist/integration/react';\r\n\r\nconst Loader = () => <div>loading...</div>;\r\n\r\nlet persistor = persistStore(store);\r\n\r\nrender(\r\n\r\n <Provider store={store}>\r\n <Suspense fallback={<Loader />}>\r\n <PersistGate persistor={persistor}>\r\n <App />\r\n </PersistGate>\r\n </Suspense>\r\n </Provider>,\r\n\r\n document.getElementById('root')\r\n);\r\n\r\n"],"sourceRoot":""}