{"version":3,"sources":["Images/austinhosebanner.png","Images/austinhosebanner-small.png","Reducers/main.js","Reducers/navBar.js","Reducers/SerialDetails/serialDetails.js","Reducers/SerialDetail/serialDetail.js","Reducers/Customers/customers.js","Reducers/Customer/customer.js","Reducers/Users/users.js","Reducers/User/user.js","Reducers/Auth/login.js","Reducers/Auth/forgotPassword.js","Reducers/Auth/resetPassword.js","Reducers/Report/report.js","Reducers/ServiceTracker/serviceTracker.js","Reducers/ServiceTrackers/serviceTrackers.js","Reducers/ServiceReport/serviceReport.js","Reducers/index.js","Config.js","Services/AuthService.js","Services/HttpService.js","Services/CoreService.js","Thunks/ServiceTrackerThunk.js","Routing/ReactiveRouter.js","Routing/ProtectedRoute.js","Hooks/UseMediaQuery.js","NavBar.js","Thunks/LoginThunk.js","Auth/Login.js","ReportPicker/ReportPicker.js","Thunks/ForgotPasswordThunk.js","Auth/ForgotPassword.js","Thunks/ResetPasswordThunk.js","Auth/ResetPassword.js","Thunks/SerialDetailsThunk.js","Hooks/UseDebounce.js","SerialDetails/SearchBar.js","SerialDetails/FieldSelector.js","Services/UtilService.js","Services/FileService.js","SerialDetails/DataGrid.js","Components/GridSpinner.js","SerialDetails/SearchByField.js","SerialDetails/SerialDetails.js","SerialDetail/Inputs/StringInput.js","SerialDetail/Inputs/DateInput.js","SerialDetail/Inputs/AutoCompleteInput.js","SerialDetail/Inputs/FileInput.js","SerialDetail/Inputs/Input.js","Thunks/SerialDetailThunk.js","SerialDetail/ErrorModal.js","SerialDetail/Actions.js","SerialDetail/NewSerialDetail.js","Components/ActionButtons.js","SerialDetail/CoreData.js","SerialDetail/Components/StaticSelectField.js","SerialDetail/SiteAndRegionSelects.js","SerialDetail/DynamicFields.js","SerialDetail/Components/StaticStringField.js","SerialDetail/HoseReplacementDetails.js","SerialDetail/DeleteModal.js","SerialDetail/SerialDetail.js","Customers/DataGrid.js","Customers/Customers.js","Customer/SiteModal.js","Components/DeleteModal.js","Customer/Sites.js","Customer/RegionModal.js","Customer/Regions.js","Customer/Customer.js","Users/DataGrid.js","Users/Users.js","User/RegionAccess.js","Components/ErrorModal.js","User/User.js","Thunks/ReportThunk.js","Report/ReportSearch.js","Report/Filters/SliderFilter.js","Report/Filters/SelectStaticFilter.js","Report/Filters/SelectDynamicFilter.js","Report/Filters/SiteStatusFilter.js","Report/Filters/SortFilter.js","Report/ReportFilter.js","Report/ReportCSV.js","Report/ReportGrouping/RegionGrouping.js","Report/ReportGrouping/SiteGrouping.js","Report/ReportGrouping/DynamicGrouping.js","Report/ReportGrouping/SerialDetail/SerialDetailData.js","Report/ReportGrouping/SerialDetail/EndOfLifeChart.js","Report/ReportGrouping/SerialDetail/SerialDetailDownload.js","Report/ReportGrouping/SerialDetail/SerialDetail.js","Report/ReportGrouping/ReportGrouping.js","Services/ReportService.js","Report/DowloadZipDlg.jsx","Report/Report.js","Thunks/ServiceTrackersThunk.js","ServiceTrackers/SearchBar.js","ServiceTrackers/DataGrid.js","ServiceTrackers/ServiceTrackers.js","ServiceTracker/ErrorModal.js","ServiceTracker/DeleteModal.js","ServiceTracker/Inputs/AutoCompleteInput.js","ServiceTracker/Inputs/DateInput.js","ServiceTracker/Inputs/StringInput.js","ServiceTracker/Inputs/FileInput.js","ServiceTracker/Inputs/FileUploads.js","ServiceTracker/ServiceTracker.js","Thunks/ServiceReportThunk.js","ServiceReport/ServiceTracker/EndOfLifeChart.js","ServiceReport/ServiceTracker/ServiceTrackerData.js","ServiceReport/ServiceTracker/ServiceTrackerDownload.js","ServiceReport/ServiceTracker/ServiceTracker.js","ServiceReport/ServiceReport.js","Components/NotFound.js","UploadCertificate/index.js","SerialHash/index.js","Main.js","Util/Util.js","Components/ErrorBoundry.js","App.js","serviceWorker.js","index.js","Images/assettrackinglogo.png"],"names":["module","exports","SET_FIELD_DEFINITIONS","SET_DISPLAY_LINEAR_PROGRESS","SET_PATH","initialState","fieldDefinitions","displayLinearProgress","displayLinearProgressCounter","path","pathInitialized","setFieldDefinitions","fields","type","setDisplayLinearProgress","setPath","SET_SIDE_MENU_OPEN","screenName","sideMenuOpen","setSideMenuOpen","SET_SERIAL_DETAILS","SET_SERIAL_DETAILS_WITH_PAGINATION","SET_SERIAL_DETAILS_LOADING","SET_SEARCH_TERM","SET_PAGE_SIZE","SET_PAGE","SET_ORDER_BY","SET_ORDER_ASCENDING","SET_SEARCH_BY","CLEAN_UP","serialDetails","isSerialDetailsLoading","searchTerm","pageSize","page","orderBy","orderAscending","totalSerialDetails","searchBy","setSerialDetails","setSerialDetailsWithPagination","paginatedResult","setSerialDetailsLoading","setSearchTerm","setPageSize","setPage","setOrderBy","setOrderAscending","setSearchBy","cleanUp","SET_SERIAL_DETAIL","SET_SERIAL_DETAIL_WITH_FIELDS","SET_ERROR_MODAL_OPEN","SET_DELETE_MODAL_OPEN","SET_DELETE_MODAL_LOADING","SET_SERIAL_DETAIL_LOADING","SET_SERIAL_DETAIL_LOG","SET_SERIAL_DETAIL_LOG_LOADING","staticFields","serialDetail","errorList","errorModalOpen","deleteModalOpen","deleteModalLoading","serialDetailLoading","serialDetailLog","serialDetailLogLoading","setSerialDetail","setSerialDetailWithFields","setErrorModalOpen","setDeleteModalOpen","setDeleteModalLoading","setSerialDetailLoading","setSerialDetailLog","setSerialDetailLogLoading","SET_CUSTOMERS","SET_CUSTOMERS_WITH_PAGINATION","SET_CUSTOMERS_LOADING","customers","isCustomersLoading","totalCustomers","setCustomers","setCustomersWithPagination","setCustomersLoading","SET_CUSTOMER","SET_CUSTOMER_SITES","SET_CURRENT_SITE","SET_CUSTOMER_REGIONS","SET_CURRENT_REGION","SET_OPEN_MODAL","SET_MODAL_LOADING","SET_UNABLE_TO_DELETE_TEXT","customer","currentSite","name","status","currentRegion","openModal","isModalLoading","unableToDeleteText","setCustomer","setCustomerSites","sites","setCurrentSite","setCustomerRegions","regions","setCurrentRegion","setOpenModal","setModalLoading","setUnableToDeleteText","SET_USERS","SET_USERS_WITH_PAGINATION","SET_IS_USERS_LOADING","users","isUsersLoading","totalUsers","setUsers","setUsersWithPagination","setIsUsersLoading","SET_USER","SET_USER_WITH_ACCESS","SET_IS_ERROR_MODAL_OPEN","SET_IS_DELETE_MODAL_OPEN","SET_IS_DELETE_MODAL_LOADING","SET_USER_LOADING","UPDATE_SELECTED_REGION","user","isDeleteModalOpen","isDeleteModalLoading","isUserLoading","isErrorModalOpen","access","isDirty","setUser","setUserWithAccess","setIsErrorModalOpen","setIsDeleteModalOpen","setIsDeleteModalLoading","setIsUserLoading","updateSelectedRegion","customerId","regionId","isSelected","SET_USERNAME","SET_PASSWORD","SET_LOGIN_ERRORS","SET_LOGIN_LOADING","username","password","isLoginLoading","loginErrors","setUsername","setPassword","setLoginErrors","errors","setIsLoginLoading","SET_EMAIL","SET_MESSAGE","SET_IS_LOADING","email","isLoading","message","setEmail","setMessage","setIsLoading","SET_TOKEN","SET_CONFIRM_PASSWORD","SET_IS_DIRTY","tokenReadFromUrl","token","confirmPassword","successMessage","failureMessage","setToken","setConfirmPassword","isSuccess","setIsDirty","SET_REPORT_CONFIG","SET_RECORDS","SET_FIELD","SET_COLLAPSED","records","reportConfig","fieldValues","9","value","collapsed","setReportConfig","setRecords","setField","change","setCollapsed","SET_SERVICE_TRACKER","SET_SERVICE_TRACKER_DIRTY","SET_SERVICE_TRACKER_LOADING","SET_SERVICE_TYPES","serviceTracker","files","serviceDate","Date","serviceTypeId","serviceTrackerIsDirty","serviceTypes","serviceTrackerLoading","setServiceTracker","setServiceTrackerIsDirty","setServiceTrackerLoading","setServiceTypes","SET_SERVICE_TRACKERS_WITH_PAGINATION","SET_SERVICE_TRACKERS_LOADING","serviceTrackers","isServiceTrackersLoading","totalServiceTrackers","setServiceTrackers","setServiceTrackersWithPagination","setServiceTrackersLoading","main","state","action","counter","navBar","items","totalCount","customerCopy","customersCopy","concat","filter","x","id","regionsCopy","region","regionIndex","indexOf","customerIndex","login","forgotPassword","resetPassword","report","serviceReport","config","general","genericError","notValidLogIdError","auth","grant_type","client_id","client_secret","scope","refreshToken","dynamicFieldTypes","string","date","select","file","specificFields","ageFilter","definitionId","diameter","grade","length","end1","end2","placement","decomissioned","siteStatus","key","filterType","static","dynamic","reportGrouping","sitePreloadedSize","siteLoadStep","dynamicPreloadedSize","serialDetailPreloadedSize","serialDetailLoadStep","Object","freeze","now","authStringified","JSON","stringify","localStorage","setItem","getItem","parse","removeItem","this","GetAuth","expirationTime","setSeconds","getSeconds","expires_in","role","specificRoleCheck","IsUserAuthenticated","Array","isArray","includes","HttpService","MakeUrlEncodedPost","Config","refresh_token","MakePost","model","url","actualUrl","api","MakeNoBodyRequest","body","MakeBodyRequest","formData","FormData","append","options","method","MakeRequest","setUploadPercentage","retry","AuthService","authHeader","Authorization","access_token","axios","post","headers","onUploadProgress","progressEvent","percentage","Math","round","loaded","total","response","data","RefreshUser","refreshResult","ok","json","newAuth","StoreAuth","UploadFileWithPercentage","console","error","Accept","fetch","httpResult","getUrlEncodedFormDataFromJson","obj","prefix","postfix","formBody","property","encodedKey","encodeURIComponent","boxedKey","encodedValue","push","nestedPrefix","nested","join","MakeGet","term","unassignedSerialDetail","MakePut","MakeDelete","itemId","serialNumber","UploadFile","site","siteId","userId","userModel","endpoint","fileName","hash","getServiceTracker","a","dispatch","getState","MainActionCreators","CoreService","GetServiceTracker","httpResponse","ActionCreators","text","log","createServiceTracker","validateForm","CreateServiceTracker","updateServiceTracker","UpdateServiceTracker","serviceCycle","deleteServiceTracker","DeleteServiceTracker","getServiceTypes","GetServiceTypes","serviceTypesHttpResponse","getCustomers","GetCustomers","customersHttpResponse","customersResponse","map","trim","connect","args","apply","withRouter","props","useEffect","history","location","pathname","Component","component","rest","render","IsAtLeast","to","useMediaQuery","query","mediaMatch","window","matchMedia","useState","matches","setMatches","handler","e","addListener","removeListener","useStyles","makeStyles","theme","toolBar","display","fles","justifyContent","toolBarTitle","menuButton","marginRight","spacing","title","flexGrow","list","width","fullList","isUserAuthenticated","classes","toggleDrawer","open","event","isWide","redirectToHome","Fragment","AppBar","position","color","Toolbar","className","Box","IconButton","onClick","edge","aria-label","height","src","require","alt","style","cursor","Button","RemoveAuth","variant","Drawer","onClose","onKeyDown","List","ListItem","button","ListItemIcon","ListItemText","primary","Divider","AuthorizeUser","error_description","root","marginTop","logo","margin","padding","paper","maxWidth","flexDirection","textAlign","fontSize","textField","marginLeft","loginErorrs","MainBarActionCreators","ThunkActionCreators","Paper","TextField","label","autoComplete","onChange","target","i","CircularProgress","size","buttons","submitForgotPasswordClaim","SubmitForgotPasswordClaim","validateResetPassword","ResetPassword","search","queryString","substring","split","reduce","decoded","decodeURIComponent","isPasswordFieldInvalid","fieldName","otherPassword","match","params","searchSerialDetails","sortBy","sortAscending","GetSerialDetails","useDebounce","delay","debouncedValue","setDebouncedValue","setTimeout","clearTimeout","inputRoot","inputInput","transition","transitions","create","borderBottom","breakpoints","up","minWidth","lineHeight","borderRadius","shape","backgroundColor","fade","palette","common","white","searchIcon","pointerEvents","alignItems","clearIcon","top","right","zIndex","SearchBar","isSearching","setIsSearching","debouncedSearchTerm","onSearch","then","InputBase","placeholder","input","onKeyPress","charCode","onSetSearchTerm","inputProps","MenuProps","PaperProps","maxHeight","ITEM_HEIGHT","formControl","inputContainer","FieldSelector","FormControl","InputLabel","htmlFor","Select","multiple","fieldsCopy","forEach","selected","onUpdateFields","Input","renderValue","field","MenuItem","Checkbox","checked","displayName","substr","day","getDate","slice","getMonth","getFullYear","fileServer","fileGuid","fileExtension","overflowX","table","header","fileLink","fileIcon","sortIcon","renderSortIcon","column","renderCoreDataHeader","TableCell","align","onSort","toUpperCase","Table","TableHead","TableRow","isUnassigned","TableBody","detail","item","invoiceNumber","soNumber","customerPo","Fab","onCreateNew","onSetPath","createSerialDetail","onDelete","deleteUnassignedSerialDetail","UtilService","Abbreviate","customerSite","customerRegion","definition","fieldValue","find","def","stringValue","FormatDate","dateValue","optionId","fileId","href","FileService","GetUrl","rel","renderFieldValues","replacementHoseSerialNumber","failureDetails","colSpan","children","TableFooter","TablePagination","count","rowsPerPage","backIconButtonProps","nextIconButtonProps","onChangePage","onChangeRowsPerPage","progressContainer","GridSpinner","SearchByField","searchByFieldsJson","handleChange","inputContainers","flexWrap","handleSearch","handlePageChange","newPage","handleRowCountChange","handleSort","orderByTerm","charAt","multilineTextField","StringInput","onBlur","onBlurCallBack","isRequired","multiline","rows","isRemoteError","toString","isOpen","setIsOpen","utils","DateFnsUtils","onOpen","format","KeyboardButtonProps","AutoCompleteInput","isOptionInvalid","selectedValue","useMemo","s","Autocomplete","getOptionLabel","option","clearOnEscape","ev","blurOnSelect","renderInput","container","fontFamily","fontWeight","paddingTop","buttonLeft","buttonRight","download","FileInput","extension","lastIndexOf","guid","accept","allowedFileExtensions","allowedFileMimeTypes","textDecoration","box","paddingRight","paddingLeft","DateInput","getSerialDetailWithStaticFields","GetSerialDetail","GetStaticFieldDefinitions","fieldsHttpResponse","fieldsResponse","getStaticFields","CreateSerialDetail","updateSerialDetail","UpdateSerialDetail","staticFieldsCopy","f","deleteSerialDetail","DeleteSerialDetail","getSerialDetailLog","isMainLoadingType","GetSerialDetailLog","valid","autoRedirect","previousRequest","modalContainer","modal","background","default","border","boxShadow","shadows","modalAction","ErrorModal","handleModalChange","onModalChange","Modal","aria-labelledby","aria-describedby","actions","actionButton","Actions","onPrimary","primaryLabel","onSecondary","formContainer","marginBottom","paddingBottom","remoteValidationKeys","SerialDetailThunk","SerialDetailActionCreators","styles","details","setDetails","FieldsJson","setFields","showError","setShowError","setErrorList","getFlattenDetail","maxLogId","prev","getValueFromField","entity","undefined","logId","flatten","useCallback","updatedValue","stateItem","stateSerialNumber","lastItem","lastSerialDetail","isInvalidateRemoteField","isValidated","fetchSerialDetailLog","Grid","xs","sm","isRemoteValidated","goBack","secondaryLabel","ActionButtons","onTertiary","tertiaryLabel","gray","CoreData","buildData","invoiceDate","toLocaleString","d","StaticSelectField","SiteAndRegionSelects","serialDetailCopy","onUpdateSerialDetail","austinCustomerSiteId","austinCustomerRegionId","DynamicFields","hideFileUpload","toRemove","index","splice","StaticStringField","replacementDescription","HoseReplacementDetails","handleStaticStringChange","DeleteModal","closeModal","fetchData","updateSerialDetailState","dynamicDefinition","fieldToUpdate","staticDefinition","staticIndex","staticFieldToUpdate","sleep","m","Promise","r","getData","mimicPageLoading","floor","random","filteredCustomers","array","pageNo","startIndex","endIndex","getManualPaginatedResult","radio","CreateSiteModal","nameDirty","statusDirty","setState","onSiteNameChange","FormLabel","RadioGroup","onSiteStatusChange","FormControlLabel","control","Radio","siteSurvey","fileChange","onSiteSurveyChange","tableContainer","createButtonContainer","handleSiteNameChange","current","handleSiteStatusChange","handleSiteSurveyChange","createSite","CreateCustomerSite","updateSite","UpdateCustomerSite","sitesCopy","oldSite","attempSiteDeletion","AttemptCustomerSiteDeletion","siteToDelete","result","deleteSite","DeleteCustomerSite","newSites","showEditSiteModal","SiteModal","CreateRegionModal","onRegionNameChange","fab","handleRegionNameChange","createRegion","CreateCustomerRegion","updateRegion","UpdateCustomerRegion","oldRegion","attempRegionDeletion","AttemptCustomerRegionDeletion","regionToDelete","deleteRegion","DeleteCustomerRegion","newRegions","showEditRegionModal","RegionModal","section","GetCustomer","createUserAction","firstName","lastName","roleType","renderRole","onSetUser","customerRegionAccess","UserActionCreators","GetUsers","treeItemContent","group","borderLeft","RegionAccess","hasAny","some","TreeItem","collapseIcon","expandIcon","content","nodeId","onUpdateSectedRegion","TreeView","onButtonClick","buttonTitle","GetUser","GetUserCustomerRegionAccess","accessHttpResponse","accessResponse","userAccess","userRegionIds","createUser","validateModel","buildModel","CreateUser","updateUser","UpdateUser","c","isPassword","deleteUser","DeleteUser","justify","getReport","GetReportConfig","reportConfigResponse","GetReport","reportResponse","ReportSearch","evt","ageFilterLabel","SliderFilter","setValue","Typography","gutterBottom","Slider","max","min","onChangeCommitted","onHandleChange","valueLabelDisplay","marks","SelectStaticFilter","SelectDynamicFilter","SiteStatusFilter","SortFilter","refKey","ReportFilter","filters","staticFilters","siteStatusFilter","dynamicFilters","filteringFields","installDateSortFilter","downloadBox","ReportCSV","downloadReport","keys","range","fileResponse","blob","URL","createObjectURL","document","createElement","appendChild","click","remove","regionContainer","borderColor","loadMore","RegionGrouping","preloadedSize","loadStep","setGroup","g","onExpand","allyDownloadProps","siteContainer","flex","siteData","dynamicContainer","SiteGrouping","selectedFiles","onDowloadSelectedFilesClick","allGrouppedDocuments","setSelectedFiles","completelyLoaded","setCompletelyLoaded","filteredAllDownloadFiles","filteredDownloadFiles","areAllDocumentsSelected","every","hideLoadCompleteSiteButton","textTransform","prevFiles","cleanedFiles","icon","checkedIcon","customerSiteFileGuid","customerSiteFileExtension","placementFieldName","dynamicFieldName","DynamicGrouping","groupings","serialDetailDataContainer","flexDirectison","serialDetailDataHeader","serialDetailDecomissionedLabel","serialDetailData","serialDetailDataLine","serialDetailDataName","DisplayFormattedText","formattedText","replace","whiteSpace","SerialDetailData","getStringFieldValue","getSelectFieldValue","textFields","getDateFieldValue","testComment","lastCertDate","moment","utc","local","dateInstalled","dateInstalledDate","getAge","serialDetailChart","endOfLifeContainer","relative","endOfLife","left","endOfLifeVisual","EndOfLifeChart","includeRecertification","getEndOfLife","age","lifeTime","customerEndOfLifeMonths","getRecertificationValue","customerRecertifyCycleMonths","thickness","serialDetailDownload","SerialDetailDownload","getFileFieldValue","downloadFields","isChecked","selectedFile","isExist","borderTop","SerialDetail","ReportGrouping","dynamicFieldGroupers","groupingFields","fd","function","displayNameFunction","o","groupers","sortOrder","grouper","groups","groupBy","sort","b","valueA","valueB","by","sortedGroups","GroupRecords","latestValueA","latestValueB","filtersValues","filteredRecords","fitlerIds","filterId","dynamicField","df","ageField","dateA","dateB","toLowerCase","searchableFields","sf","dialogTitle","fileItem","statusIcon","fileInfo","selectedFileContainer","DownloadZipDialog","downloading","setDownloading","linkedFilesData","setLinkedFilesData","downloadStatus","setDownloadStatus","fetchingRawFiles","setFetchingRawFiles","updateDownloadStatus","selectedIndex","fileIndex","statusObj","fetchAndDownload","zip","JSZip","allLinkedFiles","GetHashFiles","res","folderName","folder","j","progress","get","fileUrl","responseType","onDownloadProgress","percentCompleted","originalFileName","ext","pop","binary","generateAsync","zipBlob","currentDate","toISOString","zipFilename","link","setAttribute","parentNode","removeChild","revokeObjectURL","Dialog","fullWidth","DialogTitle","disableTypography","DialogContent","dividers","fileStatus","HourglassEmpty","CheckCircle","getStatusIcon","LinearProgress","collapseButton","bottom","buttonText","parseInt","filesToZip","setFilesToZip","showDownloadZipDlg","setShowDownloadZipDlg","setAllGrouppedDocuments","prevSelectedFiles","each","downloadUrl","configureAllDownloadFiles","fRecords","ReportService","FilterRecords","filesRecords","SearchRecords","groupKey","filesToDowload","GetGroupers","searchedRecords","installDateSort","gd","searchServiceTrackers","GetServiceTrackers","typeId","typeName","getServiceType","daysExpired","daysToExpire","Number","spinnerContainer","setError","acceptProp","accespt","addFileContainer","FileUploads","currentFile","updatedFile","handleNameChange","newFiles","emptyService","md","notes","getServiceReport","GetServiceReport","serviceTrackerChart","serviceTrackerDataContainer","serviceTrackerDataHeader","serviceTrackerDecomissionedLabel","serviceTrackerData","serviceTrackerDataLine","serviceTrackerDataName","ServiceTrackerData","FormatDateUS","setMonth","getServiceDue","borderWidth","borderStyle","documents","serviceTrackerDownload","ServiceTrackerDownload","headerData","headerLabel","headerValue","ServiceTracker","serviceType","paperContainer","trackers","NotFound","FileItem","itemIndex","currentActiveIndex","processNextFile","validationResult","setValidationResult","uploadResult","setUploadResult","isValidating","setIsValidating","isUploading","setIsUploading","uploadPercentage","resetState","startValidation","getFileName","VerifyFileName","exists","uploadFile","UploadFileQR","uploaded","toFixed","dropzoneStyle","dropzoneStyleActive","VerifyUploadFile","useTheme","isSmallScreen","down","setCurrentActiveIndex","useDropzone","onDrop","acceptedFiles","getRootProps","getInputProps","isDragActive","Container","SerialHash","useParams","searchResults","setSearchResults","handleViewFile","elevation","testDate","screen","overflow","ServiceTrackerThunkActionCreators","getAppData","fetchers","getFieldData","all","GetFieldDefinitions","React","Login","ForgotPassword","ReportPicker","exact","Report","ServiceReport","SerialDetails","NewSerialDetail","ServiceTrackers","Customers","Customer","Users","User","UploadCertificate","prototype","_hash","_map","ErrorFallbackRender","reload","createMuiTheme","secondary","typography","App","rootReducer","combineReducers","reducer","store","createStore","applyMiddleware","thunkMiddleware","fallbackRender","ThemeProvider","Boolean","hostname","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.0fcc6811.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","const SET_FIELD_DEFINITIONS = 'asset-tracking/main/SET_FIELD_DEFINITIONS'\r\nconst SET_DISPLAY_LINEAR_PROGRESS =\r\n 'asset-tracking/main/SET_DISPLAY_LINEAR_PROGRESS'\r\nconst SET_PATH = 'asset-tracking/main/SET_PATH'\r\n\r\nvar initialState = {\r\n fieldDefinitions: [],\r\n displayLinearProgress: false,\r\n displayLinearProgressCounter: 0,\r\n path: '/',\r\n pathInitialized: false,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_FIELD_DEFINITIONS:\r\n return { ...state, fieldDefinitions: action.fields }\r\n case SET_DISPLAY_LINEAR_PROGRESS:\r\n var counter = action.displayLinearProgress\r\n ? state.displayLinearProgressCounter + 1\r\n : state.displayLinearProgressCounter - 1\r\n if (counter > 0) {\r\n return {\r\n ...state,\r\n displayLinearProgress: true,\r\n displayLinearProgressCounter: counter,\r\n }\r\n } else {\r\n return {\r\n ...state,\r\n displayLinearProgress: false,\r\n displayLinearProgressCounter: counter,\r\n }\r\n }\r\n case SET_PATH:\r\n return { ...state, path: action.path, pathInitialized: true }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setFieldDefinitions = (fields) => ({\r\n type: SET_FIELD_DEFINITIONS,\r\n fields,\r\n})\r\nexport const setDisplayLinearProgress = (displayLinearProgress) => ({\r\n type: SET_DISPLAY_LINEAR_PROGRESS,\r\n displayLinearProgress,\r\n})\r\nexport const setPath = (path) => ({ type: SET_PATH, path })\r\n","const SET_SIDE_MENU_OPEN = 'asset-tracking/navBar/SET_SIDE_MENU_OPEN'\r\n\r\nvar initialState = {\r\n screenName: 'Asset Tracking',\r\n sideMenuOpen: false,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_SIDE_MENU_OPEN:\r\n return { ...state, sideMenuOpen: action.sideMenuOpen }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setSideMenuOpen = (sideMenuOpen) => ({\r\n type: SET_SIDE_MENU_OPEN,\r\n sideMenuOpen,\r\n})\r\n","const SET_SERIAL_DETAILS =\r\n 'asset-tracking/serialDetails/serialDetails/SET_SERIAL_DETAILS'\r\nconst SET_SERIAL_DETAILS_WITH_PAGINATION =\r\n 'asset-tracking/serialDetails/serialDetails/SET_SERIAL_DETAILS_WITH_PAGINATION'\r\nconst SET_SERIAL_DETAILS_LOADING =\r\n 'asset-tracking/serialDetails/serialDetails/SET_SERIAL_DETAILS_LOADING'\r\nconst SET_SEARCH_TERM =\r\n 'asset-tracking/serialDetails/serialDetails/SET_SEARCH_TERM'\r\nconst SET_PAGE_SIZE = 'asset-tracking/serialDetails/serialDetails/SET_PAGE_SIZE'\r\nconst SET_PAGE = 'asset-tracking/serialDetails/serialDetails/SET_PAGE'\r\nconst SET_ORDER_BY = 'asset-tracking/serialDetails/serialDetails/SET_ORDER_BY'\r\nconst SET_ORDER_ASCENDING =\r\n 'asset-tracking/serialDetails/serialDetails/SET_ORDER_ASCENDING'\r\nconst SET_SEARCH_BY =\r\n 'asset-tracking/serialDetails/serialDetails/SET_SEARCH_BY'\r\nconst CLEAN_UP = 'asset-tracking/serialDetails/serialDetails/CLEAN_UP'\r\n\r\nvar initialState = {\r\n serialDetails: [],\r\n isSerialDetailsLoading: false,\r\n searchTerm: '',\r\n pageSize: 10,\r\n page: 0,\r\n orderBy: '',\r\n orderAscending: true,\r\n totalSerialDetails: 0,\r\n searchBy: 63,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_SERIAL_DETAILS:\r\n return { ...state, serialDetails: action.serialDetails }\r\n case SET_SERIAL_DETAILS_WITH_PAGINATION:\r\n var { items, totalCount, ...rest } = action.paginatedResult\r\n return {\r\n ...state,\r\n ...rest,\r\n serialDetails: items,\r\n totalSerialDetails: totalCount,\r\n }\r\n case SET_SERIAL_DETAILS_LOADING:\r\n return { ...state, isSerialDetailsLoading: action.isSerialDetailsLoading }\r\n case SET_SEARCH_TERM:\r\n return { ...state, searchTerm: action.searchTerm }\r\n case SET_PAGE_SIZE:\r\n return { ...state, pageSize: action.pageSize }\r\n case SET_PAGE:\r\n return { ...state, page: action.page }\r\n case SET_ORDER_BY:\r\n return { ...state, orderBy: action.orderBy }\r\n case SET_ORDER_ASCENDING:\r\n return { ...state, orderAscending: action.orderAscending }\r\n case SET_SEARCH_BY:\r\n return { ...state, searchBy: action.searchBy }\r\n case CLEAN_UP:\r\n return { ...initialState }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setSerialDetails = (serialDetails) => ({\r\n type: SET_SERIAL_DETAILS,\r\n serialDetails,\r\n})\r\nexport const setSerialDetailsWithPagination = (paginatedResult) => ({\r\n type: SET_SERIAL_DETAILS_WITH_PAGINATION,\r\n paginatedResult,\r\n})\r\nexport const setSerialDetailsLoading = (isSerialDetailsLoading) => ({\r\n type: SET_SERIAL_DETAILS_LOADING,\r\n isSerialDetailsLoading,\r\n})\r\nexport const setSearchTerm = (searchTerm) => ({\r\n type: SET_SEARCH_TERM,\r\n searchTerm,\r\n})\r\nexport const setPageSize = (pageSize) => ({ type: SET_PAGE_SIZE, pageSize })\r\nexport const setPage = (page) => ({ type: SET_PAGE, page })\r\nexport const setOrderBy = (orderBy) => ({ type: SET_ORDER_BY, orderBy })\r\nexport const setOrderAscending = (orderAscending) => ({\r\n type: SET_ORDER_ASCENDING,\r\n orderAscending,\r\n})\r\nexport const setSearchBy = (searchBy) => ({\r\n type: SET_SEARCH_BY,\r\n searchBy,\r\n})\r\nexport const cleanUp = () => ({ type: CLEAN_UP })\r\n","const SET_SERIAL_DETAIL =\r\n 'asset-tracking/serialDetail/serialDetail/SET_SERIAL_DETAIL'\r\nconst SET_SERIAL_DETAIL_WITH_FIELDS =\r\n 'asset-tracking/serialDetail/serialDetail/SET_SERIAL_DETAIL_WITH_FIELDS'\r\nconst SET_ERROR_MODAL_OPEN =\r\n 'asset-tracking/serialDetail/serialDetail/SET_ERROR_MODAL_OPEN'\r\nconst SET_DELETE_MODAL_OPEN =\r\n 'asset-tracking/serialDetail/serialDetail/SET_DELETE_MODAL_OPEN'\r\nconst SET_DELETE_MODAL_LOADING =\r\n 'asset-tracking/serialDetail/serialDetail/SET_DELETE_MODAL_LOADING'\r\nconst SET_SERIAL_DETAIL_LOADING =\r\n 'asset-tracking/serialDetail/serialDetail/SET_SERIAL_DETAIL_LOADING'\r\nconst SET_SERIAL_DETAIL_LOG =\r\n 'asset-tracking/serialDetail/serialDetail/SET_SERIAL_DETAIL_LOG'\r\nconst SET_SERIAL_DETAIL_LOG_LOADING =\r\n 'asset-tracking/serialDetail/serialDetail/SET_SERIAL_DETAIL_LOG_LOADING'\r\n\r\nvar initialState = {\r\n staticFields: [],\r\n serialDetail: null,\r\n errorList: [],\r\n errorModalOpen: false,\r\n deleteModalOpen: false,\r\n deleteModalLoading: false,\r\n serialDetailLoading: false,\r\n serialDetailLog: null,\r\n serialDetailLogLoading: false,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_SERIAL_DETAIL:\r\n return { ...state, serialDetail: action.serialDetail }\r\n case SET_SERIAL_DETAIL_WITH_FIELDS:\r\n return {\r\n ...state,\r\n serialDetail: action.serialDetail,\r\n staticFields: action.staticFields,\r\n }\r\n case SET_ERROR_MODAL_OPEN:\r\n return {\r\n ...state,\r\n errorList: action.errorList,\r\n errorModalOpen: action.errorModalOpen,\r\n }\r\n case SET_DELETE_MODAL_OPEN:\r\n return { ...state, deleteModalOpen: action.deleteModalOpen }\r\n case SET_DELETE_MODAL_LOADING:\r\n return { ...state, deleteModalLoading: action.deleteModalLoading }\r\n case SET_SERIAL_DETAIL_LOADING:\r\n return { ...state, serialDetailLoading: action.serialDetailLoading }\r\n case SET_SERIAL_DETAIL_LOG:\r\n return { ...state, serialDetailLog: action.serialDetailLog }\r\n case SET_SERIAL_DETAIL_LOG_LOADING:\r\n return { ...state, serialDetailLogLoading: action.serialDetailLogLoading }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setSerialDetail = (serialDetail) => ({\r\n type: SET_SERIAL_DETAIL,\r\n serialDetail,\r\n})\r\nexport const setSerialDetailWithFields = (serialDetail, staticFields) => ({\r\n type: SET_SERIAL_DETAIL_WITH_FIELDS,\r\n serialDetail,\r\n staticFields,\r\n})\r\nexport const setErrorModalOpen = (errorList, errorModalOpen) => ({\r\n type: SET_ERROR_MODAL_OPEN,\r\n errorList,\r\n errorModalOpen,\r\n})\r\nexport const setDeleteModalOpen = (deleteModalOpen) => ({\r\n type: SET_DELETE_MODAL_OPEN,\r\n deleteModalOpen,\r\n})\r\nexport const setDeleteModalLoading = (deleteModalLoading) => ({\r\n type: SET_DELETE_MODAL_LOADING,\r\n deleteModalLoading,\r\n})\r\nexport const setSerialDetailLoading = (serialDetailLoading) => ({\r\n type: SET_SERIAL_DETAIL_LOADING,\r\n serialDetailLoading,\r\n})\r\nexport const setSerialDetailLog = (serialDetailLog) => ({\r\n type: SET_SERIAL_DETAIL_LOG,\r\n serialDetailLog,\r\n})\r\nexport const setSerialDetailLogLoading = (serialDetailLogLoading) => ({\r\n type: SET_SERIAL_DETAIL_LOG_LOADING,\r\n serialDetailLogLoading,\r\n})\r\n","const SET_CUSTOMERS = 'asset-tracking/customers/customers/SET_CUSTOMERS'\r\nconst SET_CUSTOMERS_WITH_PAGINATION =\r\n 'asset-tracking/customers/customers/SET_CUSTOMERS_WITH_PAGINATION'\r\nconst SET_CUSTOMERS_LOADING =\r\n 'asset-tracking/customers/customers/SET_CUSTOMERS_LOADING'\r\nconst SET_PAGE_SIZE = 'asset-tracking/customers/customers/SET_PAGE_SIZE'\r\nconst SET_PAGE = 'asset-tracking/customers/customers/SET_PAGE'\r\nconst CLEAN_UP = 'asset-tracking/customers/customers/CLEAN_UP'\r\n\r\nvar initialState = {\r\n customers: [],\r\n isCustomersLoading: false,\r\n pageSize: 10,\r\n page: 0,\r\n totalCustomers: 0,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_CUSTOMERS:\r\n return { ...state, customers: action.customers }\r\n case SET_CUSTOMERS_WITH_PAGINATION:\r\n var { items, totalCount, ...rest } = action.paginatedResult\r\n return { ...state, ...rest, customers: items, totalCustomers: totalCount }\r\n case SET_CUSTOMERS_LOADING:\r\n return { ...state, isCustomersLoading: action.isCustomersLoading }\r\n case SET_PAGE_SIZE:\r\n return { ...state, pageSize: action.pageSize }\r\n case SET_PAGE:\r\n return { ...state, page: action.page }\r\n case CLEAN_UP:\r\n return { ...initialState }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setCustomers = (customers) => ({ type: SET_CUSTOMERS, customers })\r\nexport const setCustomersWithPagination = (paginatedResult) => ({\r\n type: SET_CUSTOMERS_WITH_PAGINATION,\r\n paginatedResult,\r\n})\r\nexport const setCustomersLoading = (isCustomersLoading) => ({\r\n type: SET_CUSTOMERS_LOADING,\r\n isCustomersLoading,\r\n})\r\nexport const setPageSize = (pageSize) => ({ type: SET_PAGE_SIZE, pageSize })\r\nexport const setPage = (page) => ({ type: SET_PAGE, page })\r\nexport const cleanUp = () => ({ type: CLEAN_UP })\r\n","const SET_CUSTOMER = 'asset-tracking/customer/customer/SET_CUSTOMER'\r\nconst SET_CUSTOMER_SITES = 'asset-tracking/customer/sites/SET_CUSTOMER_SITES'\r\nconst SET_CURRENT_SITE =\r\n 'asset-tracking/customer/createSiteModal/SET_CURRENT_SITE'\r\nconst SET_CUSTOMER_REGIONS =\r\n 'asset-tracking/customer/regions/SET_CUSTOMER_REGIONS'\r\nconst SET_CURRENT_REGION =\r\n 'asset-tracking/customer/createRegionModal/SET_CURRENT_REGION'\r\nconst SET_OPEN_MODAL =\r\n 'asset-tracking/customer/createSiteModal/SET_CREATE_SITE_MODAL_OPEN'\r\nconst SET_MODAL_LOADING =\r\n 'asset-tracking/customer/createSiteModal/SET_MODAL_LOADING'\r\nconst SET_UNABLE_TO_DELETE_TEXT =\r\n 'asset-tracking/customer/customer/SET_UNABLE_TO_DELETE_TEXT'\r\nconst CLEAN_UP = 'asset-tracking/customer/customer/CLEAN_UP'\r\n\r\nvar initialState = {\r\n customer: null,\r\n currentSite: { name: '', status: '' },\r\n currentRegion: { name: '' },\r\n openModal: null,\r\n isModalLoading: false,\r\n unableToDeleteText: '',\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_CUSTOMER:\r\n return { ...state, customer: action.customer }\r\n case SET_CUSTOMER_SITES:\r\n // eslint-disable-next-line no-case-declarations\r\n const customerCopy = { ...state.customer }\r\n customerCopy.sites = action.sites\r\n return { ...state, customer: customerCopy }\r\n case SET_CURRENT_SITE:\r\n return { ...state, currentSite: action.currentSite }\r\n case SET_CUSTOMER_REGIONS:\r\n const customer = { ...state.customer }\r\n customer.regions = action.regions\r\n return { ...state, customer }\r\n case SET_CURRENT_REGION:\r\n return { ...state, currentRegion: action.currentRegion }\r\n case SET_OPEN_MODAL:\r\n return { ...state, openModal: action.openModal }\r\n case SET_MODAL_LOADING:\r\n return { ...state, isModalLoading: action.isModalLoading }\r\n case SET_UNABLE_TO_DELETE_TEXT:\r\n return { ...state, unableToDeleteText: action.unableToDeleteText }\r\n case CLEAN_UP:\r\n return { ...initialState }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setCustomer = (customer) => ({ type: SET_CUSTOMER, customer })\r\nexport const setCustomerSites = (sites) => ({ type: SET_CUSTOMER_SITES, sites })\r\nexport const setCurrentSite = (currentSite) => ({\r\n type: SET_CURRENT_SITE,\r\n currentSite,\r\n})\r\nexport const setCustomerRegions = (regions) => ({\r\n type: SET_CUSTOMER_REGIONS,\r\n regions,\r\n})\r\nexport const setCurrentRegion = (currentRegion) => ({\r\n type: SET_CURRENT_REGION,\r\n currentRegion,\r\n})\r\nexport const setOpenModal = (openModal) => ({ type: SET_OPEN_MODAL, openModal })\r\nexport const setModalLoading = (isModalLoading) => ({\r\n type: SET_MODAL_LOADING,\r\n isModalLoading,\r\n})\r\nexport const setUnableToDeleteText = (unableToDeleteText) => ({\r\n type: SET_UNABLE_TO_DELETE_TEXT,\r\n unableToDeleteText,\r\n})\r\nexport const cleanUp = () => ({ type: CLEAN_UP })\r\n","const SET_USERS = 'asset-tracking/users/users/SET_USERS'\r\nconst SET_USERS_WITH_PAGINATION =\r\n 'asset-tracking/users/users/SET_USERS_WITH_PAGINATION'\r\nconst SET_PAGE = 'asset-tracking/users/users/SET_PAGE'\r\nconst SET_PAGE_SIZE = 'asset-tracking/users/users/SET_PAGE_SIZE'\r\nconst SET_IS_USERS_LOADING = 'asset-tracking/users/users/SET_IS_USERS_LOADING'\r\n\r\nvar initialState = {\r\n users: [],\r\n isUsersLoading: false,\r\n pageSize: 10,\r\n page: 0,\r\n totalUsers: 0,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_USERS:\r\n return { ...state, users: action.users }\r\n case SET_USERS_WITH_PAGINATION:\r\n var { items, totalCount, ...rest } = action.paginatedResult\r\n return { ...state, ...rest, users: items, totalUsers: totalCount }\r\n case SET_IS_USERS_LOADING:\r\n return { ...state, isUsersLoading: action.isUsersLoading }\r\n case SET_PAGE_SIZE:\r\n return { ...state, pageSize: action.pageSize }\r\n case SET_PAGE:\r\n return { ...state, page: action.page }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setUsers = (users) => ({ type: SET_USERS, users })\r\nexport const setUsersWithPagination = (paginatedResult) => ({\r\n type: SET_USERS_WITH_PAGINATION,\r\n paginatedResult,\r\n})\r\nexport const setIsUsersLoading = (isUsersLoading) => ({\r\n type: SET_IS_USERS_LOADING,\r\n isUsersLoading,\r\n})\r\nexport const setPageSize = (pageSize) => ({ type: SET_PAGE_SIZE, pageSize })\r\nexport const setPage = (page) => ({ type: SET_PAGE, page })\r\n","const SET_USER = 'asset-tracking/user/user/SET_USER'\r\nconst SET_USER_WITH_ACCESS = 'asset-tracking/user/user/SET_USER_WITH_ACCESS'\r\nconst SET_IS_ERROR_MODAL_OPEN =\r\n 'asset-tracking/user/user/SET_IS_ERROR_MODAL_OPEN'\r\nconst SET_IS_DELETE_MODAL_OPEN =\r\n 'asset-tracking/user/user/SET_IS_DELETE_MODAL_OPEN'\r\nconst SET_IS_DELETE_MODAL_LOADING =\r\n 'asset-tracking/user/user/SET_IS_DELETE_MODAL_LOADING'\r\nconst SET_USER_LOADING = 'asset-tracking/user/user/SET_USER_LOADING'\r\nconst UPDATE_SELECTED_REGION = 'asset-tracking/user/user/UPDATE_SELECTED_REGION'\r\n\r\nvar initialState = {\r\n user: null,\r\n errorList: [],\r\n isDeleteModalOpen: false,\r\n isDeleteModalLoading: false,\r\n isUserLoading: false,\r\n isErrorModalOpen: false,\r\n access: [],\r\n isDirty: {},\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_USER:\r\n if (action.isDirty === null) {\r\n return { ...state, user: action.user, isDirty: {} }\r\n } else {\r\n return {\r\n ...state,\r\n user: action.user,\r\n isDirty: { ...state.isDirty, ...action.isDirty },\r\n }\r\n }\r\n case SET_USER_WITH_ACCESS:\r\n return { ...state, user: action.user, access: action.access }\r\n case SET_IS_ERROR_MODAL_OPEN:\r\n return {\r\n ...state,\r\n errorList: action.errorList,\r\n isErrorModalOpen: action.isErrorModalOpen,\r\n }\r\n case SET_IS_DELETE_MODAL_OPEN:\r\n return { ...state, isDeleteModalOpen: action.isDeleteModalOpen }\r\n case SET_IS_DELETE_MODAL_LOADING:\r\n return { ...state, isDeleteModalLoading: action.isDeleteModalLoading }\r\n case SET_USER_LOADING:\r\n return { ...state, isUserLoading: action.isUserLoading }\r\n case UPDATE_SELECTED_REGION:\r\n var customersCopy = state.access.concat()\r\n var customer = customersCopy.filter((x) => x.id === action.customerId)[0]\r\n var regionsCopy = customer.regions.concat()\r\n var region = regionsCopy.filter((x) => x.id === action.regionId)[0]\r\n var regionIndex = regionsCopy.indexOf(region)\r\n region = { ...region, isSelected: action.isSelected }\r\n regionsCopy[regionIndex] = region\r\n customer.regions = regionsCopy\r\n var customerIndex = customersCopy.indexOf(customer)\r\n customersCopy[customerIndex] = customer\r\n return { ...state, access: customersCopy }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setUser = (user, isDirty = {}) => ({\r\n type: SET_USER,\r\n user,\r\n isDirty,\r\n})\r\nexport const setUserWithAccess = (user, access) => ({\r\n type: SET_USER_WITH_ACCESS,\r\n user,\r\n access,\r\n})\r\nexport const setIsErrorModalOpen = (isErrorModalOpen, errorList = []) => ({\r\n type: SET_IS_ERROR_MODAL_OPEN,\r\n errorList,\r\n isErrorModalOpen,\r\n})\r\nexport const setIsDeleteModalOpen = (isDeleteModalOpen) => ({\r\n type: SET_IS_DELETE_MODAL_OPEN,\r\n isDeleteModalOpen,\r\n})\r\nexport const setIsDeleteModalLoading = (isDeleteModalLoading) => ({\r\n type: SET_IS_DELETE_MODAL_LOADING,\r\n isDeleteModalLoading,\r\n})\r\nexport const setIsUserLoading = (isUserLoading) => ({\r\n type: SET_USER_LOADING,\r\n isUserLoading,\r\n})\r\nexport const updateSelectedRegion = (customerId, regionId, isSelected) => ({\r\n type: UPDATE_SELECTED_REGION,\r\n customerId,\r\n regionId,\r\n isSelected,\r\n})\r\n","const SET_USERNAME = 'asset-tracking/login/login/SET_USERNAME'\r\nconst SET_PASSWORD = 'asset-tracking/login/login/SET_PASSWORD'\r\nconst SET_LOGIN_ERRORS = 'asset-tracking/login/login/SET_LOGIN_ERRORS'\r\nconst SET_LOGIN_LOADING = 'asset-tracking/login/login/SET_LOGIN_LOADING'\r\n\r\nvar initialState = {\r\n username: '',\r\n password: '',\r\n isLoginLoading: false,\r\n loginErrors: [],\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_USERNAME:\r\n return { ...state, username: action.username }\r\n case SET_PASSWORD:\r\n return { ...state, password: action.password }\r\n case SET_LOGIN_ERRORS:\r\n return { ...state, loginErrors: action.errors }\r\n case SET_LOGIN_LOADING:\r\n return { ...state, isLoginLoading: action.isLoginLoading }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setUsername = (username) => ({ type: SET_USERNAME, username })\r\nexport const setPassword = (password) => ({ type: SET_PASSWORD, password })\r\nexport const setLoginErrors = (errors) => ({ type: SET_LOGIN_ERRORS, errors })\r\nexport const setIsLoginLoading = (isLoginLoading) => ({\r\n type: SET_LOGIN_LOADING,\r\n isLoginLoading,\r\n})\r\n","const SET_EMAIL = 'asset-tracking/login/forgotPassword/SET_EMAIL'\r\nconst SET_MESSAGE = 'asset-tracking/login/forgotPassword/SET_MESSAGE'\r\nconst SET_IS_LOADING = 'asset-tracking/login/forgotPassword/SET_IS_LOADING'\r\n\r\nvar initialState = {\r\n email: '',\r\n isLoading: false,\r\n message: '',\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_EMAIL:\r\n return { ...state, email: action.email }\r\n case SET_MESSAGE:\r\n return { ...state, message: action.message }\r\n case SET_IS_LOADING:\r\n return { ...state, isLoading: action.isLoading }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setEmail = (email) => ({ type: SET_EMAIL, email })\r\nexport const setMessage = (message) => ({ type: SET_MESSAGE, message })\r\nexport const setIsLoading = (isLoading) => ({ type: SET_IS_LOADING, isLoading })\r\n","const SET_TOKEN = 'asset-tracking/login/resetPassword/SET_TOKEN'\r\nconst SET_PASSWORD = 'asset-tracking/login/resetPassword/SET_PASSWORD'\r\nconst SET_CONFIRM_PASSWORD =\r\n 'asset-tracking/login/resetPassword/SET_CONFIRM_PASSWORD'\r\nconst SET_MESSAGE = 'asset-tracking/login/resetPassword/SET_MESSAGE'\r\nconst SET_IS_LOADING = 'asset-tracking/login/resetPassword/SET_IS_LOADING'\r\nconst SET_IS_DIRTY = 'asset-tracking/login/resetPassword/SET_IS_DIRTY'\r\n\r\nvar initialState = {\r\n tokenReadFromUrl: false,\r\n token: '',\r\n password: '',\r\n confirmPassword: '',\r\n isLoading: false,\r\n successMessage: [],\r\n failureMessage: [],\r\n isDirty: {},\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_TOKEN:\r\n return {\r\n ...state,\r\n token: action.token,\r\n tokenReadFromUrl: true,\r\n isDirty: { ...state.isDirty, token: true },\r\n }\r\n case SET_PASSWORD:\r\n return {\r\n ...state,\r\n password: action.password,\r\n isDirty: { ...state.isDirty, password: true },\r\n }\r\n case SET_CONFIRM_PASSWORD:\r\n return {\r\n ...state,\r\n confirmPassword: action.confirmPassword,\r\n isDirty: { ...state.isDirty, confirmPassword: true },\r\n }\r\n case SET_MESSAGE:\r\n if (action.isSuccess) {\r\n return { ...state, successMessage: action.message }\r\n } else {\r\n return { ...state, failureMessage: action.message }\r\n }\r\n case SET_IS_LOADING:\r\n return { ...state, isLoading: action.isLoading }\r\n case SET_IS_DIRTY:\r\n return { ...state, isDirty: action.isDirty }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setToken = (token) => ({ type: SET_TOKEN, token })\r\nexport const setPassword = (password) => ({ type: SET_PASSWORD, password })\r\nexport const setConfirmPassword = (confirmPassword) => ({\r\n type: SET_CONFIRM_PASSWORD,\r\n confirmPassword,\r\n})\r\nexport const setMessage = (message, isSuccess) => ({\r\n type: SET_MESSAGE,\r\n message,\r\n isSuccess,\r\n})\r\nexport const setIsLoading = (isLoading) => ({ type: SET_IS_LOADING, isLoading })\r\nexport const setIsDirty = (isDirty) => ({ type: SET_IS_DIRTY, isDirty })\r\n","const SET_REPORT_CONFIG = 'asset-tracking/report/report/SET_REPORT_CONFIG'\r\nconst SET_RECORDS = 'asset-tracking/report/report/SET_RECORDS'\r\nconst SET_FIELD = 'asset-tracking/report/report/SET_FIELD'\r\nconst SET_SEARCH_TERM = 'asset-tracking/report/report/SET_SEARCH_TERM'\r\nconst CLEAN_UP = 'asset-tracking/report/report/CLEAN_UP'\r\nconst SET_COLLAPSED = 'asset-tracking/report/report/SET_COLLAPSED'\r\n\r\nvar initialState = {\r\n records: [],\r\n reportConfig: null,\r\n fieldValues: {\r\n 9: { value: 15, type: 'dynamic' },\r\n },\r\n searchTerm: '',\r\n collapsed: true,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_REPORT_CONFIG:\r\n return { ...state, reportConfig: action.reportConfig }\r\n case SET_RECORDS:\r\n return { ...state, records: action.records }\r\n case SET_FIELD:\r\n return {\r\n ...state,\r\n fieldValues: { ...state.fieldValues, ...action.change },\r\n }\r\n case SET_SEARCH_TERM:\r\n return { ...state, searchTerm: action.searchTerm }\r\n case SET_COLLAPSED:\r\n return { ...state, collapsed: action.collapsed }\r\n case CLEAN_UP:\r\n return { ...state, ...initialState }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setReportConfig = (reportConfig) => ({\r\n type: SET_REPORT_CONFIG,\r\n reportConfig,\r\n})\r\nexport const setRecords = (records) => ({ type: SET_RECORDS, records })\r\nexport const setField = (change) => ({ type: SET_FIELD, change })\r\nexport const setSearchTerm = (searchTerm) => ({\r\n type: SET_SEARCH_TERM,\r\n searchTerm,\r\n})\r\nexport const setCollapsed = (collapsed) => ({ type: SET_COLLAPSED, collapsed })\r\n\r\nexport const cleanUp = () => ({ type: CLEAN_UP })\r\n","const SET_SERVICE_TRACKER =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_SERVICE_TRACKER'\r\nconst SET_SERVICE_TRACKER_DIRTY =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_SERVICE_TRACKER_DIRTY'\r\nconst SET_ERROR_MODAL_OPEN =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_ERROR_MODAL_OPEN'\r\nconst SET_DELETE_MODAL_OPEN =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_DELETE_MODAL_OPEN'\r\nconst SET_DELETE_MODAL_LOADING =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_DELETE_MODAL_LOADING'\r\nconst SET_SERVICE_TRACKER_LOADING =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_SERVICE_TRACKER_LOADING'\r\nconst SET_CUSTOMERS =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_CUSTOMERS'\r\nconst SET_SERVICE_TYPES =\r\n 'asset-tracking/serviceTracker/serviceTracker/SET_SERVICE_TYPES'\r\nconst CLEAN_UP = 'asset-tracking/serviceTracker/serviceTracker/CLEAN_UP'\r\n\r\nvar initialState = {\r\n serviceTracker: {\r\n files: [],\r\n serviceDate: new Date(),\r\n customer: '',\r\n serviceTypeId: '',\r\n },\r\n serviceTrackerIsDirty: {},\r\n customers: [],\r\n serviceTypes: [],\r\n errorList: [],\r\n errorModalOpen: false,\r\n deleteModalOpen: false,\r\n deleteModalLoading: false,\r\n serviceTrackerLoading: false,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_SERVICE_TRACKER:\r\n return { ...state, serviceTracker: action.serviceTracker }\r\n case SET_SERVICE_TRACKER_DIRTY:\r\n return { ...state, serviceTrackerIsDirty: action.serviceTrackerIsDirty }\r\n case SET_ERROR_MODAL_OPEN:\r\n return {\r\n ...state,\r\n errorList: action.errorList,\r\n errorModalOpen: action.errorModalOpen,\r\n }\r\n case SET_DELETE_MODAL_OPEN:\r\n return { ...state, deleteModalOpen: action.deleteModalOpen }\r\n case SET_DELETE_MODAL_LOADING:\r\n return { ...state, deleteModalLoading: action.deleteModalLoading }\r\n case SET_SERVICE_TRACKER_LOADING:\r\n return { ...state, serviceTrackerLoading: action.serviceTrackerLoading }\r\n case SET_CUSTOMERS:\r\n return { ...state, customers: action.customers }\r\n case SET_SERVICE_TYPES:\r\n return { ...state, serviceTypes: action.serviceTypes }\r\n case CLEAN_UP:\r\n return initialState\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setServiceTracker = (serviceTracker) => ({\r\n type: SET_SERVICE_TRACKER,\r\n serviceTracker,\r\n})\r\nexport const setServiceTrackerIsDirty = (serviceTrackerIsDirty) => ({\r\n type: SET_SERVICE_TRACKER_DIRTY,\r\n serviceTrackerIsDirty,\r\n})\r\nexport const setErrorModalOpen = (errorList, errorModalOpen) => ({\r\n type: SET_ERROR_MODAL_OPEN,\r\n errorList,\r\n errorModalOpen,\r\n})\r\nexport const setDeleteModalOpen = (deleteModalOpen) => ({\r\n type: SET_DELETE_MODAL_OPEN,\r\n deleteModalOpen,\r\n})\r\nexport const setDeleteModalLoading = (deleteModalLoading) => ({\r\n type: SET_DELETE_MODAL_LOADING,\r\n deleteModalLoading,\r\n})\r\nexport const setServiceTrackerLoading = (serviceTrackerLoading) => ({\r\n type: SET_SERVICE_TRACKER_LOADING,\r\n serviceTrackerLoading,\r\n})\r\nexport const setCustomers = (customers) => ({ type: SET_CUSTOMERS, customers })\r\nexport const setServiceTypes = (serviceTypes) => ({\r\n type: SET_SERVICE_TYPES,\r\n serviceTypes,\r\n})\r\nexport const cleanUp = () => ({ type: CLEAN_UP })\r\n","const SET_SERVICE_TRACKERS =\r\n 'asset-tracking/serviceTrackers/serviceTrackers/SET_SERVICE_TRACKERS'\r\nconst SET_SERVICE_TRACKERS_WITH_PAGINATION =\r\n 'asset-tracking/serviceTrackers/serviceTrackers/SET_SERVICE_TRACKERS_WITH_PAGINATION'\r\nconst SET_SERVICE_TRACKERS_LOADING =\r\n 'asset-tracking/serviceTrackers/serviceTrackers/SET_SERVICE_TRACKERS_LOADING'\r\nconst SET_SEARCH_TERM =\r\n 'asset-tracking/serviceTrackers/serviceTrackers/SET_SEARCH_TERM'\r\nconst SET_PAGE_SIZE =\r\n 'asset-tracking/serviceTrackers/serviceTrackers/SET_PAGE_SIZE'\r\nconst SET_PAGE = 'asset-tracking/serviceTrackers/serviceTrackers/SET_PAGE'\r\nconst SET_ORDER_BY =\r\n 'asset-tracking/serviceTrackers/serviceTrackers/SET_ORDER_BY'\r\nconst SET_ORDER_ASCENDING =\r\n 'asset-tracking/serviceTrackers/serviceTrackers/SET_ORDER_ASCENDING'\r\nconst CLEAN_UP = 'asset-tracking/serviceTrackers/serviceTrackers/CLEAN_UP'\r\n\r\nvar initialState = {\r\n serviceTrackers: [],\r\n isServiceTrackersLoading: false,\r\n searchTerm: '',\r\n pageSize: 10,\r\n page: 0,\r\n orderBy: '',\r\n orderAscending: true,\r\n totalServiceTrackers: 0,\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_SERVICE_TRACKERS_WITH_PAGINATION:\r\n var { items, totalCount, ...rest } = action.paginatedResult\r\n return {\r\n ...state,\r\n ...rest,\r\n serviceTrackers: items,\r\n totalServiceTrackers: totalCount,\r\n }\r\n case SET_SERVICE_TRACKERS_LOADING:\r\n return {\r\n ...state,\r\n isServiceTrackersLoading: action.isServiceTrackersLoading,\r\n }\r\n case SET_SEARCH_TERM:\r\n return { ...state, searchTerm: action.searchTerm }\r\n case SET_PAGE_SIZE:\r\n return { ...state, pageSize: action.pageSize }\r\n case SET_PAGE:\r\n return { ...state, page: action.page }\r\n case SET_ORDER_BY:\r\n return { ...state, orderBy: action.orderBy }\r\n case SET_ORDER_ASCENDING:\r\n return { ...state, orderAscending: action.orderAscending }\r\n case CLEAN_UP:\r\n return { ...initialState }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setServiceTrackers = (serviceTrackers) => ({\r\n type: SET_SERVICE_TRACKERS,\r\n serviceTrackers,\r\n})\r\nexport const setServiceTrackersWithPagination = (paginatedResult) => ({\r\n type: SET_SERVICE_TRACKERS_WITH_PAGINATION,\r\n paginatedResult,\r\n})\r\nexport const setServiceTrackersLoading = (isServiceTrackersLoading) => ({\r\n type: SET_SERVICE_TRACKERS_LOADING,\r\n isServiceTrackersLoading,\r\n})\r\nexport const setSearchTerm = (searchTerm) => ({\r\n type: SET_SEARCH_TERM,\r\n searchTerm,\r\n})\r\nexport const setPageSize = (pageSize) => ({ type: SET_PAGE_SIZE, pageSize })\r\nexport const setPage = (page) => ({ type: SET_PAGE, page })\r\nexport const setOrderBy = (orderBy) => ({ type: SET_ORDER_BY, orderBy })\r\nexport const setOrderAscending = (orderAscending) => ({\r\n type: SET_ORDER_ASCENDING,\r\n orderAscending,\r\n})\r\nexport const cleanUp = () => ({ type: CLEAN_UP })\r\n","const SET_RECORDS = 'asset-tracking/serviceReport/report/SET_RECORDS'\r\nconst CLEAN_UP = 'asset-tracking/serviceReport/report/CLEAN_UP'\r\n\r\nvar initialState = {\r\n records: [],\r\n}\r\n\r\nexport default function reducer(state = initialState, action = {}) {\r\n switch (action.type) {\r\n case SET_RECORDS:\r\n return { ...state, records: action.records }\r\n case CLEAN_UP:\r\n return { ...state, ...initialState }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setRecords = (records) => ({ type: SET_RECORDS, records })\r\nexport const cleanUp = () => ({ type: CLEAN_UP })\r\n","import main from './main'\r\nimport navBar from './navBar'\r\nimport serialDetails from './SerialDetails/serialDetails'\r\nimport serialDetail from './SerialDetail/serialDetail'\r\nimport customers from './Customers/customers'\r\nimport customer from './Customer/customer'\r\nimport users from './Users/users'\r\nimport user from './User/user'\r\nimport login from './Auth/login'\r\nimport forgotPassword from './Auth/forgotPassword'\r\nimport resetPassword from './Auth/resetPassword'\r\nimport report from './Report/report'\r\nimport serviceTracker from './ServiceTracker/serviceTracker'\r\nimport serviceTrackers from './ServiceTrackers/serviceTrackers'\r\nimport serviceReport from './ServiceReport/serviceReport'\r\n\r\nexport default {\r\n main,\r\n navBar,\r\n serialDetails,\r\n serialDetail,\r\n customers,\r\n customer,\r\n users,\r\n user,\r\n login,\r\n forgotPassword,\r\n resetPassword,\r\n report,\r\n serviceTracker,\r\n serviceTrackers,\r\n serviceReport,\r\n}\r\n","const config = (() => {\r\n var general = {\r\n genericError: 'There seeems to be a server error. Please try again later.',\r\n notValidLogIdError: 'The serial number and item Id combination is invalid.',\r\n auth: {\r\n password: {\r\n grant_type: 'password',\r\n client_id: 'AustinIdentityClient',\r\n client_secret: 'austin-identity-client-secret',\r\n scope: 'offline_access',\r\n },\r\n refreshToken: {\r\n grant_type: 'refresh_token',\r\n client_id: 'AustinIdentityClient',\r\n client_secret: 'austin-identity-client-secret',\r\n },\r\n },\r\n dynamicFieldTypes: {\r\n string: 1,\r\n date: 2,\r\n select: 3,\r\n file: 4,\r\n },\r\n report: {\r\n specificFields: {\r\n ageFilter: {\r\n definitionId: 1,\r\n },\r\n diameter: {\r\n definitionId: 2,\r\n },\r\n grade: {\r\n definitionId: 3,\r\n },\r\n length: {\r\n definitionId: 4,\r\n },\r\n end1: {\r\n definitionId: 5,\r\n },\r\n end2: {\r\n definitionId: 6,\r\n },\r\n placement: {\r\n definitionId: 7,\r\n },\r\n decomissioned: {\r\n definitionId: 9,\r\n },\r\n siteStatus: {\r\n key: 'customerSiteStatus',\r\n },\r\n },\r\n filterType: {\r\n static: 'static',\r\n dynamic: 'dynamic',\r\n siteStatus: 'siteStatus',\r\n ageFilter: 'ageFilter',\r\n },\r\n },\r\n reportGrouping: {\r\n sitePreloadedSize: 1,\r\n siteLoadStep: 3,\r\n dynamicPreloadedSize: 2,\r\n serialDetailPreloadedSize: 2,\r\n serialDetailLoadStep: 5,\r\n },\r\n }\r\n\r\n // if (process.env.NODE_ENV === 'development') {\r\n // general.api = 'http://10.168.10.53:801'\r\n // general.fileServer = 'http://10.168.10.53:801/Files'\r\n // } else {\r\n general.api = 'https://assets.austinhose.com:44368'\r\n general.fileServer = 'https://assets.austinhose.com:44368/Files'\r\n // }\r\n\r\n return Object.freeze(general)\r\n})()\r\n\r\nexport default config\r\n","import HttpService from './HttpService'\r\nimport Config from '../Config'\r\n\r\nclass AuthService {\r\n StoreAuth(auth) {\r\n var now = new Date()\r\n var authStringified = JSON.stringify({ ...auth, now })\r\n localStorage.setItem('auth', authStringified)\r\n }\r\n\r\n GetAuth() {\r\n var authStringified = localStorage.getItem('auth')\r\n if (authStringified) {\r\n return JSON.parse(authStringified)\r\n } else {\r\n return null\r\n }\r\n }\r\n\r\n RemoveAuth() {\r\n localStorage.removeItem('auth')\r\n }\r\n\r\n IsUserAuthenticated() {\r\n var auth = this.GetAuth()\r\n if (auth) {\r\n var expirationTime = new Date(auth.now)\r\n expirationTime.setSeconds(\r\n expirationTime.getSeconds() + auth.expires_in - 10,\r\n )\r\n var now = new Date()\r\n return now < expirationTime\r\n }\r\n return false\r\n }\r\n\r\n IsAtLeast(role, specificRoleCheck) {\r\n var auth = this.GetAuth()\r\n if (auth && this.IsUserAuthenticated()) {\r\n if (specificRoleCheck) {\r\n if (Array.isArray(role)) {\r\n return role.includes(auth.role)\r\n } else return auth.role === role\r\n }\r\n switch (role) {\r\n case 'AustinAdmin':\r\n return auth.role === 'AustinAdmin'\r\n case 'AustinEmployee':\r\n return auth.role === 'AustinEmployee' || auth.role === 'AustinAdmin'\r\n case 'ExternalAdmin':\r\n return (\r\n auth.role === 'ExternalAdmin' ||\r\n auth.role === 'AustinEmployee' ||\r\n auth.role === 'AustinAdmin'\r\n )\r\n case 'ExternalDataEntry':\r\n return (\r\n auth.role === 'ExternalDataEntry' ||\r\n auth.role === 'ExternalAdmin' ||\r\n auth.role === 'AustinEmployee' ||\r\n auth.role === 'AustinAdmin'\r\n )\r\n case 'AustinServiceEmployee':\r\n return (\r\n auth.role === 'AustinServiceEmployee' ||\r\n auth.role === 'AustinEmployee' ||\r\n auth.role === 'AustinAdmin'\r\n )\r\n default:\r\n return true // ExternalIsTheLowest\r\n }\r\n }\r\n return false\r\n }\r\n\r\n AuthorizeUser(username, password) {\r\n return HttpService.MakeUrlEncodedPost('/connect/token', {\r\n ...Config.auth.password,\r\n username,\r\n password,\r\n })\r\n }\r\n\r\n RefreshUser(refresh_token) {\r\n return HttpService.MakeUrlEncodedPost('/connect/token', {\r\n ...Config.auth.refreshToken,\r\n refresh_token,\r\n })\r\n }\r\n\r\n SubmitForgotPasswordClaim(email) {\r\n return HttpService.MakePost('/api/User/ForgotPassword', { email })\r\n }\r\n\r\n ResetPassword(model) {\r\n return HttpService.MakePost('/api/User/ResetPassword', model)\r\n }\r\n\r\n GetCustomers() {\r\n var authStringified = localStorage.getItem('auth')\r\n if (authStringified) {\r\n var auth = JSON.parse(authStringified)\r\n if (auth.customers) {\r\n return auth.customers\r\n }\r\n }\r\n return []\r\n }\r\n}\r\n\r\nexport default new AuthService()\r\n","import Config from '../Config'\r\nimport AuthService from './AuthService'\r\nimport axios from 'axios'\r\n\r\nclass HttpService {\r\n async MakeGet(url) {\r\n try {\r\n var actualUrl = Config.api + url\r\n return await this.MakeNoBodyRequest('GET', actualUrl)\r\n } catch (e) {\r\n return {}\r\n }\r\n }\r\n\r\n async MakePost(url, body) {\r\n try {\r\n var actualUrl = Config.api + url\r\n return await this.MakeBodyRequest('POST', actualUrl, body)\r\n } catch (e) {\r\n return {}\r\n }\r\n }\r\n\r\n async MakePut(url, body) {\r\n try {\r\n var actualUrl = Config.api + url\r\n return await this.MakeBodyRequest('PUT', actualUrl, body)\r\n } catch (e) {\r\n return {}\r\n }\r\n }\r\n\r\n async MakeDelete(url) {\r\n try {\r\n var actualUrl = Config.api + url\r\n return await this.MakeNoBodyRequest('DELETE', actualUrl)\r\n } catch (e) {\r\n return {}\r\n }\r\n }\r\n\r\n async UploadFile(url, file) {\r\n var actualUrl = Config.api + url\r\n const formData = new FormData()\r\n formData.append('file', file)\r\n const options = { method: 'POST', body: formData }\r\n return await this.MakeRequest(actualUrl, options)\r\n }\r\n\r\n async UploadFileWithPercentage(\r\n url,\r\n file,\r\n setUploadPercentage,\r\n retry = false,\r\n ) {\r\n const actualUrl = Config.api + url\r\n const formData = new FormData()\r\n formData.append('file', file)\r\n\r\n const auth = AuthService.GetAuth()\r\n\r\n if (auth) {\r\n const authHeader = { Authorization: `Bearer ${auth.access_token}` }\r\n\r\n try {\r\n const response = await axios.post(actualUrl, formData, {\r\n headers: {\r\n ...authHeader,\r\n },\r\n onUploadProgress: (progressEvent) => {\r\n const percentage = Math.round(\r\n (progressEvent.loaded * 100) / progressEvent.total,\r\n )\r\n setUploadPercentage && setUploadPercentage(percentage)\r\n },\r\n })\r\n\r\n return response.data\r\n } catch (error) {\r\n if (error.response && error.response.status === 401 && !retry) {\r\n try {\r\n const refreshResult = await AuthService.RefreshUser(\r\n auth.refresh_token,\r\n )\r\n if (refreshResult.ok) {\r\n const newAuth = await refreshResult.json()\r\n AuthService.StoreAuth(newAuth)\r\n\r\n return await this.UploadFileWithPercentage(\r\n url,\r\n file,\r\n setUploadPercentage,\r\n true,\r\n )\r\n }\r\n } catch (refreshError) {\r\n console.error('Error refreshing token:', refreshError)\r\n throw refreshError\r\n }\r\n }\r\n\r\n console.error('Error uploading file:', error)\r\n throw error\r\n }\r\n } else {\r\n try {\r\n const response = await axios.post(actualUrl, formData, {\r\n onUploadProgress: (progressEvent) => {\r\n const percentage = Math.round(\r\n (progressEvent.loaded * 100) / progressEvent.total,\r\n )\r\n setUploadPercentage && setUploadPercentage(percentage)\r\n },\r\n })\r\n\r\n return response.data\r\n } catch (error) {\r\n console.error('Error uploading file:', error)\r\n throw error\r\n }\r\n }\r\n }\r\n\r\n async DownloadFile(url, body) {\r\n var actualUrl = Config.api + url\r\n var auth = AuthService.GetAuth()\r\n const options = { method: 'POST' }\r\n var authHeader = { Authorization: `Bearer ${auth.access_token}` }\r\n options.headers = { ...options.headers, ...authHeader }\r\n return await this.MakeRequest(actualUrl, options)\r\n }\r\n\r\n async MakeNoBodyRequest(method, url) {\r\n var options = {\r\n method,\r\n headers: {\r\n Accept: 'application/json',\r\n },\r\n }\r\n return await this.MakeRequest(url, options)\r\n }\r\n\r\n async MakeBodyRequest(method, url, body) {\r\n var options = {\r\n method,\r\n body: JSON.stringify(body),\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n }\r\n return await this.MakeRequest(url, options)\r\n }\r\n\r\n async MakeRequest(url, options, retry = false) {\r\n var auth = AuthService.GetAuth()\r\n if (auth) {\r\n var authHeader = { Authorization: `Bearer ${auth.access_token}` }\r\n options.headers = { ...options.headers, ...authHeader }\r\n var httpResult = await fetch(url, options)\r\n if (httpResult.status === 401) {\r\n if (!retry) {\r\n var refreshResult = await AuthService.RefreshUser(auth.refresh_token)\r\n if (refreshResult.ok) {\r\n var newAuth = await refreshResult.json()\r\n AuthService.StoreAuth(newAuth)\r\n return await this.MakeRequest(url, options, true)\r\n }\r\n }\r\n }\r\n return httpResult\r\n } else {\r\n return await fetch(url, options)\r\n }\r\n }\r\n\r\n async MakeUrlEncodedPost(url, model) {\r\n var actualUrl = Config.api + url\r\n var headers = { 'Content-Type': 'application/x-www-form-urlencoded' }\r\n var body = this.getUrlEncodedFormDataFromJson(model)\r\n var options = { method: 'POST', headers, body }\r\n return await fetch(actualUrl, options)\r\n }\r\n\r\n getUrlEncodedFormDataFromJson(obj, prefix = '', postfix = '') {\r\n var formBody = []\r\n for (var property in obj) {\r\n var encodedKey = encodeURIComponent(property)\r\n if (obj[property]) {\r\n var boxedKey = prefix + encodedKey + postfix\r\n if (typeof obj[property] !== 'object') {\r\n var encodedValue = encodeURIComponent(obj[property])\r\n formBody.push(boxedKey + '=' + encodedValue)\r\n } else if (Array.isArray(obj[property])) {\r\n const nestedPrefix = boxedKey + '['\r\n const nested = this.getUrlEncodedFormDataFromJson(\r\n obj[property],\r\n nestedPrefix,\r\n ']',\r\n )\r\n formBody = formBody.concat(nested)\r\n } else {\r\n const nestedPrefix = boxedKey + '.'\r\n const nested = this.getUrlEncodedFormDataFromJson(\r\n obj[property],\r\n nestedPrefix,\r\n )\r\n formBody = formBody.concat(nested)\r\n }\r\n }\r\n }\r\n formBody = formBody.join('&')\r\n return formBody\r\n }\r\n}\r\n\r\nexport default new HttpService()\r\n","import HttpService from './HttpService'\r\n\r\nclass CoreService {\r\n GetFieldDefinitions() {\r\n return HttpService.MakeGet('/api/Field')\r\n }\r\n\r\n GetStaticFieldDefinitions(customerId) {\r\n return HttpService.MakeGet('/api/Field/' + customerId)\r\n }\r\n\r\n GetSerialDetails(\r\n term,\r\n pageSize,\r\n page,\r\n orderBy = '',\r\n orderAscending = true,\r\n searchBy = 63,\r\n ) {\r\n return HttpService.MakeGet(\r\n `/api/SerialDetail?term=${term}&pageSize=${pageSize}&page=${page}&orderAscending=${orderAscending}&orderBy=${orderBy}&searchBy=${searchBy}`,\r\n )\r\n }\r\n\r\n GetUnassignedSerialDetails(\r\n pageSize,\r\n page,\r\n orderBy = '',\r\n orderAscending = true,\r\n ) {\r\n return HttpService.MakeGet(\r\n `/api/SerialDetail/Unassigned?pageSize=${pageSize}&page=${page}&orderAscending=${orderAscending}&orderBy=${orderBy}`,\r\n )\r\n }\r\n\r\n GetSerialDetail(id) {\r\n return HttpService.MakeGet('/api/SerialDetail/' + id)\r\n }\r\n\r\n CreateSerialDetail(serialDetail) {\r\n return HttpService.MakePost('/api/SerialDetail', serialDetail)\r\n }\r\n\r\n DeleteUnassignedSerialDetail(unassignedSerialDetail) {\r\n return HttpService.MakePost(\r\n '/api/SerialDetail/DeleteUnassigned',\r\n unassignedSerialDetail,\r\n )\r\n }\r\n\r\n UpdateSerialDetail(serialDetail) {\r\n return HttpService.MakePut('/api/SerialDetail', serialDetail)\r\n }\r\n\r\n DeleteSerialDetail(id) {\r\n return HttpService.MakeDelete('/api/SerialDetail/' + id)\r\n }\r\n\r\n GetSerialDetailLog(itemId, serialNumber) {\r\n return HttpService.MakeGet(\r\n `/api/SerialDetail/logs?item=${itemId}&serialNumber=${serialNumber}`,\r\n )\r\n }\r\n\r\n UploadFile(file) {\r\n return HttpService.UploadFile('/api/File', file)\r\n }\r\n\r\n GetCustomers(pageSize, page) {\r\n return HttpService.MakeGet(\r\n `/api/Customer?pageSize=${pageSize}&page=${page}`,\r\n )\r\n }\r\n\r\n GetCustomer(id) {\r\n return HttpService.MakeGet('/api/Customer/' + id)\r\n }\r\n\r\n CreateCustomerSite(customerId, site) {\r\n return HttpService.MakePost(`/api/Customer/${customerId}/Site`, site)\r\n }\r\n\r\n UpdateCustomerSite(customerId, site) {\r\n return HttpService.MakePut(`/api/Customer/${customerId}/Site`, site)\r\n }\r\n\r\n AttemptCustomerSiteDeletion(customerId, siteId) {\r\n return HttpService.MakeDelete(\r\n `/api/Customer/${customerId}/Site/${siteId}/AttemptDeletion`,\r\n )\r\n }\r\n\r\n DeleteCustomerSite(customerId, siteId) {\r\n return HttpService.MakeDelete(`/api/Customer/${customerId}/Site/${siteId}`)\r\n }\r\n\r\n CreateCustomerRegion(customerId, region) {\r\n return HttpService.MakePost(`/api/Customer/${customerId}/Region`, region)\r\n }\r\n\r\n UpdateCustomerRegion(customerId, region) {\r\n return HttpService.MakePut(`/api/Customer/${customerId}/Region`, region)\r\n }\r\n\r\n AttemptCustomerRegionDeletion(customerId, regionId) {\r\n return HttpService.MakeDelete(\r\n `/api/Customer/${customerId}/Region/${regionId}/AttemptDeletion`,\r\n )\r\n }\r\n\r\n DeleteCustomerRegion(customerId, regionId) {\r\n return HttpService.MakeDelete(\r\n `/api/Customer/${customerId}/Region/${regionId}`,\r\n )\r\n }\r\n\r\n GetUsers(pageSize, page) {\r\n return HttpService.MakeGet(`/api/User?pageSize=${pageSize}&page=${page}`)\r\n }\r\n\r\n GetUser(userId) {\r\n return HttpService.MakeGet(`/api/User/${userId}`)\r\n }\r\n\r\n GetUserCustomerRegionAccess() {\r\n return HttpService.MakeGet(`/api/Customer/Access`)\r\n }\r\n\r\n CreateUser(userModel) {\r\n return HttpService.MakePost('/api/User', userModel)\r\n }\r\n\r\n UpdateUser(userModel) {\r\n return HttpService.MakePut('/api/User', userModel)\r\n }\r\n\r\n DeleteUser(userId) {\r\n return HttpService.MakeDelete(`/api/User/${userId}`)\r\n }\r\n\r\n GetReportConfig(customerId) {\r\n return HttpService.MakeGet(`/api/Report/Config/${customerId}`)\r\n }\r\n\r\n GetReport(customerId) {\r\n return HttpService.MakeGet(`/api/Report/${customerId}`)\r\n }\r\n\r\n GetServiceTrackers(customer, pageSize, page, orderBy, orderAscending) {\r\n var endpoint = `/api/Service?customer=${customer}&pageSize=${pageSize}&page=${page}&orderBy=${orderBy}&orderAscending=${orderAscending}`\r\n return HttpService.MakeGet(endpoint)\r\n }\r\n\r\n GetServiceTypes() {\r\n var endpoint = '/api/Service/Types'\r\n return HttpService.MakeGet(endpoint)\r\n }\r\n\r\n GetServiceTracker(id) {\r\n var endpoint = `/api/Service/${id}`\r\n return HttpService.MakeGet(endpoint)\r\n }\r\n\r\n CreateServiceTracker(serviceTracker) {\r\n var endpoint = '/api/Service'\r\n return HttpService.MakePost(endpoint, serviceTracker)\r\n }\r\n\r\n UpdateServiceTracker(serviceTracker) {\r\n var endpoint = '/api/Service'\r\n return HttpService.MakePut(endpoint, serviceTracker)\r\n }\r\n\r\n DeleteServiceTracker(id) {\r\n var endpoint = `/api/Service/${id}`\r\n return HttpService.MakeDelete(endpoint)\r\n }\r\n\r\n GetServiceReport(customerId) {\r\n return HttpService.MakeGet(`/api/ServiceReport/${customerId}`)\r\n }\r\n\r\n VerifyFileName(fileName) {\r\n return HttpService.MakeGet(\r\n `/api/SerialDetail/qr-code/verify-file?testFileName=${fileName}`,\r\n )\r\n }\r\n\r\n UploadFileQR(file, setUploadPercentage) {\r\n return HttpService.UploadFileWithPercentage(\r\n '/api/SerialDetail/qr-code/upload',\r\n file,\r\n setUploadPercentage,\r\n )\r\n }\r\n\r\n GetHashFiles(hash) {\r\n return HttpService.MakeGet(`/api/SerialDetail/qr-code/files?hash=${hash}`)\r\n }\r\n}\r\n\r\nexport default new CoreService()\r\n","import Config from '../Config'\r\nimport * as ActionCreators from '../Reducers/ServiceTracker/serviceTracker'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport CoreService from '../Services/CoreService'\r\n\r\nexport async function getServiceTracker(id) {\r\n return async (dispatch, getState) => {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n var httpResponse = await CoreService.GetServiceTracker(id)\r\n if (httpResponse.ok) {\r\n var serviceTracker = await httpResponse.json()\r\n serviceTracker.serviceDate = new Date(serviceTracker.serviceDate)\r\n dispatch(ActionCreators.setServiceTracker(serviceTracker))\r\n } else {\r\n var error = httpResponse.text()\r\n console.log(error)\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n\r\nexport async function createServiceTracker() {\r\n return async (dispatch, getState) => {\r\n var state = getState()\r\n\r\n dispatch(ActionCreators.setServiceTrackerLoading(true))\r\n var errors = validateForm(dispatch, state)\r\n if (errors.length === 0) {\r\n var httpResponse = await CoreService.CreateServiceTracker(\r\n state.serviceTracker.serviceTracker,\r\n )\r\n if (httpResponse.ok) {\r\n dispatch(ActionCreators.setServiceTrackerLoading(false))\r\n dispatch(MainActionCreators.setPath('/serviceTracker'))\r\n return\r\n } else if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n } else {\r\n errors = [Config.genericError]\r\n }\r\n }\r\n dispatch(ActionCreators.setServiceTrackerLoading(false))\r\n dispatch(ActionCreators.setErrorModalOpen(errors, true))\r\n }\r\n}\r\n\r\nexport async function updateServiceTracker() {\r\n return async (dispatch, getState) => {\r\n var state = getState()\r\n dispatch(ActionCreators.setServiceTrackerLoading(true))\r\n var serviceTracker = state.serviceTracker.serviceTracker\r\n var errors = validateForm(dispatch, state)\r\n if (errors.length === 0) {\r\n var httpResponse = await CoreService.UpdateServiceTracker(serviceTracker)\r\n if (httpResponse.ok) {\r\n dispatch(ActionCreators.setServiceTrackerLoading(false))\r\n dispatch(MainActionCreators.setPath('/serviceTracker'))\r\n return\r\n } else if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n } else {\r\n errors = [Config.genericError]\r\n }\r\n }\r\n dispatch(ActionCreators.setErrorModalOpen(errors, true))\r\n dispatch(ActionCreators.setServiceTrackerLoading(false))\r\n }\r\n}\r\n\r\nconst validateForm = (dispatch, state) => {\r\n var serviceTracker = state.serviceTracker.serviceTracker\r\n\r\n var errors = []\r\n if (!serviceTracker.customer) {\r\n errors.push('Customer is required')\r\n }\r\n if (!serviceTracker.serviceTypeId || serviceTracker.serviceTypeId === 0) {\r\n errors.push('Customer is required')\r\n }\r\n if (!serviceTracker.serviceCycle) {\r\n errors.push('Service Cycle is required')\r\n }\r\n if (!serviceTracker.serviceDate) {\r\n errors.push('Service Date is required')\r\n }\r\n return errors\r\n}\r\n\r\nexport async function deleteServiceTracker() {\r\n return async (dispatch, getState) => {\r\n var serviceTracker = getState().serviceTracker.serviceTracker\r\n dispatch(ActionCreators.setDeleteModalLoading(true))\r\n var httpResponse = await CoreService.DeleteServiceTracker(serviceTracker.id)\r\n if (httpResponse.ok) {\r\n dispatch(ActionCreators.setDeleteModalOpen(false))\r\n dispatch(ActionCreators.setDeleteModalLoading(false))\r\n dispatch(MainActionCreators.setPath('/serviceTracker'))\r\n } else {\r\n var errors = [Config.genericError]\r\n dispatch(ActionCreators.setErrorModalOpen(errors, true))\r\n }\r\n }\r\n}\r\n\r\nexport async function getServiceTypes() {\r\n return async (dispatch, getState) => {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n const serviceTypesHttpResponse = await CoreService.GetServiceTypes()\r\n if (serviceTypesHttpResponse.ok) {\r\n const serviceTypes = await serviceTypesHttpResponse.json()\r\n dispatch(ActionCreators.setServiceTypes(serviceTypes))\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n\r\nexport async function getCustomers() {\r\n return async (dispatch, getState) => {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n const customersHttpResponse = await CoreService.GetCustomers(10000, 0)\r\n if (customersHttpResponse.ok) {\r\n const customersResponse = await customersHttpResponse.json()\r\n dispatch(\r\n ActionCreators.setCustomers(\r\n customersResponse.map((x) => ({\r\n id: x.id.trim(),\r\n name: x.name,\r\n })),\r\n ),\r\n )\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n","import { useEffect } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { withRouter } from 'react-router-dom'\r\nimport * as MainActionCreators from '../Reducers/main'\r\n\r\nfunction ReactiveRouter(props) {\r\n useEffect(\r\n () => {\r\n if (\r\n props.pathInitialized &&\r\n props.history.location.pathname !== props.path\r\n ) {\r\n props.history.push(props.path)\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.path],\r\n )\r\n\r\n useEffect(\r\n () => {\r\n if (props.location && props.location.pathname) {\r\n props.setPath(props.location.pathname)\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.location && props.location.pathname],\r\n )\r\n\r\n return null\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n path: state.main.path,\r\n pathInitialized: state.main.pathInitialized,\r\n})\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n})\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n)(withRouter(ReactiveRouter))\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Route, Redirect } from 'react-router-dom'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport AuthService from '../Services/AuthService'\r\n\r\nconst ProtectedRoute = ({\r\n setPath,\r\n role,\r\n component: Component,\r\n specificRoleCheck,\r\n ...rest\r\n}) => {\r\n if (rest.path === '/') {\r\n return (\r\n \r\n AuthService.IsAtLeast(role, specificRoleCheck) ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n )\r\n } else {\r\n return (\r\n \r\n AuthService.IsAtLeast(role, specificRoleCheck) ? (\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\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProtectedRoute)\r\n","import { useEffect, useState } from 'react'\r\n\r\nconst useMediaQuery = (query) => {\r\n const mediaMatch = window.matchMedia(query)\r\n const [matches, setMatches] = useState(mediaMatch.matches)\r\n\r\n useEffect(() => {\r\n const handler = (e) => setMatches(e.matches)\r\n mediaMatch.addListener(handler)\r\n return () => mediaMatch.removeListener(handler)\r\n })\r\n return matches\r\n}\r\n\r\nexport default useMediaQuery\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, AppBar, Toolbar, Button, IconButton } from '@material-ui/core'\r\nimport {\r\n Drawer,\r\n List,\r\n Divider,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n} from '@material-ui/core'\r\nimport useMediaQuery from './Hooks/UseMediaQuery'\r\nimport MenuIcon from '@material-ui/icons/Menu'\r\n// import GridOffIcon from '@material-ui/icons/GridOff'\r\nimport GridOnIcon from '@material-ui/icons/GridOn'\r\nimport PeopleIcon from '@material-ui/icons/People'\r\nimport AddIcon from '@material-ui/icons/Add'\r\nimport PermIdentityIcon from '@material-ui/icons/PermIdentity'\r\nimport FilterTiltShiftIcon from '@material-ui/icons/FilterTiltShift'\r\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload'\r\nimport * as ActionCreators from './Reducers/navBar'\r\nimport * as MainActionCreators from './Reducers/main'\r\nimport AuthService from './Services/AuthService'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n toolBar: {\r\n display: 'flex',\r\n fles: 1,\r\n justifyContent: 'space-between',\r\n },\r\n toolBarTitle: {\r\n display: 'flex',\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n title: {\r\n flexGrow: 1,\r\n },\r\n list: {\r\n width: 330,\r\n },\r\n fullList: {\r\n width: 'auto',\r\n },\r\n}))\r\n\r\nfunction NavBar(props) {\r\n const classes = useStyles()\r\n const toggleDrawer = (open) => (event) => {\r\n if (\r\n event.type === 'keydown' &&\r\n (event.key === 'Tab' || event.key === 'Shift')\r\n ) {\r\n return\r\n }\r\n props.setSideMenuOpen(open)\r\n }\r\n\r\n const sideList = (side) => (\r\n \r\n {AuthService.IsAtLeast('ExternalDataEntry') ? (\r\n <>\r\n \r\n {AuthService.IsAtLeast('AustinEmployee') ? (\r\n
props.setPath('/newSerialDetail')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : (\r\n <>\r\n )}\r\n
props.setPath('/serialDetails')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {AuthService.IsAtLeast('AustinEmployee') ? (\r\n
props.setPath('/uploadCertificate')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : (\r\n <>\r\n )}\r\n {/*
props.setPath('/unassignedSerialsDetails')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
*/}\r\n
\r\n \r\n \r\n ) : null}\r\n {AuthService.IsAtLeast('AustinServiceEmployee') ? (\r\n <>\r\n \r\n
props.setPath('/serviceTracker')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n ) : null}\r\n {AuthService.IsAtLeast(['AustinAdmin', 'ExternalAdmin'], true) ? (\r\n \r\n
props.setPath('/customers')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {AuthService.IsAtLeast('AustinAdmin') ? (\r\n
props.setPath('/users')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : (\r\n <>\r\n )}\r\n
\r\n ) : null}\r\n {props.customers ? (\r\n <>\r\n \r\n \r\n \r\n \r\n {props.customers.map((customer) => (\r\n props.setPath(`/report/${customer.id}`)}\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.customers.map((customer) => (\r\n props.setPath(`/serviceReport/${customer.id}`)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n ) : null}\r\n \r\n )\r\n\r\n const logOut = () => {\r\n props.setPath('/login')\r\n AuthService.RemoveAuth()\r\n }\r\n\r\n const isWide = useMediaQuery('(min-width: 500px)')\r\n\r\n const redirectToHome = () => {\r\n props.setPath('/')\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {props.isUserAuthenticated ? (\r\n \r\n \r\n \r\n ) : null}\r\n {isWide ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {AuthService.IsUserAuthenticated() ? (\r\n \r\n ) : (\r\n props.setPath('/login')}\r\n variant='contained'\r\n color='primary'\r\n >\r\n Login\r\n \r\n )}\r\n \r\n \r\n \r\n {sideList('left')}\r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n screenName: state.navBar.screenName,\r\n sideMenuOpen: state.navBar.sideMenuOpen,\r\n isUserAuthenticated: AuthService.IsUserAuthenticated(),\r\n customers: AuthService.GetCustomers(),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSideMenuOpen: (...args) =>\r\n dispatch(ActionCreators.setSideMenuOpen.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavBar)\r\n","import * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/Auth/login'\r\nimport AuthService from '../Services/AuthService'\r\n\r\nexport async function login() {\r\n return async (dispatch, getState) => {\r\n dispatch(ActionCreators.setIsLoginLoading(true))\r\n var state = getState()\r\n var httpResponse = await AuthService.AuthorizeUser(\r\n state.login.username,\r\n state.login.password,\r\n )\r\n if (httpResponse.ok) {\r\n var auth = await httpResponse.json()\r\n AuthService.StoreAuth(auth)\r\n if (auth.role === 'ExternalUser') {\r\n if (auth.customers && auth.customers.length) {\r\n dispatch(MainActionCreators.setPath('/reportPicker'))\r\n } else {\r\n dispatch(MainActionCreators.setPath(`/noCustomerAccess`))\r\n }\r\n } else if (auth.role === 'AustinServiceEmployee') {\r\n dispatch(MainActionCreators.setPath('/serviceTracker'))\r\n } else {\r\n dispatch(MainActionCreators.setPath('/serialDetails'))\r\n }\r\n } else {\r\n if (httpResponse.status === 400) {\r\n const error = await httpResponse.json()\r\n dispatch(ActionCreators.setLoginErrors([error.error_description]))\r\n } else {\r\n const error = await httpResponse.text()\r\n console.log(error)\r\n }\r\n }\r\n dispatch(ActionCreators.setIsLoginLoading(false))\r\n }\r\n}\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Paper, Button, TextField } from '@material-ui/core'\r\nimport * as MainBarActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/Auth/login'\r\nimport * as ThunkActionCreators from '../Thunks/LoginThunk'\r\nimport { CircularProgress } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n marginTop: theme.spacing(5),\r\n },\r\n logo: {\r\n width: 'fit-content',\r\n margin: 'auto',\r\n padding: theme.spacing(0, 0, 4, 0),\r\n },\r\n paper: {\r\n padding: theme.spacing(1, 0, 2, 0),\r\n margin: 'auto',\r\n maxWidth: 400,\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n justifyContent: 'center',\r\n },\r\n forgotPassword: {\r\n fontSize: 12,\r\n width: 250,\r\n display: 'inline-flex',\r\n flexDirection: 'row-reverse',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n action: {\r\n marginTop: theme.spacing(3),\r\n width: 250,\r\n display: 'inline-flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n error: {\r\n color: 'red',\r\n },\r\n}))\r\n\r\nfunction Login(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n

Log In

\r\n props.setUsername(e.target.value)}\r\n />\r\n props.setPassword(e.target.value)}\r\n />\r\n props.setPath('/forgotPassword')}\r\n className={classes.forgotPassword}\r\n >\r\n Forgot your password?\r\n \r\n \r\n {props.loginErorrs.map((error, i) => (\r\n

\r\n {error}\r\n

\r\n ))}\r\n
\r\n \r\n {props.isLoginLoading ? (\r\n \r\n ) : (\r\n \r\n Log In\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n username: state.login.username,\r\n password: state.login.password,\r\n isLoginLoading: state.login.isLoginLoading,\r\n loginErorrs: state.login.loginErrors,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setPath: (...args) =>\r\n dispatch(MainBarActionCreators.setPath.apply(null, args)),\r\n setUsername: (...args) =>\r\n dispatch(ActionCreators.setUsername.apply(null, args)),\r\n setPassword: (...args) =>\r\n dispatch(ActionCreators.setPassword.apply(null, args)),\r\n login: async (...args) =>\r\n dispatch(await ThunkActionCreators.login.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Login)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Paper, Button } from '@material-ui/core'\r\nimport * as MainBarActionCreators from '../Reducers/main'\r\nimport AuthService from '../Services/AuthService'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n marginTop: theme.spacing(5),\r\n },\r\n logo: {\r\n width: 'fit-content',\r\n margin: 'auto',\r\n padding: theme.spacing(0, 0, 4, 0),\r\n },\r\n paper: {\r\n padding: theme.spacing(1, 0, 2, 0),\r\n margin: 'auto',\r\n maxWidth: 400,\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n justifyContent: 'center',\r\n },\r\n buttons: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n },\r\n button: {\r\n margin: theme.spacing(0, 1),\r\n },\r\n}))\r\n\r\nfunction ReportPicker({ setPath }) {\r\n const classes = useStyles()\r\n\r\n const customers = AuthService.GetCustomers()\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n

Which report would you like to view?

\r\n \r\n setPath(`/report/${customers[0].id}`)}\r\n >\r\n Asset Tracking\r\n \r\n setPath(`/serviceReport/${customers[0].id}`)}\r\n >\r\n Service Tracking\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => ({})\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setPath: (...args) =>\r\n dispatch(MainBarActionCreators.setPath.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ReportPicker)\r\n","import * as ActionCreators from '../Reducers/Auth/forgotPassword'\r\nimport AuthService from '../Services/AuthService'\r\n\r\nexport async function submitForgotPasswordClaim() {\r\n return async (dispatch, getState) => {\r\n dispatch(ActionCreators.setIsLoading(true))\r\n var state = getState()\r\n var httpResponse = await AuthService.SubmitForgotPasswordClaim(\r\n state.forgotPassword.email,\r\n )\r\n if (httpResponse.ok) {\r\n dispatch(\r\n ActionCreators.setMessage(\r\n 'You successfully filed a reset password claim! Check your email for next steps.',\r\n ),\r\n )\r\n } else {\r\n const error = await httpResponse.text()\r\n console.log(error)\r\n }\r\n dispatch(ActionCreators.setIsLoading(false))\r\n }\r\n}\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Paper, Button, TextField } from '@material-ui/core'\r\nimport * as ActionCreators from '../Reducers/Auth/forgotPassword'\r\nimport * as ThunkActionCreators from '../Thunks/ForgotPasswordThunk'\r\nimport { CircularProgress } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n marginTop: theme.spacing(10),\r\n },\r\n paper: {\r\n padding: theme.spacing(6, 2, 10, 2),\r\n margin: 'auto',\r\n maxWidth: 498,\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n justifyContent: 'center',\r\n },\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n message: {\r\n marginTop: theme.spacing(2),\r\n display: 'inline-flex',\r\n maxWidth: 250,\r\n },\r\n action: {\r\n marginTop: theme.spacing(3),\r\n width: 250,\r\n display: 'inline-flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n}))\r\n\r\nfunction ForgotPassword(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n \r\n

Forgot Password

\r\n props.setEmail(e.target.value)}\r\n />\r\n {props.message}\r\n \r\n {props.isLoading ? (\r\n \r\n ) : (\r\n \r\n Submit\r\n \r\n )}\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n email: state.forgotPassword.email,\r\n isLoading: state.forgotPassword.isLoading,\r\n message: state.forgotPassword.message,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setEmail: (...args) => dispatch(ActionCreators.setEmail.apply(null, args)),\r\n submitForgotPasswordClaim: async (...args) =>\r\n dispatch(\r\n await ThunkActionCreators.submitForgotPasswordClaim.apply(null, args),\r\n ),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ForgotPassword)\r\n","import * as ActionCreators from '../Reducers/Auth/resetPassword'\r\nimport AuthService from '../Services/AuthService'\r\nimport Config from '../Config'\r\n\r\nexport async function resetPassword() {\r\n return async (dispatch, getState) => {\r\n var errors = []\r\n dispatch(ActionCreators.setIsLoading(true))\r\n dispatch(ActionCreators.setMessage([], true))\r\n dispatch(ActionCreators.setMessage([], false))\r\n\r\n var state = getState()\r\n var { token, password, confirmPassword } = state.resetPassword\r\n var model = { token, password, confirmPassword }\r\n\r\n errors = validateResetPassword(dispatch, model)\r\n if (!errors.length) {\r\n var httpResponse = await AuthService.ResetPassword(model)\r\n if (httpResponse.ok) {\r\n dispatch(ActionCreators.setMessage(['Success password reset!'], true))\r\n dispatch(ActionCreators.setIsLoading(false))\r\n return\r\n } else {\r\n if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n } else {\r\n errors = [Config.genericError]\r\n }\r\n }\r\n }\r\n dispatch(ActionCreators.setMessage(errors, false))\r\n dispatch(ActionCreators.setIsLoading(false))\r\n }\r\n}\r\n\r\nfunction validateResetPassword(dispatch, model) {\r\n dispatch(\r\n ActionCreators.setIsDirty({\r\n token: true,\r\n password: true,\r\n confirmPassword: true,\r\n }),\r\n )\r\n var errors = []\r\n if (!model.password) {\r\n errors.push('Password is required')\r\n }\r\n if (!model.confirmPassword) {\r\n errors.push('Confirm Password is required')\r\n }\r\n if (model.password !== model.confirmPassword) {\r\n errors.push('Password and Confirm Password do not match')\r\n }\r\n return errors\r\n}\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Paper, Button, TextField } from '@material-ui/core'\r\nimport * as ActionCreators from '../Reducers/Auth/resetPassword'\r\nimport * as ThunkActionCreators from '../Thunks/ResetPasswordThunk'\r\nimport { CircularProgress } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n marginTop: theme.spacing(10),\r\n },\r\n paper: {\r\n padding: theme.spacing(6, 2, 10, 2),\r\n margin: 'auto',\r\n maxWidth: 498,\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n justifyContent: 'center',\r\n },\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n successMessage: {\r\n marginTop: theme.spacing(2),\r\n display: 'inline-flex',\r\n width: 498,\r\n color: 'green',\r\n flexDirection: 'column',\r\n },\r\n failureMessage: {\r\n marginTop: theme.spacing(2),\r\n display: 'inline-flex',\r\n width: 498,\r\n color: 'red',\r\n flexDirection: 'column',\r\n },\r\n action: {\r\n marginTop: theme.spacing(3),\r\n width: 250,\r\n display: 'inline-flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n}))\r\n\r\nfunction ResetPassword(props) {\r\n const classes = useStyles()\r\n if (props.location.search && !props.tokenReadFromUrl) {\r\n var queryString = props.location.search.substring(1)\r\n if (queryString) {\r\n var argsArray = queryString\r\n .split('&')\r\n .map((x) => x.split('='))\r\n .filter((x) => x.length === 2)\r\n var args = argsArray.reduce(\r\n // eslint-disable-next-line no-sequences\r\n (map, obj) => ((map[obj[0]] = obj[1]), map),\r\n {},\r\n )\r\n if (args.token) {\r\n var decoded = decodeURIComponent(args.token)\r\n props.setToken(decoded)\r\n }\r\n }\r\n }\r\n\r\n const isPasswordFieldInvalid = (fieldName) => {\r\n var otherPassword =\r\n fieldName === 'password' ? 'confirmPassword' : 'password'\r\n if (props.match.params.id === 'new') {\r\n return (\r\n props.isDirty[fieldName] &&\r\n props.isDirty[otherPassword] &&\r\n (!props[fieldName] || props['password'] !== props['confirmPassword'])\r\n )\r\n } else {\r\n return (\r\n props.isDirty[otherPassword] &&\r\n props['password'] !== props['confirmPassword']\r\n )\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n

Reset Password

\r\n props.setToken(e.target.value)}\r\n />\r\n props.setPassword(e.target.value)}\r\n />\r\n props.setConfirmPassword(e.target.value)}\r\n />\r\n \r\n {props.successMessage.map((x) => (\r\n
{x}
\r\n ))}\r\n
\r\n \r\n {props.failureMessage.map((x) => (\r\n
{x}
\r\n ))}\r\n
\r\n \r\n {props.isLoading ? (\r\n \r\n ) : (\r\n \r\n Submit\r\n \r\n )}\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n tokenReadFromUrl: state.resetPassword.tokenReadFromUrl,\r\n token: state.resetPassword.token,\r\n password: state.resetPassword.password,\r\n confirmPassword: state.resetPassword.confirmPassword,\r\n isDirty: state.resetPassword.isDirty,\r\n isLoading: state.resetPassword.isLoading,\r\n successMessage: state.resetPassword.successMessage,\r\n failureMessage: state.resetPassword.failureMessage,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setToken: (...args) => dispatch(ActionCreators.setToken.apply(null, args)),\r\n setPassword: (...args) =>\r\n dispatch(ActionCreators.setPassword.apply(null, args)),\r\n setConfirmPassword: (...args) =>\r\n dispatch(ActionCreators.setConfirmPassword.apply(null, args)),\r\n resetPassword: async (...args) =>\r\n dispatch(await ThunkActionCreators.resetPassword.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ResetPassword)\r\n","import * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/SerialDetails/serialDetails'\r\nimport CoreService from '../Services/CoreService'\r\n\r\nvar query = ''\r\n\r\nexport async function searchSerialDetails(\r\n term,\r\n pageSize,\r\n page,\r\n sortBy,\r\n sortAscending,\r\n searchBy,\r\n) {\r\n return async (dispatch, getState) => {\r\n query = 'assigned'\r\n dispatch(ActionCreators.setSerialDetailsLoading(true))\r\n dispatch(ActionCreators.setSerialDetails([]))\r\n var httpResponse = await CoreService.GetSerialDetails(\r\n term,\r\n pageSize,\r\n page,\r\n sortBy,\r\n sortAscending,\r\n searchBy,\r\n )\r\n if (httpResponse.ok) {\r\n const response = await httpResponse.json()\r\n if (query === 'assigned') {\r\n dispatch(ActionCreators.setSerialDetailsWithPagination(response))\r\n }\r\n } else {\r\n const response = await httpResponse.text()\r\n console.error(response)\r\n }\r\n dispatch(ActionCreators.setSerialDetailsLoading(false))\r\n }\r\n}\r\n\r\nexport async function getUnassignedSerialDetails(\r\n pageSize,\r\n page,\r\n sortBy,\r\n sortAscending,\r\n) {\r\n return async (dispatch, getState) => {\r\n query = 'unassigned'\r\n dispatch(ActionCreators.setSerialDetailsLoading(true))\r\n dispatch(ActionCreators.setSerialDetails([]))\r\n var httpResponse = await CoreService.GetUnassignedSerialDetails(\r\n pageSize,\r\n page,\r\n sortBy,\r\n sortAscending,\r\n )\r\n if (httpResponse.ok) {\r\n const response = await httpResponse.json()\r\n if (query === 'unassigned') {\r\n dispatch(ActionCreators.setSerialDetailsWithPagination(response))\r\n }\r\n } else {\r\n const response = await httpResponse.text()\r\n console.error(response)\r\n }\r\n dispatch(ActionCreators.setSerialDetailsLoading(false))\r\n }\r\n}\r\n\r\nexport async function deleteUnassignedSerialDetail(unassignedSerialDetail) {\r\n return async (dispatch) => {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n try {\r\n var httpResponse = await CoreService.DeleteUnassignedSerialDetail(\r\n unassignedSerialDetail,\r\n )\r\n if (!httpResponse.ok) {\r\n const response = await httpResponse.text()\r\n console.error(response)\r\n }\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n","import { useState, useEffect } from 'react'\r\n\r\n// Our hook\r\nexport default function useDebounce(value, delay) {\r\n const [debouncedValue, setDebouncedValue] = useState(value)\r\n\r\n useEffect(\r\n () => {\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value)\r\n }, delay)\r\n\r\n return () => {\r\n clearTimeout(handler)\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [value],\r\n )\r\n\r\n return debouncedValue\r\n}\r\n","import React, { useState, useEffect } from 'react'\r\nimport useDebounce from '../Hooks/UseDebounce'\r\nimport { fade, makeStyles } from '@material-ui/core/styles'\r\nimport InputBase from '@material-ui/core/InputBase'\r\nimport SearchIcon from '@material-ui/icons/Search'\r\nimport AutorenewIcon from '@material-ui/icons/Autorenew'\r\nimport ClearIcon from '@material-ui/icons/Clear'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n inputRoot: {\r\n color: 'inherit',\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 7, 1, 7),\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n borderBottom: '1px solid rgba(0, 0, 0, 0.42)',\r\n margin: theme.spacing(1),\r\n [theme.breakpoints.up('sm')]: {\r\n width: 150,\r\n '&:focus': {\r\n width: 200,\r\n },\r\n },\r\n '&:hover': {\r\n borderBottom: '2px solid black',\r\n },\r\n '&:focus': {\r\n borderBottom: '2px solid #303f9f',\r\n },\r\n },\r\n search: {\r\n position: 'relative',\r\n minWidth: 200,\r\n lineHeight: '70px',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n margin: '10px',\r\n },\r\n searchIcon: {\r\n width: theme.spacing(7),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n clearIcon: {\r\n width: theme.spacing(7),\r\n height: '100%',\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 1000,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n}))\r\n\r\nfunction SearchBar(props) {\r\n const [isSearching, setIsSearching] = useState(false)\r\n const debouncedSearchTerm = useDebounce(props.searchTerm, 500)\r\n\r\n const search = (term) => {\r\n setIsSearching(true)\r\n props.onSearch(term).then(() => {\r\n setIsSearching(false)\r\n })\r\n }\r\n\r\n useEffect(\r\n () => search(debouncedSearchTerm),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [debouncedSearchTerm],\r\n )\r\n\r\n const test = (event) => {\r\n if (event.key === 'enter' || event.charCode === 13) {\r\n search('')\r\n }\r\n }\r\n\r\n const clearSearchTerm = () => {\r\n props.onSetSearchTerm('')\r\n }\r\n\r\n const classes = useStyles()\r\n\r\n return (\r\n
\r\n
\r\n {isSearching ? : }\r\n
\r\n props.onSetSearchTerm(e.target.value)}\r\n inputProps={{ 'aria-label': 'search' }}\r\n value={props.searchTerm}\r\n />\r\n {props.searchTerm ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n )\r\n}\r\n\r\nexport default SearchBar\r\n","import React from 'react'\r\nimport { fade, makeStyles } from '@material-ui/core/styles'\r\nimport Input from '@material-ui/core/Input'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport ListItemText from '@material-ui/core/ListItemText'\r\nimport Select from '@material-ui/core/Select'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport FormControl from '@material-ui/core/FormControl'\r\n\r\nconst ITEM_HEIGHT = 48\r\nconst ITEM_PADDING_TOP = 8\r\nconst MenuProps = {\r\n PaperProps: {\r\n style: {\r\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\r\n width: 250,\r\n },\r\n },\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 200,\r\n maxWidth: 200,\r\n },\r\n inputContainer: {\r\n position: 'relative',\r\n minWidth: 200,\r\n lineHeight: '70px',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n margin: '10px',\r\n },\r\n}))\r\n\r\nfunction FieldSelector(props) {\r\n const classes = useStyles()\r\n\r\n const handleFieldChange = (event) => {\r\n var fieldsCopy = props.fields.concat()\r\n fieldsCopy.forEach((x) => (x.selected = false))\r\n var selected = fieldsCopy.filter((x) => event.target.value.includes(x.id))\r\n selected.forEach((x) => (x.selected = true))\r\n props.onUpdateFields(fieldsCopy)\r\n }\r\n\r\n return (\r\n
\r\n \r\n Fields\r\n x.selected).map((x) => x.id)}\r\n input={}\r\n renderValue={(selected) => selected.length}\r\n MenuProps={MenuProps}\r\n >\r\n {props.fields.map((field) => (\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 FieldSelector\r\n","class UtilService {\r\n Abbreviate(input, length) {\r\n if (input && input.length > length) {\r\n return input.substr(0, length - 1) + '...'\r\n } else {\r\n return input\r\n }\r\n }\r\n\r\n FormatDate(date) {\r\n var day = ('0' + date.getDate()).slice(-2)\r\n var month = ('0' + (date.getMonth() + 1)).slice(-2)\r\n var year = date.getFullYear()\r\n\r\n return month + '-' + day + '-' + year\r\n }\r\n\r\n FormatDateUS(date) {\r\n var day = ('0' + date.getDate()).slice(-2)\r\n var month = ('0' + (date.getMonth() + 1)).slice(-2)\r\n var year = date.getFullYear()\r\n\r\n return month + '/' + day + '/' + year\r\n }\r\n}\r\n\r\nexport default new UtilService()\r\n","import Config from '../Config'\r\n\r\nclass FileService {\r\n GetUrl(file) {\r\n return Config.fileServer + '/' + file.fileGuid + file.fileExtension\r\n }\r\n}\r\n\r\nexport default new FileService()\r\n","import React from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Paper, Fab } from '@material-ui/core'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n TablePagination,\r\n TableFooter,\r\n} from '@material-ui/core'\r\nimport UtilService from '../Services/UtilService'\r\nimport FileService from '../Services/FileService'\r\nimport AuthService from '../Services/AuthService'\r\nimport DescriptionIcon from '@material-ui/icons/Description'\r\nimport EditIcon from '@material-ui/icons/Edit'\r\nimport AddIcon from '@material-ui/icons/Add'\r\nimport DeleteIcon from '@material-ui/icons/Delete'\r\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp'\r\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n minWidth: 650,\r\n },\r\n header: {\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n fileLink: {\r\n color: 'inherit',\r\n },\r\n fileIcon: {\r\n width: '1.3em',\r\n height: '1.3em',\r\n },\r\n sortIcon: {\r\n position: 'absolute',\r\n },\r\n}))\r\n\r\nfunction DataGrid(props) {\r\n const classes = useStyles()\r\n\r\n const renderFieldValues = (detail) => {\r\n return props.fields\r\n .filter((definition) => definition.selected)\r\n .map((definition, i) => {\r\n var fieldValue = detail.fields.find(\r\n (def) => def.definitionId === definition.id,\r\n )\r\n var value = null\r\n if (fieldValue) {\r\n switch (definition.type) {\r\n case 1:\r\n value = fieldValue.stringValue\r\n break\r\n case 2:\r\n value = UtilService.FormatDate(new Date(fieldValue.dateValue))\r\n break\r\n case 3:\r\n value = definition.options.filter(\r\n (x) => x.id === fieldValue.optionId,\r\n )[0].displayName\r\n break\r\n case 4:\r\n value = fieldValue.fileId ? (\r\n \r\n \r\n \r\n ) : (\r\n ''\r\n )\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n return (\r\n \r\n {value}\r\n \r\n )\r\n })\r\n }\r\n\r\n const createSerialDetail = (detail) => {\r\n props.onCreateNew(detail)\r\n props.onSetPath('/serialDetails/new')\r\n }\r\n\r\n const deleteUnassignedSerialDetail = (detail) => {\r\n props.onDelete(detail)\r\n }\r\n\r\n const renderSortIcon = (column) => {\r\n if (column === props.orderBy) {\r\n if (props.orderAscending) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n return null\r\n }\r\n\r\n const renderCoreDataHeader = (name, displayName) => {\r\n return (\r\n \r\n props.onSort(name)} className={classes.header}>\r\n {displayName}\r\n {renderSortIcon(name[0].toUpperCase() + name.substr(1))}\r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {renderCoreDataHeader('serialNumber', 'Serial Number')}\r\n {renderCoreDataHeader('customer', 'Customer ID')}\r\n {renderCoreDataHeader('item', 'Item ID')}\r\n {renderCoreDataHeader('invoiceNumber', 'Invoice Number')}\r\n {renderCoreDataHeader('soNumber', 'Order Number')}\r\n {renderCoreDataHeader('customerPo', 'Customer PO')}\r\n {!props.isUnassigned ? (\r\n \r\n {renderCoreDataHeader('customerSite', 'Site')}\r\n {renderCoreDataHeader('customerRegion', 'Region')}\r\n {props.fields\r\n .filter((x) => x.selected)\r\n .map((x) => (\r\n \r\n props.onSort(`fields-${x.id}`)}\r\n className={classes.header}\r\n >\r\n {x.displayName}\r\n {renderSortIcon(`Fields-${x.id}`)}\r\n \r\n \r\n ))}\r\n {renderCoreDataHeader(\r\n 'replacementHoseSerialNumber',\r\n 'Replacement Hose',\r\n )}\r\n {renderCoreDataHeader('failureDetails', 'Failure Details')}\r\n \r\n ) : null}\r\n {AuthService.IsAtLeast('AustinAdmin') ? (\r\n <>\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n {props.serialDetails.map((detail, i) => (\r\n \r\n {detail.serialNumber}\r\n {detail.customer}\r\n {detail.item}\r\n {detail.invoiceNumber}\r\n {detail.soNumber}\r\n {detail.customerPo}\r\n {props.isUnassigned ? (\r\n AuthService.IsAtLeast('AustinAdmin') ? (\r\n <>\r\n \r\n createSerialDetail(detail)}\r\n >\r\n \r\n \r\n \r\n \r\n deleteUnassignedSerialDetail(detail)}\r\n >\r\n \r\n \r\n \r\n \r\n ) : null\r\n ) : (\r\n \r\n \r\n {UtilService.Abbreviate(detail.customerSite, 20)}\r\n \r\n \r\n {UtilService.Abbreviate(detail.customerRegion, 20)}\r\n \r\n {renderFieldValues(detail)}\r\n \r\n {UtilService.Abbreviate(\r\n detail.replacementHoseSerialNumber,\r\n 20,\r\n )}\r\n \r\n \r\n {UtilService.Abbreviate(detail.failureDetails, 20)}\r\n \r\n {AuthService.IsAtLeast(\r\n ['AustinAdmin', 'ExternalAdmin', 'ExternalDataEntry'],\r\n true,\r\n ) ? (\r\n \r\n \r\n props.onSetPath('/serialDetails/' + detail.id)\r\n }\r\n >\r\n \r\n \r\n \r\n ) : null}\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.children}
\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(DataGrid)\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, CircularProgress } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n progressContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: theme.spacing(3),\r\n },\r\n}))\r\n\r\nfunction GridSpinner(props) {\r\n const classes = useStyles()\r\n\r\n if (props.isLoading) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n return null\r\n}\r\n\r\nexport default GridSpinner\r\n","import React from 'react'\r\nimport { FormControl, InputLabel, Select, MenuItem } from '@material-ui/core'\r\nimport { makeStyles, fade } from '@material-ui/core/styles'\r\nimport searchByFieldsJson from './json/searchByFields.json'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 200,\r\n maxWidth: 200,\r\n },\r\n inputContainer: {\r\n position: 'relative',\r\n minWidth: 200,\r\n lineHeight: '70px',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n margin: '10px',\r\n },\r\n}))\r\n\r\nfunction SearchByField(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = (event) => {\r\n props.handleChange(event.target.value)\r\n }\r\n\r\n var options = searchByFieldsJson.map((x) => (\r\n \r\n {x.label}\r\n \r\n ))\r\n\r\n return (\r\n
\r\n \r\n Search By\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SearchByField\r\n","import React, { useEffect } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { connect } from 'react-redux'\r\nimport { Paper } from '@material-ui/core'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/SerialDetails/serialDetails'\r\nimport * as ThunkActionCreators from '../Thunks/SerialDetailsThunk'\r\nimport SearchBar from './SearchBar'\r\nimport FieldSelector from './FieldSelector'\r\nimport DataGrid from './DataGrid'\r\nimport GridSpinner from '../Components/GridSpinner'\r\nimport SearchByField from './SearchByField'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n inputContainers: {\r\n padding: theme.spacing(1, 0),\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#D8D4C9',\r\n },\r\n progressContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: theme.spacing(3),\r\n },\r\n}))\r\n\r\nfunction SerialDetails(props) {\r\n const classes = useStyles()\r\n\r\n useEffect(() => {\r\n props.searchSerialDetails(\r\n '',\r\n props.pageSize,\r\n props.page,\r\n props.orderBy,\r\n props.orderAscending,\r\n props.searchBy,\r\n )\r\n return () => props.cleanUp()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n useEffect(\r\n () => {\r\n if (props.searchTerm) {\r\n props.searchSerialDetails(\r\n props.searchTerm,\r\n props.pageSize,\r\n props.page,\r\n props.orderBy,\r\n props.orderAscending,\r\n props.searchBy,\r\n )\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.searchBy],\r\n )\r\n\r\n const handleSearch = async (term) => {\r\n props.setPage(0)\r\n props.setSearchTerm(term)\r\n await props.searchSerialDetails(\r\n term,\r\n props.pageSize,\r\n 0,\r\n props.orderBy,\r\n props.orderAscending,\r\n props.searchBy,\r\n )\r\n }\r\n\r\n const handlePageChange = async (event, newPage) => {\r\n props.setPage(newPage)\r\n await props.searchSerialDetails(\r\n props.searchTerm,\r\n props.pageSize,\r\n newPage,\r\n props.orderBy,\r\n props.orderAscending,\r\n props.searchBy,\r\n )\r\n }\r\n\r\n const handleRowCountChange = async (event) => {\r\n var pageSize = event.target.value\r\n props.setPage(0)\r\n props.setPageSize(pageSize)\r\n await props.searchSerialDetails(\r\n props.searchTerm,\r\n pageSize,\r\n 0,\r\n props.orderBy,\r\n props.orderAscending,\r\n props.searchBy,\r\n )\r\n }\r\n\r\n const handleSort = async (orderByTerm) => {\r\n var orderBy = orderByTerm.charAt(0).toUpperCase() + orderByTerm.substring(1)\r\n\r\n props.setPage(0)\r\n if (props.orderBy !== orderBy) {\r\n // Sort ascending by orderBy\r\n props.setOrderBy(orderBy)\r\n props.setOrderAscending(true)\r\n await props.searchSerialDetails(\r\n props.searchTerm,\r\n props.pageSize,\r\n 0,\r\n orderBy,\r\n true,\r\n props.searchBy,\r\n )\r\n } else if (props.orderBy === orderBy && props.orderAscending === true) {\r\n // Sort descending by orderBy\r\n props.setOrderAscending(false)\r\n await props.searchSerialDetails(\r\n props.searchTerm,\r\n props.pageSize,\r\n 0,\r\n props.orderBy,\r\n false,\r\n props.searchBy,\r\n )\r\n } else {\r\n // Remove sort\r\n props.setOrderAscending(true)\r\n props.setOrderBy('')\r\n await props.searchSerialDetails(\r\n props.searchTerm,\r\n props.pageSize,\r\n 0,\r\n '',\r\n true,\r\n props.searchBy,\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\nconst mapStateToProps = (state) => {\r\n return {\r\n fields: state.main.fieldDefinitions,\r\n serialDetails: state.serialDetails.serialDetails,\r\n isSerialDetailsLoading: state.serialDetails.isSerialDetailsLoading,\r\n searchTerm: state.serialDetails.searchTerm,\r\n pageSize: state.serialDetails.pageSize,\r\n page: state.serialDetails.page,\r\n totalSerialDetails: state.serialDetails.totalSerialDetails,\r\n orderBy: state.serialDetails.orderBy,\r\n orderAscending: state.serialDetails.orderAscending,\r\n searchBy: state.serialDetails.searchBy,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSerialDetails: (...args) =>\r\n dispatch(ActionCreators.setSerialDetails.apply(null, args)),\r\n setSerialDetailsWithPagination: (...args) =>\r\n dispatch(ActionCreators.setSerialDetailsWithPagination.apply(null, args)),\r\n setSerialDetailsLoading: (...args) =>\r\n dispatch(ActionCreators.setSerialDetailsLoading.apply(null, args)),\r\n setSearchTerm: (...args) =>\r\n dispatch(ActionCreators.setSearchTerm.apply(null, args)),\r\n setPageSize: (...args) =>\r\n dispatch(ActionCreators.setPageSize.apply(null, args)),\r\n setPage: (...args) => dispatch(ActionCreators.setPage.apply(null, args)),\r\n setOrderBy: (...args) =>\r\n dispatch(ActionCreators.setOrderBy.apply(null, args)),\r\n setOrderAscending: (...args) =>\r\n dispatch(ActionCreators.setOrderAscending.apply(null, args)),\r\n cleanUp: (...args) => dispatch(ActionCreators.cleanUp.apply(null, args)),\r\n setFieldDefinitions: (...args) =>\r\n dispatch(MainActionCreators.setFieldDefinitions.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n searchSerialDetails: async (...args) =>\r\n dispatch(await ThunkActionCreators.searchSerialDetails.apply(null, args)),\r\n setSearchBy: (...args) =>\r\n dispatch(ActionCreators.setSearchBy.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SerialDetails)\r\n","import React from 'react'\r\nimport { TextField } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n multilineTextField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 600,\r\n },\r\n}))\r\n\r\nfunction StringInput(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = (event) => {\r\n props.handleChange({ stringValue: event.target.value })\r\n }\r\n\r\n const onBlur = (event) => {\r\n props.onBlurCallBack && props.onBlurCallBack(event.target.value)\r\n }\r\n\r\n var label = props.field.displayName.concat(props.field.isRequired ? '*' : '')\r\n if (props.multiline) {\r\n return (\r\n \r\n )\r\n }\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default StringInput\r\n","import React, { useState } from 'react'\r\nimport DateFnsUtils from '@date-io/date-fns'\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDatePicker,\r\n} from '@material-ui/pickers'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n textField: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction StringInput(props) {\r\n const [isOpen, setIsOpen] = useState(false)\r\n const classes = useStyles()\r\n\r\n const handleDateChange = (date) => {\r\n props.handleChange({ dateValue: date })\r\n setIsOpen(false)\r\n }\r\n\r\n var label = props.field.displayName.concat(props.field.isRequired ? '*' : '')\r\n return (\r\n \r\n {\r\n setIsOpen(true)\r\n }}\r\n onClose={() => {\r\n setIsOpen(false)\r\n }}\r\n id={props.field.id.toString()}\r\n error={\r\n props.field.isDirty &&\r\n props.field.isRequired &&\r\n ((props.value && !props.value.dateValue) || !props.value)\r\n }\r\n className={classes.textField}\r\n variant='inline'\r\n format='MM/dd/yyyy'\r\n label={label}\r\n value={props.value ? props.value.dateValue : null}\r\n onChange={handleDateChange}\r\n KeyboardButtonProps={{ 'aria-label': 'change date' }}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default StringInput\r\n","import React, { useMemo } from 'react'\r\nimport { TextField } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction AutoCompleteInput(props) {\r\n const classes = useStyles()\r\n\r\n var label = props.field.displayName.concat(props.field.isRequired ? '*' : '')\r\n\r\n var isOptionInvalid =\r\n (props.value &&\r\n !props.field.options.map((x) => x.id).includes(props.value.optionId)) ||\r\n !props.value\r\n\r\n const selectedValue = useMemo(() => {\r\n if (!props.value || !props.value.optionId) return undefined\r\n return props.field.options.find((s) => s.id === props.value.optionId)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.field.options, props.value && props.value.optionId])\r\n\r\n return (\r\n option.displayName}\r\n clearOnEscape\r\n style={{ height: '64px' }}\r\n onChange={(ev, value) => {\r\n props.handleChange({ optionId: value && value.id ? value.id : '' })\r\n props.onBlurCallBack &&\r\n props.onBlurCallBack(value && value.id ? value.id : '')\r\n }}\r\n value={selectedValue}\r\n key={selectedValue && selectedValue.id}\r\n blurOnSelect\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n )\r\n}\r\n\r\nexport default AutoCompleteInput\r\n","import React from 'react'\r\nimport { Button, Box } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload'\r\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload'\r\nimport DeleteIcon from '@material-ui/icons/Delete'\r\nimport CoreService from '../../Services/CoreService'\r\nimport FileService from '../../Services/FileService'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n flexDirection: 'column',\r\n display: 'flex',\r\n },\r\n label: {\r\n fontSize: '0.75rem',\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n fontWeight: 500,\r\n lineHeight: 1,\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n },\r\n buttons: {\r\n flexDirection: 'row',\r\n display: 'flex',\r\n paddingTop: theme.spacing(1),\r\n },\r\n buttonLeft: {\r\n width: 120,\r\n },\r\n buttonRight: {\r\n width: 77,\r\n marginLeft: theme.spacing(1),\r\n },\r\n download: {\r\n width: 250,\r\n paddingTop: theme.spacing(1),\r\n },\r\n}))\r\n\r\nfunction FileInput(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = async (event) => {\r\n var extension = event.target.files[0].name.substr(\r\n event.target.files[0].name.lastIndexOf('.'),\r\n )\r\n var httpResponse = await CoreService.UploadFile(event.target.files[0])\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n props.handleChange({\r\n fileId: response.id,\r\n fileGuid: response.guid,\r\n fileExtension: extension,\r\n })\r\n } else {\r\n var error = await httpResponse.text()\r\n console.error(error)\r\n }\r\n }\r\n\r\n const removeFile = () => {\r\n props.handleChange({ fileId: null, fileGuid: null })\r\n }\r\n\r\n var label = props.field.displayName.concat(props.field.isRequired ? '*' : '')\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.value && props.value.fileId ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default FileInput\r\n","import React from 'react'\r\nimport { Box } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport StringInput from './StringInput'\r\nimport DateInput from './DateInput'\r\nimport AutoCompleteInput from './AutoCompleteInput'\r\nimport FileInput from './FileInput'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n box: {\r\n width: 300,\r\n paddingRight: theme.spacing(1),\r\n paddingLeft: theme.spacing(1),\r\n },\r\n}))\r\n\r\nfunction Input(props) {\r\n const classes = useStyles()\r\n var field = null\r\n\r\n switch (props.field.type) {\r\n case 1:\r\n field = \r\n break\r\n case 2:\r\n field = \r\n break\r\n case 3:\r\n field = \r\n break\r\n case 4:\r\n field = \r\n break\r\n default:\r\n field = props.field.displayName\r\n break\r\n }\r\n return {field}\r\n}\r\n\r\nexport default Input\r\n","import Config from '../Config'\r\nimport * as ActionCreators from '../Reducers/SerialDetail/serialDetail'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport CoreService from '../Services/CoreService'\r\n\r\nexport async function getSerialDetailWithStaticFields(id) {\r\n return async (dispatch, getState) => {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n var state = getState()\r\n var httpResponse = await CoreService.GetSerialDetail(id, state.auth)\r\n if (httpResponse.ok) {\r\n var serialDetail = await httpResponse.json()\r\n serialDetail.fields.forEach((field) => {\r\n if (field.dateValue) field.dateValue = new Date(field.dateValue)\r\n })\r\n const fieldsHttpResponse = await CoreService.GetStaticFieldDefinitions(\r\n serialDetail.customer,\r\n )\r\n if (fieldsHttpResponse.ok) {\r\n const fieldsResponse = await fieldsHttpResponse.json()\r\n var staticFields = fieldsResponse.map((x) => ({ ...x, isDirty: false }))\r\n dispatch(\r\n ActionCreators.setSerialDetailWithFields(serialDetail, staticFields),\r\n )\r\n }\r\n } else {\r\n var error = httpResponse.text()\r\n console.log(error)\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n\r\nexport async function getStaticFields(serialDetail) {\r\n return async (dispatch, getState) => {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n if (serialDetail && serialDetail.customer) {\r\n const fieldsHttpResponse = await CoreService.GetStaticFieldDefinitions(\r\n serialDetail.customer,\r\n )\r\n if (fieldsHttpResponse.ok) {\r\n const fieldsResponse = await fieldsHttpResponse.json()\r\n var staticFields = fieldsResponse.map((x) => ({ ...x, isDirty: false }))\r\n dispatch(\r\n ActionCreators.setSerialDetailWithFields(serialDetail, staticFields),\r\n )\r\n }\r\n } else {\r\n dispatch(MainActionCreators.setPath('/serialDetails'))\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n\r\nexport async function createSerialDetail() {\r\n return async (dispatch, getState) => {\r\n var state = getState()\r\n\r\n dispatch(ActionCreators.setSerialDetailLoading(true))\r\n var errors = validateForm(dispatch, state)\r\n if (errors.length === 0) {\r\n var httpResponse = await CoreService.CreateSerialDetail(\r\n state.serialDetail.serialDetail,\r\n )\r\n if (httpResponse.ok) {\r\n dispatch(ActionCreators.setSerialDetailLoading(false))\r\n dispatch(MainActionCreators.setPath('/serialDetails'))\r\n return\r\n } else if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n } else {\r\n errors = [Config.genericError]\r\n }\r\n }\r\n dispatch(ActionCreators.setSerialDetailLoading(false))\r\n dispatch(ActionCreators.setErrorModalOpen(errors, true))\r\n }\r\n}\r\n\r\nexport async function updateSerialDetail() {\r\n return async (dispatch, getState) => {\r\n var state = getState()\r\n dispatch(ActionCreators.setSerialDetailLoading(true))\r\n var serialDetail = state.serialDetail.serialDetail\r\n var errors = validateForm(dispatch, state)\r\n if (errors.length === 0) {\r\n var httpResponse = await CoreService.UpdateSerialDetail(serialDetail)\r\n if (httpResponse.ok) {\r\n dispatch(ActionCreators.setSerialDetailLoading(false))\r\n dispatch(MainActionCreators.setPath('/serialDetails'))\r\n return\r\n } else if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n } else {\r\n errors = [Config.genericError]\r\n }\r\n }\r\n dispatch(ActionCreators.setErrorModalOpen(errors, true))\r\n dispatch(ActionCreators.setSerialDetailLoading(false))\r\n }\r\n}\r\n\r\nconst validateForm = (dispatch, state) => {\r\n var serialDetail = state.serialDetail.serialDetail\r\n var staticFields = state.serialDetail.staticFields\r\n var fields = state.main.fieldDefinitions.map((x) => ({ ...x, isDirty: true }))\r\n dispatch(MainActionCreators.setFieldDefinitions(fields))\r\n\r\n var errors = []\r\n var staticFieldsCopy = staticFields.map((x) => ({ ...x, isDirty: true }))\r\n dispatch(\r\n ActionCreators.setSerialDetailWithFields(serialDetail, staticFieldsCopy),\r\n )\r\n fields\r\n .filter((x) => x.isRequired)\r\n .forEach((f) => {\r\n var value = serialDetail.fields.filter((x) => x.definitionId === f.id)[0]\r\n if (\r\n !value ||\r\n !(\r\n value.stringValue ||\r\n value.dateValue ||\r\n value.optionId ||\r\n value.fileId\r\n )\r\n ) {\r\n errors.push(f.displayName + ' is required')\r\n }\r\n })\r\n staticFields\r\n .filter((x) => x.isRequired)\r\n .forEach((f) => {\r\n var value = serialDetail[f.id]\r\n if (f.options) {\r\n if (!f.options.map((x) => x.id).includes(value)) {\r\n errors.push(f.displayName + ' is required')\r\n }\r\n } else {\r\n if (!value) {\r\n errors.push(f.displayName + ' is required')\r\n }\r\n }\r\n })\r\n return errors\r\n}\r\n\r\nexport async function deleteSerialDetail() {\r\n return async (dispatch, getState) => {\r\n var serialDetail = getState().serialDetail.serialDetail\r\n dispatch(ActionCreators.setDeleteModalLoading(true))\r\n var httpResponse = await CoreService.DeleteSerialDetail(serialDetail.id)\r\n if (httpResponse.ok) {\r\n dispatch(ActionCreators.setDeleteModalOpen(false))\r\n dispatch(ActionCreators.setDeleteModalLoading(false))\r\n dispatch(MainActionCreators.setPath('/serialDetails'))\r\n } else {\r\n var errors = [Config.genericError]\r\n dispatch(ActionCreators.setErrorModalOpen(errors, true))\r\n }\r\n }\r\n}\r\n\r\nexport async function getSerialDetailLog(\r\n itemId,\r\n serialNumber,\r\n isMainLoadingType = true,\r\n) {\r\n return async (dispatch) => {\r\n let errors = []\r\n\r\n if (isMainLoadingType) {\r\n dispatch(ActionCreators.setSerialDetailLogLoading(true))\r\n } else {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n }\r\n\r\n dispatch(ActionCreators.setSerialDetailLog(null))\r\n\r\n var httpResponse = await CoreService.GetSerialDetailLog(\r\n itemId,\r\n serialNumber,\r\n )\r\n\r\n if (httpResponse.ok) {\r\n var serialDetailLog = await httpResponse.json()\r\n if (!serialDetailLog.valid) {\r\n errors = [Config.notValidLogIdError]\r\n }\r\n dispatch(\r\n ActionCreators.setSerialDetailLog({\r\n ...(serialDetailLog || {}),\r\n autoRedirect: isMainLoadingType,\r\n previousRequest: {\r\n itemId,\r\n serialNumber,\r\n },\r\n }),\r\n )\r\n } else if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n } else {\r\n errors = [Config.genericError]\r\n }\r\n\r\n if (errors.length && isMainLoadingType) {\r\n dispatch(ActionCreators.setErrorModalOpen(errors, true))\r\n }\r\n\r\n if (isMainLoadingType) {\r\n dispatch(ActionCreators.setSerialDetailLogLoading(false))\r\n } else {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Modal, Button } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n border: '2px solid red',\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n modalAction: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n}))\r\n\r\nfunction ErrorModal(props) {\r\n const classes = useStyles()\r\n\r\n const handleModalChange = (change) => {\r\n props.onModalChange(false)\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n {props.errors.map((x, i) => (\r\n
\r\n {x}\r\n
\r\n ))}\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ErrorModal\r\n","import React from 'react'\r\nimport { Button, Box } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n actions: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n alignItems: 'top',\r\n },\r\n actionButton: {\r\n height: '36px',\r\n },\r\n}))\r\n\r\nfunction Actions(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n
\r\n {props.isLoading ? (\r\n \r\n ) : (\r\n \r\n \r\n {props.primaryLabel || 'Save'}\r\n \r\n \r\n {props.serialDetail && props.serialDetail.id\r\n ? 'Delete'\r\n : 'Cancel'}\r\n \r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Actions\r\n","import React, { useState, useEffect, useCallback } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Paper, Grid } from '@material-ui/core'\r\nimport Input from './Inputs/Input'\r\nimport FieldsJson from './Inputs/json/un-assigned-serial-fields.json'\r\nimport * as ThunkActionCreators from '../Thunks/ServiceTrackerThunk'\r\nimport * as SerialDetailThunk from '../Thunks/SerialDetailThunk'\r\nimport * as SerialDetailActionCreators from '../Reducers/SerialDetail/serialDetail'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/SerialDetail/serialDetail'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport ErrorModal from './ErrorModal'\r\nimport ActionButtons from './Actions'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formContainer: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n },\r\n}))\r\n\r\nconst remoteValidationKeys = ['item', 'serialNumber']\r\n\r\nfunction NewUnAssignedSerialDetail(props) {\r\n const styles = useStyles()\r\n const [details, setDetails] = useState({})\r\n const [fields, setFields] = useState([...FieldsJson])\r\n const [showError, setShowError] = useState(false)\r\n const [errorList, setErrorList] = useState([])\r\n\r\n useEffect(() => {\r\n props.setSerialDetailLog(null)\r\n props.getCustomers()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n useEffect(() => {\r\n const allowRedirect =\r\n props.serialDetailLog &&\r\n props.serialDetailLog.valid &&\r\n props.serialDetailLog.autoRedirect\r\n\r\n if (allowRedirect) {\r\n props.setSerialDetail(getFlattenDetail(props.serialDetailLog.maxLogId))\r\n props.setPath('/serialDetails/new')\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.serialDetailLog, details])\r\n\r\n useEffect(() => {\r\n setFields((prev) =>\r\n [...(prev || [])].map((f) => ({\r\n ...f,\r\n options:\r\n f.key === 'customer'\r\n ? props.customers.map((s) => ({\r\n ...s,\r\n displayName: s.name,\r\n }))\r\n : f.options,\r\n })),\r\n )\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.customers])\r\n\r\n const getValueFromField = (entity) => {\r\n const field = details[entity.key]\r\n let value\r\n switch (entity.type) {\r\n case 1:\r\n value = field && field.stringValue\r\n break\r\n case 2:\r\n value = field && field.dateValue\r\n break\r\n case 3:\r\n value = field && field.optionId\r\n break\r\n default:\r\n value = undefined\r\n break\r\n }\r\n return value\r\n }\r\n\r\n const forceDirtyFields = () => {\r\n setFields((prev) =>\r\n [...(prev || [])].map((f) => ({\r\n ...f,\r\n isDirty: f.isRequired ? !getValueFromField(f) : undefined,\r\n })),\r\n )\r\n }\r\n\r\n const getFlattenDetail = (logId) => {\r\n const flatten = {}\r\n\r\n ;[...(fields || [])].forEach((f) => {\r\n const value = getValueFromField(f)\r\n flatten[f.key] = value\r\n })\r\n\r\n return { ...flatten, fields: [], logId }\r\n }\r\n\r\n const handleChange = useCallback(\r\n (definition) => (updatedValue) => {\r\n setDetails((prev) => ({\r\n ...(prev || {}),\r\n [definition.key]: updatedValue,\r\n }))\r\n setFields((prev) =>\r\n [...(prev || [])].map((f) => ({\r\n ...f,\r\n isDirty: definition.id === f.id || f.isDirty,\r\n })),\r\n )\r\n },\r\n [],\r\n )\r\n\r\n const onBlur = useCallback(\r\n (definition) => (value) => {\r\n if (remoteValidationKeys.includes(definition.key)) {\r\n const stateItem = details.item && details.item.stringValue\r\n const stateSerialNumber =\r\n details.serialNumber && details.serialNumber.stringValue\r\n\r\n const item = definition.key === 'item' ? value : stateItem\r\n const serialNumber =\r\n definition.key === 'serialNumber' ? value : stateSerialNumber\r\n\r\n const lastItem =\r\n props.serialDetailLog && props.serialDetailLog.previousRequest.itemId\r\n\r\n const lastSerialDetail =\r\n props.serialDetailLog &&\r\n props.serialDetailLog.previousRequest.serialNumber\r\n\r\n if (\r\n item &&\r\n serialNumber &&\r\n (item !== lastItem || serialNumber !== lastSerialDetail)\r\n ) {\r\n props.getSerialDetailLog(item, serialNumber, false)\r\n }\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [details, props.serialDetailLog],\r\n )\r\n\r\n const isInvalidateRemoteField = useCallback(\r\n (definition) => {\r\n if (remoteValidationKeys.includes(definition.key)) {\r\n const showCustomFieldsErrors =\r\n props.serialDetailLog && props.serialDetailLog.valid === false\r\n\r\n return showCustomFieldsErrors\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.serialDetailLog],\r\n )\r\n\r\n const validateForm = useCallback(\r\n (fields) => {\r\n const errors = []\r\n\r\n fields.forEach((s) => {\r\n if (s.isRequired) {\r\n const value = getValueFromField(s)\r\n if (!value) {\r\n errors.push(`${s.displayName} is required.`)\r\n }\r\n }\r\n })\r\n\r\n const isValidated = !errors.length\r\n\r\n if (!isValidated) {\r\n forceDirtyFields()\r\n }\r\n\r\n return {\r\n isValidated,\r\n errors,\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [details],\r\n )\r\n\r\n const resetErrorState = () => {\r\n setErrorList([])\r\n setShowError(false)\r\n }\r\n\r\n const fetchSerialDetailLog = async () => {\r\n const serialNumber = details.serialNumber.stringValue\r\n const itemId = details.item.stringValue\r\n await props.getSerialDetailLog(itemId, serialNumber)\r\n }\r\n\r\n const onNextClick = () => {\r\n resetErrorState()\r\n\r\n const { isValidated, errors } = validateForm(fields)\r\n\r\n const isRemoteValidated =\r\n props.serialDetailLog &&\r\n props.serialDetailLog.valid &&\r\n props.serialDetailLog.autoRedirect === false &&\r\n props.serialDetailLog.maxLogId\r\n\r\n if (isValidated) {\r\n if (isRemoteValidated) {\r\n props.setSerialDetail(getFlattenDetail(props.serialDetailLog.maxLogId))\r\n props.setPath('/serialDetails/new')\r\n } else {\r\n fetchSerialDetailLog()\r\n }\r\n } else {\r\n setErrorList([...errors])\r\n setShowError(true)\r\n }\r\n }\r\n\r\n const handleErrorModalChange = (change) => {\r\n props.setErrorModalOpen([], change)\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {fields.map((field) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n {\r\n props.history.goBack()\r\n }}\r\n primaryLabel='Next'\r\n secondaryLabel='Cancel'\r\n isLoading={props.serialDetailLogLoading}\r\n />\r\n {\r\n setShowError(false)\r\n }}\r\n errors={errorList}\r\n />\r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n return {\r\n customers: state.serviceTracker.customers,\r\n serialDetailLogLoading: state.serialDetail.serialDetailLogLoading,\r\n errorList: state.serialDetail.errorList,\r\n errorModalOpen: state.serialDetail.errorModalOpen,\r\n serialDetailLog: state.serialDetail.serialDetailLog,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n getCustomers: async (...args) =>\r\n dispatch(await ThunkActionCreators.getCustomers.apply(null, args)),\r\n getSerialDetailLog: async (...args) =>\r\n dispatch(await SerialDetailThunk.getSerialDetailLog.apply(null, args)),\r\n setSerialDetail: (...args) =>\r\n dispatch(SerialDetailActionCreators.setSerialDetail.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n setErrorModalOpen: (...args) =>\r\n dispatch(ActionCreators.setErrorModalOpen.apply(null, args)),\r\n setSerialDetailLog: (...args) =>\r\n dispatch(ActionCreators.setSerialDetailLog.apply(null, args)),\r\n})\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(NewUnAssignedSerialDetail),\r\n)\r\n","import React from 'react'\r\nimport { Button, Box } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n actions: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n alignItems: 'top',\r\n },\r\n actionButton: {\r\n height: '36px',\r\n },\r\n}))\r\n\r\nfunction ActionButtons(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n
\r\n {props.isLoading ? (\r\n \r\n ) : (\r\n \r\n \r\n {props.primaryLabel}\r\n \r\n {props.onTertiary && props.tertiaryLabel ? (\r\n \r\n ) : null}\r\n {props.secondaryLabel ? (\r\n \r\n {props.secondaryLabel}\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 ActionButtons\r\n","import React from 'react'\r\nimport { Paper } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Table, TableBody, TableCell, TableRow } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n },\r\n paper: {\r\n padding: 0,\r\n },\r\n white: {\r\n border: '0px solid white',\r\n backgroundColor: 'inherit',\r\n },\r\n gray: {\r\n border: '1px solid #CCC',\r\n backgroundColor: '#CCC',\r\n },\r\n}))\r\n\r\nfunction CoreData(props) {\r\n const classes = useStyles()\r\n\r\n const buildData = (label, value) => ({ label, value })\r\n var data = [\r\n buildData('Serial Number', props.serialDetail.serialNumber),\r\n buildData('Customer ID', props.serialDetail.customer),\r\n buildData('Item ID', props.serialDetail.item),\r\n buildData('Invoice Number', props.serialDetail.invoiceNumber),\r\n buildData('Order Number', props.serialDetail.soNumber),\r\n buildData(\r\n 'Invoice Date',\r\n new Date(props.serialDetail.invoiceDate).toLocaleString(),\r\n ),\r\n buildData('Customer PO', props.serialDetail.customerPo),\r\n ]\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {data.map((d, i) => (\r\n \r\n \r\n {d.label}\r\n \r\n \r\n {d.value}\r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default CoreData\r\n","import React from 'react'\r\nimport { Grid } from '@material-ui/core'\r\nimport Input from '../Inputs/Input'\r\n\r\nfunction StaticSelectField(props) {\r\n const handleChange = (definition) => (updatedValue) =>\r\n props.onChange(definition, updatedValue)\r\n\r\n var field = props.staticFields.filter((x) => x.id === props.definitionId)[0]\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default StaticSelectField\r\n","import React from 'react'\r\nimport { Paper, Grid } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport StaticSelectField from './Components/StaticSelectField'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formContainer: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n },\r\n}))\r\n\r\nfunction SiteAndRegionSelects(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = (definition, updatedValue) => {\r\n var serialDetailCopy = { ...props.serialDetail }\r\n serialDetailCopy[definition.id] = updatedValue.optionId\r\n props.onUpdateSerialDetail(serialDetailCopy, definition)\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\nexport default SiteAndRegionSelects\r\n","import React from 'react'\r\nimport { Grid, Paper } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Input from './Inputs/Input'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formContainer: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n },\r\n}))\r\n\r\nfunction DynamicFields(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = (definition) => (updatedValue) => {\r\n var serialDetailCopy = { ...props.serialDetail }\r\n var fieldValue = serialDetailCopy.fields.filter(\r\n (x) => x.definitionId === definition.id,\r\n )[0]\r\n if (!fieldValue) {\r\n fieldValue = {\r\n definitionId: definition.id,\r\n stringValue: null,\r\n dateValue: null,\r\n optionId: null,\r\n fileId: null,\r\n fileGuid: null,\r\n }\r\n serialDetailCopy.fields.push(fieldValue)\r\n }\r\n var toRemove = serialDetailCopy.fields.filter(\r\n (x) => x.definitionId === definition.id,\r\n )[0]\r\n var index = serialDetailCopy.fields.indexOf(toRemove)\r\n serialDetailCopy.fields.splice(index, 1)\r\n fieldValue = { ...fieldValue, ...updatedValue }\r\n serialDetailCopy.fields.push(fieldValue)\r\n props.onUpdateSerialDetail(serialDetailCopy, definition)\r\n }\r\n\r\n return (\r\n \r\n \r\n {props.fields.map((field, i) => {\r\n if (props.hideFileUpload && field.type === 4) return <>\r\n return (\r\n \r\n x.definitionId === field.id,\r\n )[0]\r\n }\r\n handleChange={handleChange(field)}\r\n />\r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default DynamicFields\r\n","import React from 'react'\r\nimport { Grid } from '@material-ui/core'\r\nimport Input from '../Inputs/Input'\r\n\r\nfunction StaticStringField(props) {\r\n const handleChange = (definition) => (updatedValue) => {\r\n props.onChange(definition, updatedValue)\r\n }\r\n\r\n var field = props.staticFields.filter((x) => x.id === props.definitionId)[0]\r\n if (props.multiline) {\r\n return (\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\nexport default StaticStringField\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Grid, Box, Paper } from '@material-ui/core'\r\nimport StaticStringField from './Components/StaticStringField'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formContainer: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n },\r\n replacementDescription: {\r\n paddingTop: theme.spacing(1),\r\n paddingLeft: theme.spacing(2),\r\n fontWeight: 700,\r\n },\r\n}))\r\n\r\nfunction HoseReplacementDetails(props) {\r\n const classes = useStyles()\r\n const handleStaticStringChange = (definition, updatedValue) => {\r\n var serialDetailCopy = { ...props.serialDetail }\r\n serialDetailCopy[definition.id] = updatedValue.stringValue\r\n props.onUpdateSerialDetail(serialDetailCopy, definition)\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n If we warranty a hose, the failed hose needs to be decommissioned.\r\n
\r\n
\r\n The replacement hose serial number and failure details should be\r\n recorded here.\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default HoseReplacementDetails\r\n","import React from 'react'\r\nimport { Modal } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport ActionButtons from '../Components/ActionButtons'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n border: '2px solid red',\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n modalAction: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n}))\r\n\r\nfunction DeleteModal(props) {\r\n const classes = useStyles()\r\n\r\n const closeModal = (change) => {\r\n props.onModalChange(false)\r\n }\r\n\r\n return (\r\n \r\n
\r\n

Are you sure you want to delete this serial detail

\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default DeleteModal\r\n","import React, { useEffect } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport * as ActionCreators from '../Reducers/SerialDetail/serialDetail'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport * as ThunkActionCreators from '../Thunks/SerialDetailThunk'\r\nimport ActionButtons from '../Components/ActionButtons'\r\nimport CoreData from './CoreData'\r\nimport SiteAndRegionSelects from './SiteAndRegionSelects'\r\nimport DynamicFields from './DynamicFields'\r\nimport HoseReplacementDetails from './HoseReplacementDetails'\r\nimport ErrorModal from './ErrorModal'\r\nimport DeleteModal from './DeleteModal'\r\nimport AuthService from '../Services/AuthService'\r\n\r\nfunction SerialDetail(props) {\r\n async function fetchData() {\r\n if (props.match.params.id !== 'new') {\r\n await props.getSerialDetailWithStaticFields(props.match.params.id)\r\n } else {\r\n await props.getStaticFields(props.serialDetail)\r\n }\r\n }\r\n\r\n useEffect(\r\n () => {\r\n fetchData()\r\n return () => {\r\n props.setSerialDetail(null, [])\r\n if (props.fields && props.fields.length) {\r\n var fields = props.fields.map((x) => ({ ...x, isDirty: false }))\r\n props.setFieldDefinitions(fields)\r\n }\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n )\r\n\r\n const handleErrorModalChange = (change) => {\r\n props.setErrorModalOpen([], change)\r\n }\r\n\r\n const updateSerialDetailState = (serialDetail, definition) => {\r\n var fieldsCopy = props.fields.concat()\r\n var dynamicDefinition = fieldsCopy.filter((x) => x.id === definition.id)[0]\r\n if (dynamicDefinition) {\r\n props.setSerialDetail(serialDetail)\r\n var index = fieldsCopy.indexOf(dynamicDefinition)\r\n var fieldToUpdate = { ...definition, isDirty: true }\r\n fieldsCopy[index] = fieldToUpdate\r\n props.setFieldDefinitions(fieldsCopy)\r\n } else {\r\n var staticFieldsCopy = props.staticFields.concat()\r\n var staticDefinition = staticFieldsCopy.filter(\r\n (x) => x.id === definition.id,\r\n )[0]\r\n var staticIndex = staticFieldsCopy.indexOf(staticDefinition)\r\n var staticFieldToUpdate = { ...staticDefinition, isDirty: true }\r\n staticFieldsCopy[staticIndex] = staticFieldToUpdate\r\n props.setSerialDetailWithFields(serialDetail, staticFieldsCopy)\r\n }\r\n }\r\n\r\n if (props.serialDetail && props.staticFields.length > 0) {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {props.serialDetail.id ? (\r\n props.setDeleteModalOpen(true)}\r\n primaryLabel='Save'\r\n secondaryLabel={\r\n AuthService.IsAtLeast('AustinAdmin') ? 'Delete' : undefined\r\n }\r\n isLoading={props.serialDetailLoading}\r\n />\r\n ) : (\r\n props.setPath('/unassignedSerialsDetails')}\r\n primaryLabel='Save'\r\n secondaryLabel='Cancel'\r\n isLoading={props.serialDetailLoading}\r\n />\r\n )}\r\n \r\n \r\n
\r\n )\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n return {\r\n staticFields: state.serialDetail.staticFields,\r\n serialDetail: state.serialDetail.serialDetail,\r\n errorList: state.serialDetail.errorList,\r\n errorModalOpen: state.serialDetail.errorModalOpen,\r\n deleteModalOpen: state.serialDetail.deleteModalOpen,\r\n deleteModalLoading: state.serialDetail.deleteModalLoading,\r\n serialDetailLoading: state.serialDetail.serialDetailLoading,\r\n fields: state.main.fieldDefinitions,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSerialDetail: (...args) =>\r\n dispatch(ActionCreators.setSerialDetail.apply(null, args)),\r\n setSerialDetailWithFields: (...args) =>\r\n dispatch(ActionCreators.setSerialDetailWithFields.apply(null, args)),\r\n setErrorModalOpen: (...args) =>\r\n dispatch(ActionCreators.setErrorModalOpen.apply(null, args)),\r\n setDeleteModalOpen: (...args) =>\r\n dispatch(ActionCreators.setDeleteModalOpen.apply(null, args)),\r\n setFieldDefinitions: (...args) =>\r\n dispatch(MainActionCreators.setFieldDefinitions.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n getSerialDetailWithStaticFields: async (...args) =>\r\n dispatch(\r\n await ThunkActionCreators.getSerialDetailWithStaticFields.apply(\r\n null,\r\n args,\r\n ),\r\n ),\r\n getStaticFields: async (...args) =>\r\n dispatch(await ThunkActionCreators.getStaticFields.apply(null, args)),\r\n updateSerialDetail: async (...args) =>\r\n dispatch(await ThunkActionCreators.updateSerialDetail.apply(null, args)),\r\n createSerialDetail: async (...args) =>\r\n dispatch(await ThunkActionCreators.createSerialDetail.apply(null, args)),\r\n deleteSerialDetail: async (...args) =>\r\n dispatch(await ThunkActionCreators.deleteSerialDetail.apply(null, args)),\r\n})\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(SerialDetail),\r\n)\r\n","import React from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport {\r\n Fab,\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n TableFooter,\r\n TablePagination,\r\n} from '@material-ui/core'\r\nimport EditIcon from '@material-ui/icons/Edit'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n minWidth: 650,\r\n },\r\n}))\r\n\r\nfunction DataGrid(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Name\r\n Customer ID\r\n \r\n \r\n \r\n \r\n {props.customers.map((customer, i) => (\r\n \r\n {customer.id}\r\n {customer.name}\r\n \r\n props.onSetPath('/customers/' + customer.id)}\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.children}
\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(DataGrid)\r\n","import React, { useEffect, useMemo } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/Customers/customers'\r\nimport CoreService from '../Services/CoreService'\r\nimport DataGrid from './DataGrid'\r\nimport GridSpinner from '../Components/GridSpinner'\r\n\r\nconst sleep = (m) => new Promise((r) => setTimeout(r, m))\r\n\r\nfunction Customers(props) {\r\n const getData = async (pageSize, page) => {\r\n props.setCustomersLoading(true)\r\n var httpResponse = await CoreService.GetCustomers(pageSize, page)\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n props.setCustomersWithPagination({\r\n items: response,\r\n totalCount: response.length,\r\n })\r\n } else {\r\n httpResponse.text().then((x) => console.log(x))\r\n }\r\n props.setCustomersLoading(false)\r\n }\r\n\r\n useEffect(\r\n () => {\r\n getData(props.pageSize, props.page)\r\n return () => props.cleanUp()\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n )\r\n\r\n useEffect(() => {\r\n if (props.customers && props.customers.length) {\r\n mimicPageLoading()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.pageSize, props.page])\r\n\r\n const mimicPageLoading = async () => {\r\n props.setCustomersLoading(true)\r\n await sleep(Math.floor(Math.random() * (600 - 300 + 1)) + 300)\r\n props.setCustomersLoading(false)\r\n }\r\n\r\n const handlePageChange = async (event, newPage) => {\r\n props.setPage(newPage)\r\n }\r\n\r\n const handleRowCountChange = async (event) => {\r\n var pageSize = event.target.value\r\n props.setPage(0)\r\n props.setPageSize(pageSize)\r\n }\r\n\r\n const getManualPaginatedResult = (array, pageSize, pageNo) => {\r\n const startIndex = (pageNo - 1) * pageSize\r\n const endIndex = startIndex + pageSize\r\n return array.slice(startIndex, endIndex)\r\n }\r\n\r\n const filteredCustomers = useMemo(() => {\r\n if (props.isCustomersLoading) return []\r\n return props.customers\r\n ? getManualPaginatedResult(\r\n props.customers,\r\n props.pageSize,\r\n props.page + 1,\r\n )\r\n : []\r\n }, [props.customers, props.pageSize, props.page, props.isCustomersLoading])\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n customers: state.customers.customers,\r\n isCustomersLoading: state.customers.isCustomersLoading,\r\n pageSize: state.customers.pageSize,\r\n page: state.customers.page,\r\n totalCustomers: state.customers.totalCustomers,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setCustomers: (...args) =>\r\n dispatch(ActionCreators.setCustomers.apply(null, args)),\r\n setCustomersWithPagination: (...args) =>\r\n dispatch(ActionCreators.setCustomersWithPagination.apply(null, args)),\r\n setCustomersLoading: (...args) =>\r\n dispatch(ActionCreators.setCustomersLoading.apply(null, args)),\r\n setPageSize: (...args) =>\r\n dispatch(ActionCreators.setPageSize.apply(null, args)),\r\n setPage: (...args) => dispatch(ActionCreators.setPage.apply(null, args)),\r\n cleanUp: (...args) => dispatch(ActionCreators.cleanUp.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Customers)\r\n","import React, { useState, useEffect } from 'react'\r\nimport {\r\n Box,\r\n Modal,\r\n TextField,\r\n FormControl,\r\n FormLabel,\r\n RadioGroup,\r\n FormControlLabel,\r\n Radio,\r\n} from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport FileInput from '../SerialDetail/Inputs/FileInput'\r\nimport ActionButtons from '../Components/ActionButtons'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n radio: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n modalAction: {\r\n marginTop: theme.spacing(2),\r\n },\r\n}))\r\n\r\nfunction CreateSiteModal(props) {\r\n const classes = useStyles()\r\n\r\n const [state, setState] = useState({\r\n nameDirty: false,\r\n statusDirty: false,\r\n })\r\n\r\n useEffect(\r\n () => {\r\n setState({ nameDirty: false, statusDirty: false })\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.open],\r\n )\r\n\r\n const handleNameChange = (event) => {\r\n setState({ nameDirty: true })\r\n props.onSiteNameChange(event.target.value)\r\n }\r\n\r\n const handleStatusChange = (event) => {\r\n setState({ statusDirty: false })\r\n props.onSiteStatusChange(event.target.value)\r\n }\r\n\r\n const handleFileChange = (fileChange) => {\r\n props.onSiteSurveyChange(fileChange)\r\n }\r\n\r\n const primaryAction = () => {\r\n setState({ nameDirty: true, statusDirty: true })\r\n if (props.site.name && props.site.status) {\r\n props.onPrimary()\r\n }\r\n }\r\n\r\n const fileField = {\r\n displayName: 'Site Survey',\r\n isRequired: false,\r\n allowedFileExtensions: ['.pdf'],\r\n allowedFileMimeTypes: ['application/pdf'],\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n Status\r\n \r\n } label='Active' />\r\n } label='Inactive' />\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 CreateSiteModal\r\n","import React from 'react'\r\nimport { Modal } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport ActionButtons from './ActionButtons'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n modalAction: {\r\n marginTop: theme.spacing(3),\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n}))\r\n\r\nfunction DeleteModal(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n
\r\n

{props.title}

\r\n

{props.text}

\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default DeleteModal\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { connect } from 'react-redux'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n Paper,\r\n Box,\r\n Fab,\r\n} from '@material-ui/core'\r\nimport * as ActionCreators from '../Reducers/Customer/customer'\r\nimport CoreService from '../Services/CoreService'\r\nimport FileService from '../Services/FileService'\r\nimport SiteModal from './SiteModal'\r\nimport DeleteModal from '../Components/DeleteModal'\r\nimport DescriptionIcon from '@material-ui/icons/Description'\r\nimport EditIcon from '@material-ui/icons/Edit'\r\nimport AddIcon from '@material-ui/icons/Add'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: theme.spacing(2),\r\n margin: theme.spacing(3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n tableContainer: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n minWidth: 650,\r\n },\r\n fileLink: {\r\n color: 'inherit',\r\n },\r\n fileIcon: {\r\n width: '1.3em',\r\n height: '1.3em',\r\n },\r\n createButtonContainer: {\r\n paddingLeft: 0,\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n paddingTop: theme.spacing(2),\r\n },\r\n}))\r\n\r\nfunction Sites(props) {\r\n const classes = useStyles()\r\n\r\n const handleSiteNameChange = (name) => {\r\n var current = { ...props.currentSite, name }\r\n props.setCurrentSite(current)\r\n }\r\n\r\n const handleSiteStatusChange = (status) => {\r\n var current = { ...props.currentSite, status }\r\n props.setCurrentSite(current)\r\n }\r\n\r\n const handleSiteSurveyChange = (file) => {\r\n var current = { ...props.currentSite }\r\n current.siteSurvey = file\r\n props.setCurrentSite(current)\r\n }\r\n\r\n const showCreateSiteModal = () => {\r\n var site = { name: '', status: '' }\r\n props.setCurrentSite(site)\r\n props.setOpenModal('createSite')\r\n }\r\n\r\n const showEditSiteModal = (site) => {\r\n props.setCurrentSite(site)\r\n props.setOpenModal('editSite')\r\n }\r\n\r\n const createSite = async () => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.CreateCustomerSite(\r\n props.customer.id,\r\n props.currentSite,\r\n )\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n var sites = props.customer.sites.concat()\r\n sites.push(response)\r\n props.setCustomerSites(sites)\r\n props.setOpenModal(null)\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n const updateSite = async () => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.UpdateCustomerSite(\r\n props.customer.id,\r\n props.currentSite,\r\n )\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n var sitesCopy = props.customer.sites.concat()\r\n var oldSite = sitesCopy.filter((x) => x.id === response.id)[0]\r\n var index = sitesCopy.indexOf(oldSite)\r\n sitesCopy[index] = response\r\n props.setCustomerSites(sitesCopy)\r\n props.setOpenModal(null)\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n const attempSiteDeletion = async () => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.AttemptCustomerSiteDeletion(\r\n props.customer.id,\r\n props.currentSite.id,\r\n )\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n if (response.isSuccess) {\r\n var sitesCopy = props.customer.sites.concat()\r\n var siteToDelete = sitesCopy.filter(\r\n (x) => x.id === props.currentSite.id,\r\n )[0]\r\n var index = sitesCopy.indexOf(siteToDelete)\r\n sitesCopy.splice(index, 1)\r\n props.setCustomerSites(sitesCopy)\r\n props.setOpenModal(null)\r\n } else {\r\n props.setUnableToDeleteText(response.result)\r\n props.setOpenModal('unableToDelete')\r\n }\r\n } else {\r\n // TODO: handle error\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n const deleteSite = async (siteId) => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.DeleteCustomerSite(\r\n props.customer.id,\r\n props.currentSite.id,\r\n )\r\n if (httpResponse.ok) {\r\n var siteToDelete = props.customer.sites.filter((x) => x.id === siteId)[0]\r\n var index = props.customer.sites.indexOf(siteToDelete)\r\n var newSites = props.customer.sites.splice(index, 1)\r\n props.setCustomerSites(newSites)\r\n props.setOpenModal(null)\r\n } else {\r\n // TODO: handle error\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n return (\r\n \r\n
Sites
\r\n \r\n \r\n \r\n \r\n Site\r\n Status\r\n Site Survey\r\n \r\n \r\n \r\n \r\n {props.customer.sites.map((site, i) => (\r\n \r\n {site.name}\r\n \r\n {site.status === 1 ? 'Active' : 'Inactive'}\r\n \r\n \r\n {site.siteSurvey ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n showEditSiteModal(site)}>\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.setOpenModal(null)}\r\n onClose={() => props.setOpenModal(null)}\r\n onSiteNameChange={handleSiteNameChange}\r\n onSiteStatusChange={handleSiteStatusChange}\r\n onSiteSurveyChange={handleSiteSurveyChange}\r\n isLoading={props.isModalLoading}\r\n />\r\n props.setOpenModal('deleteSite')}\r\n onTertiary={() => props.setOpenModal(null)}\r\n onClose={() => props.setOpenModal(null)}\r\n onSiteNameChange={handleSiteNameChange}\r\n onSiteStatusChange={handleSiteStatusChange}\r\n onSiteSurveyChange={handleSiteSurveyChange}\r\n isLoading={props.isModalLoading}\r\n />\r\n props.setOpenModal('editSite')}\r\n onClose={() => props.setOpenModal('editSite')}\r\n isLoading={props.isModalLoading}\r\n />\r\n props.setOpenModal('editSite')}\r\n onClose={() => props.setOpenModal('editSite')}\r\n isLoading={props.isModalLoading}\r\n />\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n customer: state.customer.customer,\r\n openModal: state.customer.openModal,\r\n isModalLoading: state.customer.isModalLoading,\r\n currentSite: state.customer.currentSite,\r\n unableToDeleteText: state.customer.unableToDeleteText,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setCustomerSites: (...args) =>\r\n dispatch(ActionCreators.setCustomerSites.apply(null, args)),\r\n setOpenModal: (...args) =>\r\n dispatch(ActionCreators.setOpenModal.apply(null, args)),\r\n setModalLoading: (...args) =>\r\n dispatch(ActionCreators.setModalLoading.apply(null, args)),\r\n setCurrentSite: (...args) =>\r\n dispatch(ActionCreators.setCurrentSite.apply(null, args)),\r\n setUnableToDeleteText: (...args) =>\r\n dispatch(ActionCreators.setUnableToDeleteText.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Sites)\r\n","import React, { useState, useEffect } from 'react'\r\nimport { Box, Modal, TextField } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport ActionButtons from '../Components/ActionButtons'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n modalAction: {\r\n marginTop: theme.spacing(2),\r\n },\r\n}))\r\n\r\nfunction CreateRegionModal(props) {\r\n const classes = useStyles()\r\n\r\n const [state, setState] = useState({\r\n nameDirty: false,\r\n })\r\n\r\n useEffect(\r\n () => {\r\n setState({ nameDirty: false })\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.open],\r\n )\r\n\r\n const handleNameChange = (event) => {\r\n setState({ nameDirty: true })\r\n props.onRegionNameChange(event.target.value)\r\n }\r\n\r\n const primaryAction = () => {\r\n setState({ nameDirty: true })\r\n if (props.region.name) {\r\n props.onPrimary()\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\nexport default CreateRegionModal\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { connect } from 'react-redux'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n Paper,\r\n Box,\r\n Fab,\r\n} from '@material-ui/core'\r\nimport * as ActionCreators from '../Reducers/Customer/customer'\r\nimport CoreService from '../Services/CoreService'\r\nimport RegionModal from './RegionModal'\r\nimport DeleteModal from '../Components/DeleteModal'\r\nimport EditIcon from '@material-ui/icons/Edit'\r\nimport AddIcon from '@material-ui/icons/Add'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: theme.spacing(2),\r\n margin: theme.spacing(3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n tableContainer: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n minWidth: 650,\r\n },\r\n createButtonContainer: {\r\n paddingLeft: 0,\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n paddingTop: theme.spacing(2),\r\n },\r\n fab: {\r\n margin: theme.spacing(1),\r\n },\r\n}))\r\n\r\nfunction Regions(props) {\r\n const classes = useStyles()\r\n\r\n const handleRegionNameChange = (name) => {\r\n var current = { ...props.currentRegion, name }\r\n props.setCurrentRegion(current)\r\n }\r\n\r\n const showCreateRegionModal = () => {\r\n var region = { name: '' }\r\n props.setCurrentRegion(region)\r\n props.setOpenModal('createRegion')\r\n }\r\n\r\n const showEditRegionModal = (region) => {\r\n props.setCurrentRegion(region)\r\n props.setOpenModal('editRegion')\r\n }\r\n\r\n const createRegion = async () => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.CreateCustomerRegion(\r\n props.customer.id,\r\n props.currentRegion,\r\n )\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n var regions = props.customer.regions.concat()\r\n regions.push(response)\r\n props.setCustomerRegions(regions)\r\n props.setOpenModal(null)\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n const updateRegion = async () => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.UpdateCustomerRegion(\r\n props.customer.id,\r\n props.currentRegion,\r\n )\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n var regionsCopy = props.customer.regions.concat()\r\n var oldRegion = regionsCopy.filter((x) => x.id === response.id)[0]\r\n var index = regionsCopy.indexOf(oldRegion)\r\n regionsCopy[index] = response\r\n props.setCustomerRegions(regionsCopy)\r\n props.setOpenModal(null)\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n const attempRegionDeletion = async () => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.AttemptCustomerRegionDeletion(\r\n props.customer.id,\r\n props.currentRegion.id,\r\n )\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n if (response.isSuccess) {\r\n var regionsCopy = props.customer.regions.concat()\r\n var regionToDelete = regionsCopy.filter(\r\n (x) => x.id === props.currentRegion.id,\r\n )[0]\r\n var index = regionsCopy.indexOf(regionToDelete)\r\n regionsCopy.splice(index, 1)\r\n props.setCustomerRegions(regionsCopy)\r\n props.setOpenModal(null)\r\n } else {\r\n props.setUnableToDeleteText(response.result)\r\n props.setOpenModal('unableToDelete')\r\n }\r\n } else {\r\n // TODO: handle error\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n const deleteRegion = async (regionId) => {\r\n props.setModalLoading(true)\r\n var httpResponse = await CoreService.DeleteCustomerRegion(\r\n props.customer.id,\r\n props.currentRegion.id,\r\n )\r\n if (httpResponse.ok) {\r\n var regionToDelete = props.customer.regions.filter(\r\n (x) => x.id === regionId,\r\n )[0]\r\n var index = props.customer.regions.indexOf(regionToDelete)\r\n var newRegions = props.customer.regions.splice(index, 1)\r\n props.setCustomerRegions(newRegions)\r\n props.setOpenModal(null)\r\n } else {\r\n // TODO: handle error\r\n }\r\n props.setModalLoading(false)\r\n }\r\n\r\n return (\r\n \r\n
Regions
\r\n \r\n \r\n \r\n \r\n Region\r\n \r\n \r\n \r\n \r\n {props.customer.regions.map((region, i) => (\r\n \r\n {region.name}\r\n \r\n showEditRegionModal(region)}\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.setOpenModal(null)}\r\n onClose={() => props.setOpenModal(null)}\r\n onRegionNameChange={handleRegionNameChange}\r\n isLoading={props.isModalLoading}\r\n />\r\n props.setOpenModal('deleteRegion')}\r\n onTertiary={() => props.setOpenModal(null)}\r\n onClose={() => props.setOpenModal(null)}\r\n onRegionNameChange={handleRegionNameChange}\r\n isLoading={props.isModalLoading}\r\n />\r\n props.setOpenModal('editRegion')}\r\n onClose={() => props.setOpenModal('editRegion')}\r\n isLoading={props.isModalLoading}\r\n />\r\n props.setOpenModal('editRegion')}\r\n onClose={() => props.setOpenModal('editRegion')}\r\n isLoading={props.isModalLoading}\r\n />\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n customer: state.customer.customer,\r\n openModal: state.customer.openModal,\r\n isModalLoading: state.customer.isModalLoading,\r\n currentRegion: state.customer.currentRegion,\r\n unableToDeleteText: state.customer.unableToDeleteText,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setCustomerRegions: (...args) =>\r\n dispatch(ActionCreators.setCustomerRegions.apply(null, args)),\r\n setOpenModal: (...args) =>\r\n dispatch(ActionCreators.setOpenModal.apply(null, args)),\r\n setModalLoading: (...args) =>\r\n dispatch(ActionCreators.setModalLoading.apply(null, args)),\r\n setCurrentRegion: (...args) =>\r\n dispatch(ActionCreators.setCurrentRegion.apply(null, args)),\r\n setUnableToDeleteText: (...args) =>\r\n dispatch(ActionCreators.setUnableToDeleteText.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Regions)\r\n","import React, { useEffect } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Paper } from '@material-ui/core'\r\nimport * as ActionCreators from '../Reducers/Customer/customer'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport CoreService from '../Services/CoreService'\r\nimport Sites from './Sites'\r\nimport Regions from './Regions'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n section: {\r\n padding: theme.spacing(2),\r\n margin: theme.spacing(3),\r\n },\r\n}))\r\n\r\nfunction Customer(props) {\r\n const classes = useStyles()\r\n\r\n useEffect(\r\n () => {\r\n props.setDisplayLinearProgress(true)\r\n CoreService.GetCustomer(props.match.params.id).then((httpResponse) => {\r\n if (httpResponse.ok) {\r\n httpResponse.json().then((response) => {\r\n props.setCustomer(response)\r\n })\r\n } else {\r\n httpResponse.text().then((x) => console.log(x))\r\n }\r\n props.setDisplayLinearProgress(false)\r\n })\r\n\r\n return () => props.cleanUp()\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n )\r\n\r\n if (props.customer) {\r\n return (\r\n \r\n \r\n

\r\n Customer: {props.customer.id} ({props.customer.name})\r\n

\r\n
\r\n \r\n \r\n
\r\n )\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n customer: state.customer.customer,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setCustomer: (...args) =>\r\n dispatch(ActionCreators.setCustomer.apply(null, args)),\r\n cleanUp: (...args) => dispatch(ActionCreators.cleanUp.apply(null, args)),\r\n setDisplayLinearProgress: (...args) =>\r\n dispatch(MainActionCreators.setDisplayLinearProgress.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Customer)\r\n","import React from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Paper, Fab, Box } from '@material-ui/core'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n TablePagination,\r\n TableFooter,\r\n} from '@material-ui/core'\r\nimport EditIcon from '@material-ui/icons/Edit'\r\nimport AddIcon from '@material-ui/icons/Add'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n minWidth: 650,\r\n },\r\n fileLink: {\r\n color: 'inherit',\r\n },\r\n fileIcon: {\r\n width: '1.3em',\r\n height: '1.3em',\r\n },\r\n createUserAction: {\r\n width: '100',\r\n margin: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n}))\r\n\r\nfunction DataGrid(props) {\r\n const classes = useStyles()\r\n\r\n const renderRole = (roleType) => {\r\n switch (roleType) {\r\n case 1:\r\n return 'Austin Admin'\r\n case 2:\r\n return 'Austin Employee'\r\n case 3:\r\n return 'External User'\r\n case 4:\r\n return 'Austin Service Employee'\r\n case 5:\r\n return 'External Admin'\r\n case 6:\r\n return 'External Data Entry'\r\n default:\r\n return null\r\n }\r\n }\r\n\r\n const createUser = () => {\r\n var user = {\r\n username: '',\r\n email: '',\r\n firstName: '',\r\n lastName: '',\r\n password: '',\r\n confirmPassword: '',\r\n customerRegionAccess: [],\r\n roleType: 3,\r\n }\r\n props.onSetUser(user)\r\n props.onSetPath('/users/new')\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Username\r\n Email\r\n First Name\r\n Last Name\r\n Role\r\n \r\n \r\n \r\n \r\n {props.users.map((user, i) => (\r\n \r\n {user.username}\r\n {user.email}\r\n {user.firstName}\r\n {user.lastName}\r\n {renderRole(user.roleType)}\r\n \r\n props.onSetPath('/users/' + user.id)}\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.children}
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(DataGrid)\r\n","import React, { useEffect } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/Users/users'\r\nimport * as UserActionCreators from '../Reducers/User/user'\r\nimport CoreService from '../Services/CoreService'\r\nimport DataGrid from './DataGrid'\r\nimport GridSpinner from '../Components/GridSpinner'\r\n\r\nfunction Users(props) {\r\n const getData = async (pageSize, page) => {\r\n props.setIsUsersLoading(true)\r\n var httpResponse = await CoreService.GetUsers(pageSize, page)\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n props.setUsersWithPagination(response)\r\n } else {\r\n httpResponse.text().then((x) => console.log(x))\r\n }\r\n props.setIsUsersLoading(false)\r\n }\r\n\r\n useEffect(\r\n () => {\r\n getData(props.pageSize, props.page)\r\n return () => props.setUsers([])\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n )\r\n\r\n const handlePageChange = async (event, newPage) => {\r\n props.setPage(newPage)\r\n await getData(props.pageSize, newPage)\r\n }\r\n\r\n const handleRowCountChange = async (event) => {\r\n var pageSize = event.target.value\r\n props.setPage(0)\r\n props.setPageSize(pageSize)\r\n await getData(pageSize, 0)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n users: state.users.users,\r\n page: state.users.page,\r\n pageSize: state.users.pageSize,\r\n totalUsers: state.users.totalUsers,\r\n isUsersLoading: state.users.isUsersLoading,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setUsers: (...args) => dispatch(ActionCreators.setUsers.apply(null, args)),\r\n setUsersWithPagination: (...args) =>\r\n dispatch(ActionCreators.setUsersWithPagination.apply(null, args)),\r\n setPage: (...args) => dispatch(ActionCreators.setPage.apply(null, args)),\r\n setPageSize: (...args) =>\r\n dispatch(ActionCreators.setPageSize.apply(null, args)),\r\n setIsUsersLoading: (...args) =>\r\n dispatch(ActionCreators.setIsUsersLoading.apply(null, args)),\r\n setUser: (...args) => dispatch(UserActionCreators.setUser.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Users)\r\n","import React from 'react'\r\nimport { fade, makeStyles } from '@material-ui/core/styles'\r\nimport { Box } from '@material-ui/core'\r\nimport { Checkbox, FormControlLabel } from '@material-ui/core'\r\nimport { TreeView, TreeItem } from '@material-ui/lab'\r\nimport AddBoxOutlinedIcon from '@material-ui/icons/AddBoxOutlined'\r\nimport AddBoxIcon from '@material-ui/icons/AddBox'\r\nimport IndeterminateCheckBoxIcon from '@material-ui/icons/IndeterminateCheckBox'\r\nimport IndeterminateCheckBoxOutlinedIcon from '@material-ui/icons/IndeterminateCheckBoxOutlined'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n treeItemContent: {\r\n backgroundColor: 'white !important',\r\n },\r\n group: {\r\n marginLeft: 12,\r\n paddingLeft: 12,\r\n borderLeft: `1px dashed ${fade(theme.palette.text.primary, 0.4)}`,\r\n },\r\n}))\r\n\r\nfunction RegionAccess(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = (regionId, customerId) => (event) => {\r\n props.onUpdateSectedRegion(customerId, regionId, event.target.checked)\r\n }\r\n\r\n var customers = props.access.map((customer) => {\r\n var hasAny = customer.regions.some((x) => x.isSelected)\r\n return (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n expandIcon={\r\n hasAny ? : \r\n }\r\n classes={{ content: classes.treeItemContent, group: classes.group }}\r\n nodeId={customer.id}\r\n label={customer.name}\r\n >\r\n \r\n {customer.regions.map((r) => {\r\n return (\r\n \r\n \r\n }\r\n label={r.name}\r\n />\r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n })\r\n\r\n return {customers}\r\n}\r\n\r\nexport default RegionAccess\r\n","import React from 'react'\r\nimport { Modal, Button } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n border: '2px solid red',\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n modalAction: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n}))\r\n\r\nfunction ErrorModal(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n
\r\n \r\n {props.errors.map((x, i) => (\r\n
\r\n {x}\r\n
\r\n ))}\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ErrorModal\r\n","import React, { useEffect } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Paper, Grid } from '@material-ui/core'\r\nimport {\r\n TextField,\r\n FormControl,\r\n MenuItem,\r\n Select,\r\n InputLabel,\r\n} from '@material-ui/core'\r\nimport Config from '../Config'\r\nimport * as ActionCreators from '../Reducers/User/user'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport ActionButtons from '../Components/ActionButtons'\r\nimport CoreService from '../Services/CoreService'\r\nimport RegionAccess from './RegionAccess'\r\nimport DeleteModal from '../Components/DeleteModal'\r\nimport ErrorModal from '../Components/ErrorModal'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n section: {\r\n padding: theme.spacing(2),\r\n margin: theme.spacing(3),\r\n },\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n formControl: {\r\n marginTop: theme.spacing(3),\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n width: 250,\r\n },\r\n treeItemContent: {\r\n backgroundColor: 'white !important',\r\n },\r\n}))\r\n\r\nfunction User(props) {\r\n const classes = useStyles()\r\n\r\n const fetchData = async () => {\r\n props.setDisplayLinearProgress(true)\r\n if (props.match.params.id !== 'new') {\r\n var httpResponse = await CoreService.GetUser(props.match.params.id)\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n response.password = ''\r\n response.confirmPassword = ''\r\n await setUserWithAccess(response)\r\n } else {\r\n var error = httpResponse.text()\r\n console.log(error)\r\n }\r\n } else {\r\n if (props.user) {\r\n await setUserWithAccess(props.user)\r\n } else {\r\n props.setDisplayLinearProgress(false)\r\n props.setPath('/users')\r\n }\r\n }\r\n }\r\n\r\n useEffect(\r\n () => {\r\n fetchData()\r\n return () => props.setUser(null, null)\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n )\r\n\r\n const setUserWithAccess = async (user) => {\r\n const accessHttpResponse = await CoreService.GetUserCustomerRegionAccess()\r\n if (accessHttpResponse.ok) {\r\n const accessResponse = await accessHttpResponse.json()\r\n accessResponse.forEach((a) => {\r\n var userAccess = user.customerRegionAccess.filter(\r\n (x) => x.id === a.id,\r\n )[0]\r\n if (userAccess) {\r\n var userRegionIds = userAccess.regions.map((x) => x.id)\r\n a.regions = a.regions.map((x) => ({\r\n ...x,\r\n isSelected: userRegionIds.includes(x.id),\r\n }))\r\n } else {\r\n a.regions = a.regions.map((x) => ({ ...x, isSelected: false }))\r\n }\r\n })\r\n props.setDisplayLinearProgress(false)\r\n props.setUserWithAccess(user, accessResponse)\r\n }\r\n }\r\n\r\n const handleChange = (field) => (event) => {\r\n var user = { ...props.user }\r\n var isDirty = { ...props.isDirty }\r\n user[field] = event.target.value\r\n isDirty[field] = true\r\n props.setUser(user, isDirty)\r\n }\r\n\r\n const handleSelectedRegionChange = (regionId, customerId, isSelected) => {\r\n props.updateSelectedRegion(regionId, customerId, isSelected)\r\n }\r\n\r\n const createUser = async () => {\r\n props.setIsUserLoading(true)\r\n var errors = validateModel()\r\n if (errors.length) {\r\n props.setIsErrorModalOpen(true, errors)\r\n } else {\r\n var userModel = buildModel()\r\n var httpResponse = await CoreService.CreateUser(userModel)\r\n if (httpResponse.ok) {\r\n props.setPath('/users')\r\n } else {\r\n if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n props.setIsErrorModalOpen(true, errors)\r\n } else {\r\n props.setIsErrorModalOpen(true, [Config.genericError])\r\n }\r\n }\r\n }\r\n props.setIsUserLoading(false)\r\n }\r\n\r\n const updateUser = async () => {\r\n props.setIsUserLoading(true)\r\n var errors = validateModel()\r\n if (errors.length) {\r\n props.setIsErrorModalOpen(true, errors)\r\n } else {\r\n var userModel = buildModel()\r\n var httpResponse = await CoreService.UpdateUser(userModel)\r\n if (httpResponse.ok) {\r\n props.setPath('/users')\r\n } else {\r\n if (httpResponse.status === 400) {\r\n errors = await httpResponse.json()\r\n props.setIsErrorModalOpen(true, errors)\r\n } else {\r\n props.setIsErrorModalOpen(true, [Config.genericError])\r\n }\r\n }\r\n }\r\n props.setIsUserLoading(false)\r\n }\r\n\r\n const buildModel = () => {\r\n var model = { ...props.user }\r\n if ([3, 5, 6].includes(model.roleType)) {\r\n var customers = props.access.filter((customer) =>\r\n customer.regions.some((region) => region.isSelected),\r\n )\r\n customers.forEach(\r\n (c) => (c.regions = c.regions.filter((x) => x.isSelected)),\r\n )\r\n model.customerRegionAccess = customers\r\n }\r\n return model\r\n }\r\n\r\n var fields = [\r\n { name: 'firstName', displayName: 'First Name', isPassword: false },\r\n { name: 'lastName', displayName: 'Last Name', isPassword: false },\r\n { name: 'email', displayName: 'Email', isPassword: false },\r\n { name: 'username', displayName: 'Username', isPassword: false },\r\n { name: 'password', displayName: 'Password', isPassword: true },\r\n {\r\n name: 'confirmPassword',\r\n displayName: 'Confirm Password',\r\n isPassword: true,\r\n },\r\n ]\r\n\r\n const validateModel = () => {\r\n var errors = []\r\n var isDirty = fields.reduce((map, field) => {\r\n map[field.name] = true\r\n return map\r\n }, {})\r\n props.setUser(props.user, isDirty)\r\n\r\n fields.forEach((field) => {\r\n if (!props.user[field.name] && !field.isPassword) {\r\n errors.push(`${field.displayName} is required.`)\r\n }\r\n })\r\n\r\n if (props.match.params.id === 'new') {\r\n if (props.user.password === '' || props.user.confirmPassword === '') {\r\n errors.push('Password and Confirm Password are required')\r\n } else if (props.user.password !== props.user.confirmPassword) {\r\n errors.push('Password and Confirm Password should match')\r\n }\r\n } else {\r\n if (\r\n (props.user.password !== '' || props.user.confirmPassword !== '') &&\r\n props.user.password !== props.user.confirmPassword\r\n ) {\r\n errors.push('Password and Confirm Password should match')\r\n }\r\n }\r\n\r\n return errors\r\n }\r\n\r\n const deleteUser = async () => {\r\n props.setIsDeleteModalLoading(true)\r\n var httpResponse = await CoreService.DeleteUser(props.user.id)\r\n if (httpResponse.ok) {\r\n props.setIsDeleteModalLoading(false)\r\n props.setIsDeleteModalOpen(false)\r\n props.setPath('/users')\r\n } else {\r\n // TODO Handle error\r\n }\r\n }\r\n\r\n const isPasswordFieldInvalid = (fieldName) => {\r\n var otherPassword =\r\n fieldName === 'password' ? 'confirmPassword' : 'password'\r\n if (props.match.params.id === 'new') {\r\n return (\r\n props.isDirty[fieldName] &&\r\n props.isDirty[otherPassword] &&\r\n (!props.user[fieldName] ||\r\n props.user['password'] !== props.user['confirmPassword'])\r\n )\r\n } else {\r\n return (\r\n props.isDirty[otherPassword] &&\r\n props.user['password'] !== props.user['confirmPassword']\r\n )\r\n }\r\n }\r\n\r\n if (props.user) {\r\n return (\r\n \r\n \r\n

\r\n {props.user.firstName} {props.user.lastName}\r\n

\r\n
\r\n \r\n \r\n {fields.map((f) => {\r\n if (!f.isPassword) {\r\n return (\r\n \r\n \r\n \r\n )\r\n } else {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n })}\r\n \r\n \r\n User Role\r\n \r\n Austin Admin));\r\n Austin Employee));\r\n Austin Service Employee));\r\n External Admin));\r\n External Data Entry));\r\n External User));\r\n \r\n \r\n \r\n \r\n \r\n {[3, 5, 6].includes(props.user.roleType) ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n {props.user.id ? (\r\n props.setIsDeleteModalOpen(true)}\r\n primaryLabel='Save'\r\n secondaryLabel='Delete'\r\n isLoading={props.isUserLoading}\r\n />\r\n ) : (\r\n props.setPath('/users')}\r\n primaryLabel='Save'\r\n secondaryLabel='Cancel'\r\n isLoading={props.isUserLoading}\r\n />\r\n )}\r\n props.setIsDeleteModalOpen(false)}\r\n onSecondary={() => props.setIsDeleteModalOpen(false)}\r\n isLoading={props.isDeleteModalLoading}\r\n />\r\n props.setIsErrorModalOpen(false)}\r\n onButtonClick={() => props.setIsErrorModalOpen(false)}\r\n />\r\n
\r\n )\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n user: state.user.user,\r\n access: state.user.access,\r\n isUserLoading: state.user.isUserLoading,\r\n isDeleteModalOpen: state.user.isDeleteModalOpen,\r\n isDeleteModalLoading: state.user.isDeleteModalLoading,\r\n isErrorModalOpen: state.user.isErrorModalOpen,\r\n errorList: state.user.errorList,\r\n isDirty: state.user.isDirty,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setUser: (...args) => dispatch(ActionCreators.setUser.apply(null, args)),\r\n setUserWithAccess: (...args) =>\r\n dispatch(ActionCreators.setUserWithAccess.apply(null, args)),\r\n setIsDeleteModalOpen: (...args) =>\r\n dispatch(ActionCreators.setIsDeleteModalOpen.apply(null, args)),\r\n setIsDeleteModalLoading: (...args) =>\r\n dispatch(ActionCreators.setIsDeleteModalLoading.apply(null, args)),\r\n setIsErrorModalOpen: (...args) =>\r\n dispatch(ActionCreators.setIsErrorModalOpen.apply(null, args)),\r\n updateSelectedRegion: (...args) =>\r\n dispatch(ActionCreators.updateSelectedRegion.apply(null, args)),\r\n setIsUserLoading: (...args) =>\r\n dispatch(ActionCreators.setIsUserLoading.apply(null, args)),\r\n setDisplayLinearProgress: (...args) =>\r\n dispatch(MainActionCreators.setDisplayLinearProgress.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(User))\r\n","import * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/Report/report'\r\nimport CoreService from '../Services/CoreService'\r\n// import { staticReportConfigData, staticReportData } from './dummyData'\r\n\r\nexport async function getReport(id) {\r\n return async (dispatch, getState) => {\r\n // Setup of dummy data\r\n // dispatch(ActionCreators.setReportConfig(staticReportConfigData))\r\n // dispatch(ActionCreators.setRecords(staticReportData))\r\n\r\n // Main API call\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n var reportConfigResponse = await CoreService.GetReportConfig(id)\r\n var reportResponse = await CoreService.GetReport(id)\r\n if (reportConfigResponse.ok && reportResponse.ok) {\r\n if (reportResponse.ok && reportConfigResponse.ok) {\r\n var reportConfig = await reportConfigResponse.json()\r\n dispatch(ActionCreators.setReportConfig(reportConfig))\r\n var report = await reportResponse.json()\r\n dispatch(ActionCreators.setRecords(report))\r\n } else {\r\n const error = await reportResponse.text()\r\n console.log(error)\r\n }\r\n } else {\r\n dispatch(MainActionCreators.setPath('/noCustomerAccess'))\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, TextField } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: theme.spacing(1),\r\n margin: theme.spacing(1, 0),\r\n },\r\n textField: {\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction ReportSearch(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = (evt) => {\r\n props.onChange(evt.target.value)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ReportSearch\r\n","import React, { useState } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { FormControl, Slider, Typography } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n marginTop: theme.spacing(3),\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n width: 250,\r\n },\r\n ageFilterLabel: {\r\n fontSize: '13px',\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n },\r\n ageFilter: {\r\n padding: '17px 0 0 0',\r\n },\r\n}))\r\n\r\nfunction SliderFilter(props) {\r\n const classes = useStyles()\r\n var [value, setValue] = useState([0, 36])\r\n\r\n const handleDateDynamicFieldChange = (evt, value) => {\r\n setValue(value)\r\n }\r\n\r\n const handleDateDynamicFieldChangeCommited = (id) => (evt, value) => {\r\n props.onHandleChange({ type: 'ageFilter', id, value })\r\n }\r\n\r\n const marks = [\r\n { value: 0, label: '0' },\r\n { value: 36, label: '>36' },\r\n ]\r\n\r\n return (\r\n \r\n \r\n {props.field.displayName}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default SliderFilter\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { FormControl, InputLabel, Select, MenuItem } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n marginTop: theme.spacing(3),\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction SelectStaticFilter(props) {\r\n const classes = useStyles()\r\n\r\n const handleStaticFieldChange = (id) => (e) => {\r\n props.onHandleChange({ type: 'static', id, value: e.target.value })\r\n }\r\n\r\n return (\r\n \r\n {props.field.displayName}\r\n \r\n All\r\n {props.field.options.map((x) => (\r\n \r\n {x.displayName}\r\n \r\n ))}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SelectStaticFilter\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { FormControl, InputLabel, Select, MenuItem } from '@material-ui/core'\r\nimport config from '../../Config'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n marginTop: theme.spacing(3),\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction SelectDynamicFilter(props) {\r\n const classes = useStyles()\r\n\r\n const handleDynamicFieldChange = (id) => (e) => {\r\n props.onHandleChange({ type: 'dynamic', id, value: e.target.value })\r\n }\r\n\r\n var value = 0\r\n if (\r\n props.field.id === config.report.specificFields.decomissioned.definitionId\r\n ) {\r\n value = props.fieldValues[props.field.id]\r\n ? props.fieldValues[props.field.id].value\r\n : 15 // 15 = \"No\"\r\n } else {\r\n value = props.fieldValues[props.field.id]\r\n ? props.fieldValues[props.field.id].value\r\n : 0\r\n }\r\n\r\n return (\r\n \r\n {props.field.displayName}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SelectDynamicFilter\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { FormControl, InputLabel, Select, MenuItem } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n marginTop: theme.spacing(3),\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction SiteStatusFilter(props) {\r\n const classes = useStyles()\r\n\r\n const handleSiteStatusChange = (e) => {\r\n props.onHandleChange({\r\n id: 'siteStatus',\r\n type: 'siteStatus',\r\n value: e.target.value,\r\n })\r\n }\r\n\r\n return (\r\n \r\n Site Status\r\n \r\n Active & Inactive)\r\n Active)\r\n Inactive)\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SiteStatusFilter\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { FormControl, InputLabel, Select, MenuItem } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formControl: {\r\n marginTop: theme.spacing(3),\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction SortFilter(props) {\r\n const classes = useStyles()\r\n const { label, refKey } = props\r\n\r\n const handleSortFilterChange = (e) => {\r\n props.onHandleChange({\r\n id: refKey,\r\n type: refKey,\r\n value: e.target.value,\r\n })\r\n }\r\n\r\n return (\r\n \r\n {label}\r\n \r\n None)\r\n Ascending)\r\n Descending)\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SortFilter\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box } from '@material-ui/core'\r\nimport Config from '../Config'\r\nimport SliderFilter from './Filters/SliderFilter'\r\nimport SelectStaticFilter from './Filters/SelectStaticFilter'\r\nimport SelectDynamicFilter from './Filters/SelectDynamicFilter'\r\nimport SiteStatusFilter from './Filters/SiteStatusFilter'\r\nimport SortFilter from './Filters/SortFilter'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: theme.spacing(1),\r\n margin: theme.spacing(1, 0),\r\n },\r\n}))\r\n\r\nfunction ReportFilter(props) {\r\n const classes = useStyles()\r\n\r\n var filters = []\r\n var key = 0\r\n var staticFilters = props.reportConfig.staticFields.map((f, i) => (\r\n \r\n ))\r\n filters = filters.concat(staticFilters)\r\n\r\n var siteStatusFilter = (\r\n \r\n )\r\n filters.push(siteStatusFilter)\r\n\r\n var dynamicFilters = props.reportConfig.filteringFields.map((f, i) => {\r\n switch (f.type) {\r\n case Config.dynamicFieldTypes.date:\r\n return (\r\n \r\n )\r\n case Config.dynamicFieldTypes.select:\r\n return (\r\n \r\n )\r\n default:\r\n return null\r\n }\r\n })\r\n filters = filters.concat(dynamicFilters)\r\n\r\n var installDateSortFilter = (\r\n \r\n )\r\n filters.push(installDateSortFilter)\r\n\r\n return (\r\n \r\n {filters.map((filter, i) => {\r\n if (i % 2 === 0) {\r\n return filter\r\n } else {\r\n return (\r\n \r\n {filter}\r\n
\r\n
\r\n )\r\n }\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport default ReportFilter\r\n","import React, { useState } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Button, CircularProgress } from '@material-ui/core'\r\nimport HttpService from '../Services/HttpService'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n downloadBox: {\r\n padding: theme.spacing(1, 0),\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n text: {\r\n color: '#FFD04D',\r\n },\r\n}))\r\n\r\nfunction ReportCSV(props) {\r\n const classes = useStyles()\r\n var [isLoading, setIsLoading] = useState(false)\r\n\r\n const downloadReport = async () => {\r\n setIsLoading(true)\r\n var filters = Object.keys(props.fieldValues).map((id) => {\r\n if (props.fieldValues[id].type === 'ageFilter') {\r\n return {\r\n id,\r\n type: props.fieldValues[id].type,\r\n range: props.fieldValues[id].value,\r\n }\r\n }\r\n return {\r\n id,\r\n type: props.fieldValues[id].type,\r\n value: props.fieldValues[id].value,\r\n }\r\n })\r\n var term = props.searchTerm\r\n var model = { filters, term }\r\n var fileResponse = await HttpService.MakePost(\r\n `/api/Report/CSV/${props.customerId}`,\r\n model,\r\n )\r\n if (fileResponse.ok) {\r\n var file = await fileResponse.blob()\r\n var url = window.URL.createObjectURL(file)\r\n var a = document.createElement('a')\r\n a.href = url\r\n a.download = 'report.csv'\r\n document.body.appendChild(a)\r\n a.click()\r\n a.remove()\r\n } else {\r\n var error = await fileResponse.text()\r\n console.log(error)\r\n }\r\n setIsLoading(false)\r\n }\r\n\r\n return (\r\n \r\n {isLoading ? (\r\n \r\n ) : (\r\n \r\n Download CSV\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default ReportCSV\r\n","import React, { useState, useEffect } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Paper, Box, Button } from '@material-ui/core'\r\nimport Config from '../../Config'\r\nimport ReportGrouping from './ReportGrouping'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n regionContainer: {\r\n margin: theme.spacing(1, 0),\r\n padding: theme.spacing(1),\r\n },\r\n region: {\r\n padding: theme.spacing(1, 2),\r\n borderColor: 'black',\r\n backgroundColor: '#FFD04D',\r\n },\r\n label: {\r\n fontFamily: 'Source Sans Pro',\r\n fontSize: 20,\r\n },\r\n value: {\r\n fontFamily: 'Playfair Display',\r\n fontSize: 26,\r\n fontWeight: 'bold',\r\n },\r\n loadMore: {\r\n width: '100%',\r\n },\r\n}))\r\n\r\nfunction RegionGrouping(props) {\r\n const classes = useStyles()\r\n\r\n var preloadedSize = Math.min(\r\n Config.reportGrouping.sitePreloadedSize,\r\n props.data.group.length,\r\n )\r\n var loadStep = Config.reportGrouping.siteLoadStep\r\n\r\n const [group, setGroup] = useState(props.data.group.slice(0, preloadedSize))\r\n\r\n useEffect(() => {\r\n if (props.collapsed) {\r\n setGroup(props.data.group.slice(0, preloadedSize))\r\n }\r\n }, [props.data, props.data.group, props.collapsed, setGroup, preloadedSize])\r\n\r\n const loadMore = () => {\r\n setGroup(\r\n props.data.group.slice(\r\n 0,\r\n Math.min(group.length + loadStep, props.data.group.length),\r\n ),\r\n )\r\n if (props.collapsed) {\r\n props.onExpand()\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n Region\r\n {props.data.key}\r\n \r\n {group.map((g, i) => (\r\n \r\n ))}\r\n {props.data.group.length - group.length !== 0 ? (\r\n \r\n ) : null}\r\n \r\n )\r\n}\r\n\r\nexport default RegionGrouping\r\n","import React, { useState, useEffect, useMemo } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Paper, Box, Button } from '@material-ui/core'\r\nimport Config from '../..//Config'\r\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload'\r\nimport FileService from '../../Services/FileService'\r\nimport ReportGrouping from './ReportGrouping'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport CheckBoxIcon from '@material-ui/icons/CheckBox'\r\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n siteContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: theme.spacing(1, 0, 0, 0),\r\n margin: theme.spacing(1, 0, 0, 0),\r\n },\r\n site: {\r\n flex: 1,\r\n justifyContent: 'space-between',\r\n padding: theme.spacing(1, 2),\r\n backgroundColor: '#0F3035',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n },\r\n siteData: {\r\n color: 'white',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n dynamicContainer: {\r\n border: '1px solid black',\r\n margin: theme.spacing(2, 0),\r\n padding: theme.spacing(1, 0),\r\n },\r\n label: {\r\n fontFamily: 'Source Sans Pro',\r\n fontSize: 20,\r\n },\r\n value: {\r\n fontFamily: 'Playfair Display',\r\n fontSize: 26,\r\n fontWeight: 'bold',\r\n },\r\n button: {\r\n margin: theme.spacing(1, 0),\r\n color: '#FFD04D',\r\n },\r\n}))\r\n\r\nfunction SiteGrouping(props) {\r\n const classes = useStyles()\r\n const {\r\n selectedFiles,\r\n onDowloadSelectedFilesClick,\r\n allGrouppedDocuments,\r\n setSelectedFiles,\r\n } = props.allyDownloadProps || {}\r\n const [completelyLoaded, setCompletelyLoaded] = useState(false)\r\n var preloadedSize =\r\n completelyLoaded && !props.collapsed\r\n ? props.data.group.length\r\n : Math.min(\r\n Config.reportGrouping.dynamicPreloadedSize,\r\n props.data.group.length,\r\n )\r\n const [group, setGroup] = useState(props.data.group.slice(0, preloadedSize))\r\n\r\n useEffect(() => {\r\n if (props.collapsed) {\r\n setGroup(props.data.group.slice(0, preloadedSize))\r\n setCompletelyLoaded(false)\r\n } else if (completelyLoaded) {\r\n setGroup(props.data.group.slice(0, props.data.group.length))\r\n } else {\r\n setGroup(props.data.group.slice(0, group.length))\r\n }\r\n }, [\r\n props.data,\r\n props.data.group,\r\n completelyLoaded,\r\n props.collapsed,\r\n setGroup,\r\n setCompletelyLoaded,\r\n group.length,\r\n preloadedSize,\r\n ])\r\n\r\n const filteredAllDownloadFiles = useMemo(() => {\r\n return allGrouppedDocuments[props.data.key]\r\n ? allGrouppedDocuments[props.data.key].filter(\r\n (f) => f.site === props.data.key,\r\n )\r\n : []\r\n }, [allGrouppedDocuments, props.data.key])\r\n\r\n const filteredDownloadFiles = useMemo(() => {\r\n return selectedFiles.filter((f) => f.site === props.data.key)\r\n }, [selectedFiles, props.data.key])\r\n\r\n const areAllDocumentsSelected = useMemo(() => {\r\n return filteredAllDownloadFiles.every((s) =>\r\n filteredDownloadFiles.find((x) => x.hash === s.hash && x.id === s.id),\r\n )\r\n }, [filteredAllDownloadFiles, filteredDownloadFiles])\r\n\r\n const toggleSelectAll = () => {\r\n if (areAllDocumentsSelected) {\r\n setSelectedFiles((prevFiles) => {\r\n return [...prevFiles].filter((s) => {\r\n return !filteredAllDownloadFiles.find(\r\n (x) => x.hash === s.hash && x.id === s.id,\r\n )\r\n })\r\n })\r\n } else {\r\n setSelectedFiles((prevFiles) => {\r\n const cleanedFiles = [...prevFiles].filter((s) => {\r\n return !filteredAllDownloadFiles.find(\r\n (x) => x.hash === s.hash && x.id === s.id,\r\n )\r\n })\r\n return [...cleanedFiles, ...filteredAllDownloadFiles]\r\n })\r\n }\r\n }\r\n\r\n const hideLoadCompleteSiteButton =\r\n completelyLoaded ||\r\n (props.data.group.length <= Config.reportGrouping.dynamicPreloadedSize &&\r\n props.data.group.every(\r\n (g) =>\r\n g.group.length <= Config.reportGrouping.serialDetailPreloadedSize,\r\n ))\r\n\r\n return (\r\n \r\n \r\n \r\n Site\r\n {props.data.key}\r\n \r\n \r\n {filteredDownloadFiles.length > 0 ? (\r\n onDowloadSelectedFilesClick(filteredDownloadFiles)}\r\n style={{ textTransform: 'none' }}\r\n >\r\n {`Download ${filteredDownloadFiles.length} Selected Certificate${\r\n filteredDownloadFiles.length > 1 ? `s` : ''\r\n }`}\r\n \r\n ) : null}\r\n {filteredAllDownloadFiles.length ? (\r\n toggleSelectAll()}\r\n style={{ marginLeft: '10px', textTransform: 'none' }}\r\n >\r\n \r\n }\r\n checkedIcon={\r\n \r\n }\r\n style={{ padding: '2px' }}\r\n />\r\n  \r\n {areAllDocumentsSelected\r\n ? `Deselect All Certificates`\r\n : `Select All Certificates`}\r\n \r\n ) : null}\r\n {group[0].group[0].customerSiteFileGuid ? (\r\n \r\n \r\n \r\n   Site Survey\r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n {group.map((g, i) => (\r\n \r\n ))}\r\n \r\n {hideLoadCompleteSiteButton ? null : (\r\n {\r\n setCompletelyLoaded(true)\r\n props.onExpand()\r\n }}\r\n >\r\n Load All Hoses For {props.data.key}\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default SiteGrouping\r\n","import React, { useState, useEffect } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Button } from '@material-ui/core'\r\nimport Config from '../../Config'\r\nimport ReportGrouping from './ReportGrouping'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n placementFieldName: {\r\n padding: '16px 16px 0px 16px',\r\n backgroundColor: '#D8D4C9',\r\n background: '#D8D4C9',\r\n fontFamily: 'Source Sans Pro',\r\n fontSize: 20,\r\n fontWeight: 'normal',\r\n },\r\n dynamicFieldName: {\r\n padding: '0px 16px 16px 16px',\r\n backgroundColor: '#D8D4C9',\r\n background: '#D8D4C9',\r\n fontFamily: 'Playfair Display',\r\n fontSize: 26,\r\n fontWeight: 'bold',\r\n },\r\n loadMore: {\r\n width: '100%',\r\n },\r\n}))\r\n\r\nfunction DynamicGrouping(props) {\r\n const classes = useStyles()\r\n\r\n var preloadedSize =\r\n props.completelyLoaded && !props.collapsed\r\n ? props.data.group.length\r\n : Math.min(\r\n Config.reportGrouping.serialDetailPreloadedSize,\r\n props.data.group.length,\r\n )\r\n var loadStep = Config.reportGrouping.serialDetailLoadStep\r\n const [group, setGroup] = useState(props.data.group.slice(0, preloadedSize))\r\n\r\n useEffect(() => {\r\n if (props.collapsed) {\r\n setGroup(props.data.group.slice(0, preloadedSize))\r\n } else if (props.completelyLoaded) {\r\n setGroup(props.data.group.slice(0, props.data.group.length))\r\n } else {\r\n setGroup(props.data.group.slice(0, group.length))\r\n }\r\n }, [\r\n props.data,\r\n props.data.group,\r\n props.completelyLoaded,\r\n props.collapsed,\r\n setGroup,\r\n preloadedSize,\r\n group.length,\r\n ])\r\n\r\n const loadMore = () => {\r\n setGroup(\r\n props.data.group.slice(\r\n 0,\r\n Math.min(group.length + loadStep, props.data.group.length),\r\n ),\r\n )\r\n if (props.collapsed) {\r\n props.onExpand()\r\n }\r\n }\r\n\r\n var groupings = group.map((g, i) => (\r\n \r\n ))\r\n\r\n return (\r\n \r\n Placement\r\n {props.data.key}\r\n {groupings}\r\n {props.data.group.length - group.length !== 0 ? (\r\n \r\n ) : null}\r\n \r\n )\r\n}\r\n\r\nexport default DynamicGrouping\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Grid, Typography } from '@material-ui/core'\r\nimport Config from '../../../Config'\r\nimport UtilService from '../../../Services/UtilService'\r\nimport { Link } from 'react-router-dom'\r\nimport moment from 'moment'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n serialDetailDataContainer: {\r\n padding: theme.spacing(1, 0),\r\n flexDirectison: 'column',\r\n },\r\n serialDetailDataHeader: {\r\n padding: theme.spacing(0, 0, 2, 1),\r\n fontFamily: 'Source Sans Pro',\r\n fontSize: 20,\r\n fontWeight: 900,\r\n },\r\n serialDetailDecomissionedLabel: {\r\n color: 'red',\r\n padding: theme.spacing(0, 1),\r\n fontSize: 15,\r\n },\r\n serialDetailData: {\r\n padding: theme.spacing(0, 0, 0, 3),\r\n },\r\n serialDetailDataLine: {\r\n lineHeight: '26px',\r\n flexDirection: 'row',\r\n display: 'flex',\r\n },\r\n serialDetailDataName: {\r\n fontWeight: 'bold',\r\n },\r\n}))\r\n\r\nconst DisplayFormattedText = ({ value }) => {\r\n const formattedText = value\r\n .replace(/\\\\r/g, '')\r\n .replace(/\\\\b/g, '')\r\n .replace(/\\\\t/g, ' ')\r\n .replace(/\\\\n/g, '\\n')\r\n\r\n return (\r\n \r\n {formattedText}\r\n \r\n )\r\n}\r\n\r\nfunction SerialDetailData(props) {\r\n const classes = useStyles()\r\n\r\n const getStringFieldValue = (definitionId) => {\r\n var field = props.data.fields.filter(\r\n (x) => x.definitionId === definitionId,\r\n )[0]\r\n return field ? field.stringValue : ''\r\n }\r\n\r\n const getSelectFieldValue = (definitionId) => {\r\n var field = props.data.fields.filter(\r\n (x) => x.definitionId === definitionId,\r\n )[0]\r\n if (field) {\r\n var fielDefinition = props.reportConfig.textFields.filter(\r\n (x) => x.id === definitionId,\r\n )[0]\r\n var option = fielDefinition.options.filter(\r\n (x) => x.id === field.optionId,\r\n )[0]\r\n return option ? option.displayName : ''\r\n } else {\r\n return ''\r\n }\r\n }\r\n\r\n const getDateFieldValue = (definitionId) => {\r\n var field = props.data.fields.filter(\r\n (x) => x.definitionId === definitionId,\r\n )[0]\r\n return field ? UtilService.FormatDate(new Date(field.dateValue)) : ''\r\n }\r\n\r\n const getAge = () => {\r\n var dateInstalled = props.data.fields.filter(\r\n (x) =>\r\n x.definitionId === Config.report.specificFields.ageFilter.definitionId,\r\n )[0]\r\n var dateInstalledDate = new Date(dateInstalled.dateValue)\r\n var now = new Date()\r\n var age =\r\n now.getFullYear() * 12 +\r\n now.getMonth() -\r\n dateInstalledDate.getFullYear() * 12 -\r\n dateInstalledDate.getMonth()\r\n\r\n return age\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {getStringFieldValue(\r\n Config.report.specificFields.diameter.definitionId,\r\n )}\r\n -\r\n {getStringFieldValue(Config.report.specificFields.grade.definitionId)}\r\n -\r\n {getStringFieldValue(\r\n Config.report.specificFields.length.definitionId,\r\n )}\r\n -{getStringFieldValue(Config.report.specificFields.end1.definitionId)}\r\n -{getStringFieldValue(Config.report.specificFields.end2.definitionId)}\r\n {getSelectFieldValue(\r\n Config.report.specificFields.decomissioned.definitionId,\r\n ) === 'Yes' ? (\r\n \r\n (DECOMISSIONED)\r\n \r\n ) : null}\r\n \r\n \r\n \r\n Serial Number:\r\n  {props.data.serialNumber}\r\n \r\n {props.data.hash ? (\r\n \r\n Certificate:\r\n  \r\n \r\n Click here\r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n Item Id: \r\n {props.data.item}\r\n \r\n \r\n PO Number: \r\n {props.data.customerPo}\r\n \r\n \r\n Date of Install:\r\n  \r\n {getDateFieldValue(\r\n Config.report.specificFields.ageFilter.definitionId,\r\n )}\r\n \r\n {props.data.testComment ? (\r\n \r\n Test Comment:\r\n  \r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n Placement: \r\n {getSelectFieldValue(\r\n Config.report.specificFields.placement.definitionId,\r\n )}\r\n \r\n {props.data.lastCertDate ? (\r\n \r\n \r\n Last Certification Date:\r\n \r\n  \r\n {moment(props.data.lastCertDate)\r\n .utc()\r\n .local()\r\n .format('MM-DD-YYYY')}\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n Months of service:\r\n \r\n  {getAge()}\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default SerialDetailData\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Grid } from '@material-ui/core'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\nimport Config from '../../../Config'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n serialDetailChart: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n },\r\n endOfLifeContainer: {\r\n color: '#e0e0e0',\r\n width: 200,\r\n height: 230,\r\n },\r\n relative: {\r\n position: 'relative',\r\n },\r\n endOfLife: {\r\n position: 'absolute',\r\n textAlign: 'center',\r\n width: 200,\r\n top: 0,\r\n left: 0,\r\n color: 'black',\r\n fontSize: 18,\r\n },\r\n endOfLifeVisual: {\r\n position: 'absolute',\r\n top: 30,\r\n left: 10,\r\n },\r\n}))\r\n\r\nfunction EndOfLifeChart(props) {\r\n const { includeRecertification } = props\r\n const classes = useStyles()\r\n\r\n const getAge = () => {\r\n var dateInstalled = props.data.fields.filter(\r\n (x) =>\r\n x.definitionId === Config.report.specificFields.ageFilter.definitionId,\r\n )[0]\r\n var dateInstalledDate = new Date(dateInstalled.dateValue)\r\n var now = new Date()\r\n var age =\r\n now.getFullYear() * 12 +\r\n now.getMonth() -\r\n dateInstalledDate.getFullYear() * 12 -\r\n dateInstalledDate.getMonth()\r\n\r\n return age\r\n }\r\n\r\n const getEndOfLife = () => {\r\n var age = getAge()\r\n var lifeTime = props.data.customerEndOfLifeMonths\r\n return Math.min((age * 100) / lifeTime, 100)\r\n }\r\n\r\n const getRecertificationValue = () => {\r\n var dateInstalledDate = new Date(props.data.lastCertDate)\r\n var now = new Date()\r\n var age =\r\n now.getFullYear() * 12 +\r\n now.getMonth() -\r\n dateInstalledDate.getFullYear() * 12 -\r\n dateInstalledDate.getMonth()\r\n var lifeTime = props.data.customerRecertifyCycleMonths\r\n return Math.min((age * 100) / lifeTime, 100)\r\n }\r\n\r\n return (\r\n <>\r\n {includeRecertification ? (\r\n \r\n \r\n
\r\n
Recertification Tracker
\r\n \r\n {getRecertificationValue() < 100 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n ) : null}\r\n \r\n \r\n
\r\n
End of life tracker
\r\n \r\n {getEndOfLife() < 100 ? (\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 EndOfLifeChart\r\n","import React, { useMemo } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Button, Grid } from '@material-ui/core'\r\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload'\r\nimport FileService from '../../../Services/FileService'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport CheckBoxIcon from '@material-ui/icons/CheckBox'\r\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'\r\nimport Config from '../../../Config'\r\nimport { getSelectFieldValue } from '../../Report'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n serialDetailData: {\r\n padding: theme.spacing(0, 0, 0, 3),\r\n },\r\n serialDetailDownload: {\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n button: {\r\n margin: theme.spacing(1, 0),\r\n color: '#FFD04D',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n}))\r\n\r\nfunction SerialDetailDownload(props) {\r\n const classes = useStyles()\r\n\r\n const { selectedFiles, setSelectedFiles } = props.allyDownloadProps || {}\r\n\r\n const getFileFieldValue = (definitionId) => {\r\n var field = props.data.fields.filter(\r\n (x) => x.definitionId === definitionId,\r\n )[0]\r\n return field ? field : null\r\n }\r\n\r\n var downloadFields = props.reportConfig.downloadFields\r\n .map((x) => ({ file: getFileFieldValue(x.id), name: x.displayName }))\r\n .filter((x) => x.file)\r\n\r\n const isChecked = useMemo(() => {\r\n if (!selectedFiles) return false\r\n\r\n return !!selectedFiles.find((selectedFile) => {\r\n return (\r\n selectedFile.hash === props.data.hash &&\r\n selectedFile.id === props.data.id\r\n )\r\n })\r\n }, [selectedFiles, props.data.hash, props.data.id])\r\n\r\n const toggleFileSelection = () => {\r\n if (!setSelectedFiles) return\r\n\r\n const { hash, id, fields } = props.data\r\n\r\n const region = props.data.customerRegion\r\n const site = props.data.customerSite\r\n const placement = getSelectFieldValue(\r\n Config.report.specificFields.placement.definitionId,\r\n fields,\r\n props.reportConfig,\r\n )\r\n\r\n setSelectedFiles((prevFiles = []) => {\r\n const isExist = !!prevFiles.find((selectedFile) => {\r\n return selectedFile.hash === hash && selectedFile.id === id\r\n })\r\n\r\n if (isExist) {\r\n return prevFiles.filter((selectedFile) => {\r\n return selectedFile.hash !== hash && selectedFile.id !== id\r\n })\r\n } else {\r\n return [\r\n ...prevFiles,\r\n {\r\n name: `${region}-${site}-${placement}`,\r\n hash,\r\n id,\r\n site,\r\n },\r\n ]\r\n }\r\n })\r\n }\r\n\r\n return (\r\n \r\n {downloadFields.length ? (\r\n \r\n {downloadFields.map((field, i) => (\r\n \r\n \r\n \r\n  \r\n {field.name}\r\n \r\n \r\n ))}\r\n \r\n ) : null}\r\n {props.data.hash ? (\r\n \r\n \r\n \r\n }\r\n checkedIcon={\r\n \r\n }\r\n style={{ padding: '2px' }}\r\n />\r\n  \r\n {'Compile Certificate'}\r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default SerialDetailDownload\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Grid } from '@material-ui/core'\r\nimport SerialDetailData from './SerialDetailData'\r\nimport EndOfLifeChart from './EndOfLifeChart'\r\nimport SerialDetailDownload from './SerialDetailDownload'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n '@global': {\r\n 'div#serialDetail:nth-child(2)': {\r\n borderTop: '0 !important',\r\n },\r\n },\r\n serialDetail: {\r\n margin: theme.spacing(1, 3, 0, 3),\r\n padding: theme.spacing(1, 0, 0, 0),\r\n borderTop: '1px solid black',\r\n },\r\n}))\r\n\r\nfunction SerialDetail(props) {\r\n const classes = useStyles()\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\nexport default SerialDetail\r\n","import React from 'react'\r\nimport RegionGrouping from './RegionGrouping'\r\nimport SiteGrouping from './SiteGrouping'\r\nimport DynamicGrouping from './DynamicGrouping'\r\nimport SerialDetail from './SerialDetail/SerialDetail'\r\n\r\nfunction ReportGrouping(props) {\r\n if ('key' in props.data && 'group' in props.data) {\r\n // List\r\n if (props.data.type === 'Region') {\r\n return (\r\n \r\n )\r\n } else if (props.data.type === 'Site') {\r\n return (\r\n \r\n )\r\n } else {\r\n return (\r\n \r\n )\r\n }\r\n } else {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default ReportGrouping\r\n","import Config from '../Config'\r\n\r\nclass ReportGroupingService {\r\n GetGroupers(reportConfig) {\r\n var dynamicFieldGroupers = reportConfig.groupingFields.map((fd) => {\r\n switch (fd.type) {\r\n case Config.dynamicFieldTypes.string:\r\n return {\r\n function: (x) =>\r\n x.fields.filter((f) => f.definitionId === fd.id)[0].stringValue,\r\n displayNameFunction: (x) =>\r\n x.fields.filter((f) => f.definitionId === fd.id)[0].stringValue,\r\n type: fd.displayName,\r\n }\r\n case Config.dynamicFieldTypes.select:\r\n return {\r\n function: (x) =>\r\n x.fields.filter((f) => f.definitionId === fd.id)[0].optionId,\r\n displayNameFunction: (x) =>\r\n fd.options.filter(\r\n (o) =>\r\n o.id ===\r\n x.fields.filter((f) => f.definitionId === fd.id)[0].optionId,\r\n )[0].displayName,\r\n type: fd.displayName,\r\n }\r\n default:\r\n return {}\r\n }\r\n })\r\n\r\n var groupers = [\r\n {\r\n function: (x) => x.austinCustomerRegionId,\r\n displayNameFunction: (x) => x.customerRegion,\r\n type: 'Region',\r\n },\r\n {\r\n function: (x) => x.austinCustomerSiteId,\r\n displayNameFunction: (x) => x.customerSite,\r\n type: 'Site',\r\n },\r\n ].concat(dynamicFieldGroupers)\r\n\r\n return groupers\r\n }\r\n\r\n GroupRecords(data, groupers, sortOrder) {\r\n var grouper = groupers[0]\r\n var groups = data.groupBy(grouper.function)\r\n\r\n if (!groupers.slice(1).length) {\r\n return groups.map((g) => ({\r\n key: grouper.displayNameFunction(g.key),\r\n group: sortOrder\r\n ? g.group.sort((a, b) => {\r\n const key = sortOrder.key\r\n const valueA = new Date(a[key])\r\n const valueB = new Date(b[key])\r\n return sortOrder.by === 1 ? valueA - valueB : valueB - valueA\r\n })\r\n : g.group,\r\n type: grouper.type,\r\n }))\r\n }\r\n\r\n var sortedGroups = groups.map((g) => ({\r\n key: grouper.displayNameFunction(g.key),\r\n group: this.GroupRecords(g.group, groupers.slice(1), sortOrder),\r\n type: grouper.type,\r\n }))\r\n\r\n if (grouper.type === 'Site' && sortOrder) {\r\n sortedGroups.forEach((group) => {\r\n group.group = group.group.sort((a, b) => {\r\n const key = sortOrder.key\r\n const latestValueA = new Date(\r\n Math.max(...a.group.map((x) => new Date(x[key]))),\r\n )\r\n const latestValueB = new Date(\r\n Math.max(...b.group.map((x) => new Date(x[key]))),\r\n )\r\n return sortOrder.by === 1\r\n ? latestValueA - latestValueB\r\n : latestValueB - latestValueA\r\n })\r\n })\r\n }\r\n\r\n return sortedGroups\r\n }\r\n\r\n FilterRecords(data, filtersValues) {\r\n var filteredRecords = data\r\n var fitlerIds = Object.keys(filtersValues)\r\n if (fitlerIds.length) {\r\n fitlerIds.forEach((filterId) => {\r\n var filter = filtersValues[filterId]\r\n\r\n if (filter.type === Config.report.filterType.static) {\r\n filteredRecords = filteredRecords.filter(\r\n (detail) => detail[filterId] === filter.value || filter.value === 0,\r\n )\r\n } else if (filter.type === Config.report.filterType.dynamic) {\r\n filteredRecords = filteredRecords.filter((detail) => {\r\n var dynamicField = detail.fields.filter(\r\n (df) => df.definitionId.toString() === filterId,\r\n )[0]\r\n if (dynamicField) {\r\n return (\r\n dynamicField.optionId === filter.value || filter.value === 0\r\n )\r\n }\r\n return false\r\n })\r\n } else if (filter.type === Config.report.filterType.siteStatus) {\r\n filteredRecords = filteredRecords.filter(\r\n (detail) =>\r\n filter.value === 0 ||\r\n detail[Config.report.specificFields.siteStatus.key] ===\r\n filter.value,\r\n )\r\n } else if (filter.type === Config.report.filterType.ageFilter) {\r\n filteredRecords = filteredRecords.filter((detail) => {\r\n var ageField = detail.fields.filter(\r\n (df) =>\r\n df.definitionId ===\r\n Config.report.specificFields.ageFilter.definitionId,\r\n )[0]\r\n if (ageField) {\r\n var now = new Date()\r\n var age =\r\n now.getFullYear() * 12 +\r\n now.getMonth() -\r\n new Date(ageField.dateValue).getFullYear() * 12 -\r\n new Date(ageField.dateValue).getMonth()\r\n\r\n if (filter.value[1] === 36) {\r\n return age >= filter.value[0]\r\n }\r\n return age <= filter.value[1] && age >= filter.value[0]\r\n }\r\n return false\r\n })\r\n } else if (filter.type === 'installDateSort') {\r\n filteredRecords = filteredRecords.sort((a, b) => {\r\n const dateA = new Date(a.invoiceDate)\r\n const dateB = new Date(b.invoiceDate)\r\n\r\n if (filter.value === 1) {\r\n return dateA - dateB\r\n } else if (filter.value === 0 || filter.value === 2) {\r\n return dateB - dateA\r\n }\r\n\r\n return 0\r\n })\r\n }\r\n })\r\n }\r\n return filteredRecords\r\n }\r\n\r\n SearchRecords(data, term, reportConfig) {\r\n var result = data\r\n var searchTerm = term.trim().toLowerCase()\r\n result = result.filter((x) => {\r\n return (\r\n (x.item && x.item.toLowerCase().includes(searchTerm)) ||\r\n (x.serialNumber && x.serialNumber.toLowerCase().includes(searchTerm)) ||\r\n (x.customerPo && x.customerPo.toLowerCase().includes(searchTerm)) ||\r\n (x.customerSite && x.customerSite.toLowerCase().includes(searchTerm)) ||\r\n reportConfig.searchableFields.some((sf) =>\r\n x.fields.filter((f) => f.definitionId === sf.id)[0]\r\n ? x.fields.filter((f) => f.definitionId === sf.id)[0].stringValue\r\n ? x.fields\r\n .filter((f) => f.definitionId === sf.id)[0]\r\n .stringValue.toLowerCase()\r\n .includes(searchTerm)\r\n : false\r\n : false,\r\n )\r\n )\r\n })\r\n return result\r\n }\r\n}\r\n\r\nexport default new ReportGroupingService()\r\n","import React, { useState, useEffect } from 'react'\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Typography,\r\n LinearProgress,\r\n makeStyles,\r\n CircularProgress,\r\n} from '@material-ui/core'\r\nimport { CheckCircle, CloudDownload, HourglassEmpty } from '@material-ui/icons'\r\nimport axios from 'axios'\r\nimport JSZip from 'jszip'\r\nimport CoreService from '../Services/CoreService'\r\nimport config from '../Config'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n dialogTitle: {\r\n padding: theme.spacing(2),\r\n borderBottom: '1px solid #eee',\r\n },\r\n fileItem: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n marginBottom: theme.spacing(2),\r\n },\r\n progressContainer: {\r\n width: '40%',\r\n marginLeft: theme.spacing(2),\r\n },\r\n statusIcon: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n fileInfo: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n selectedFileContainer: {\r\n marginBottom: theme.spacing(3),\r\n padding: theme.spacing(2),\r\n border: '1px solid #ccc',\r\n borderRadius: 4,\r\n },\r\n}))\r\n\r\nconst DownloadZipDialog = ({ open, onClose, selectedFiles }) => {\r\n const classes = useStyles()\r\n const [downloading, setDownloading] = useState(false)\r\n const [linkedFilesData, setLinkedFilesData] = useState({})\r\n const [downloadStatus, setDownloadStatus] = useState({})\r\n const [fetchingRawFiles, setFetchingRawFiles] = useState(false)\r\n\r\n const updateDownloadStatus = (selectedIndex, fileIndex, statusObj) => {\r\n const key = `${selectedIndex}-${fileIndex}`\r\n setDownloadStatus((prev) => ({\r\n ...prev,\r\n [key]: { ...prev[key], ...statusObj },\r\n }))\r\n }\r\n\r\n const getStatusIcon = (status) => {\r\n switch (status) {\r\n case 'pending':\r\n return \r\n case 'fetching':\r\n return \r\n case 'fetched':\r\n return \r\n case 'error':\r\n return \r\n default:\r\n return null\r\n }\r\n }\r\n\r\n const fetchAndDownload = async () => {\r\n setDownloading(true)\r\n const zip = new JSZip()\r\n const allLinkedFiles = {}\r\n\r\n setFetchingRawFiles(true)\r\n for (let i = 0; i < selectedFiles.length; i++) {\r\n const { hash } = selectedFiles[i]\r\n try {\r\n const res = await CoreService.GetHashFiles(hash)\r\n const files = await res.json()\r\n setLinkedFilesData((prev) => ({ ...prev, [i]: files }))\r\n allLinkedFiles[i] = files\r\n } catch (err) {\r\n console.error(`Error fetching linked files for hash ${hash}:`, err)\r\n setLinkedFilesData((prev) => ({ ...prev, [i]: [] }))\r\n allLinkedFiles[i] = []\r\n }\r\n }\r\n setFetchingRawFiles(false)\r\n\r\n for (let i = 0; i < selectedFiles.length; i++) {\r\n const folderName = selectedFiles[i].name\r\n const folder = zip.folder(folderName)\r\n const files = allLinkedFiles[i] || []\r\n for (let j = 0; j < files.length; j++) {\r\n const file = files[j]\r\n updateDownloadStatus(i, j, { status: 'fetching', progress: 0 })\r\n try {\r\n const response = await axios.get(\r\n `${config.fileServer}/${file.fileUrl}`,\r\n {\r\n responseType: 'blob',\r\n onDownloadProgress: (progressEvent) => {\r\n const percentCompleted = Math.round(\r\n (progressEvent.loaded * 100) / (progressEvent.total || 1),\r\n )\r\n updateDownloadStatus(i, j, {\r\n progress: percentCompleted,\r\n status: 'fetching',\r\n })\r\n },\r\n },\r\n )\r\n let fileName = file.originalFileName\r\n if (!fileName.includes('.') && file.fileUrl.includes('.')) {\r\n const ext = file.fileUrl.split('.').pop()\r\n fileName = `${fileName}.${ext}`\r\n }\r\n folder.file(fileName, response.data, { binary: true })\r\n updateDownloadStatus(i, j, { status: 'fetched', progress: 100 })\r\n } catch (err) {\r\n console.error(`Error downloading file from ${file.fileUrl}:`, err)\r\n updateDownloadStatus(i, j, { status: 'error', progress: 0 })\r\n }\r\n }\r\n }\r\n\r\n const zipBlob = await zip.generateAsync({ type: 'blob' })\r\n const currentDate = new Date().toISOString().slice(0, 10)\r\n const zipFilename = `${currentDate}_certificates.zip`\r\n const url = window.URL.createObjectURL(zipBlob)\r\n const link = document.createElement('a')\r\n link.href = url\r\n link.setAttribute('download', zipFilename)\r\n document.body.appendChild(link)\r\n link.click()\r\n link.parentNode && link.parentNode.removeChild(link)\r\n window.URL.revokeObjectURL(url)\r\n\r\n setDownloading(false)\r\n onClose()\r\n }\r\n\r\n useEffect(() => {\r\n if (open) {\r\n fetchAndDownload()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [open])\r\n\r\n return (\r\n {} : onClose}\r\n fullWidth\r\n maxWidth='sm'\r\n >\r\n \r\n Download Certificates\r\n \r\n \r\n {selectedFiles.map((selectedFile, selectedIndex) => (\r\n
\r\n {selectedFile.name}\r\n \r\n {fetchingRawFiles &&\r\n !(linkedFilesData[selectedIndex] || []).length\r\n ? 'Please wait...'\r\n : `${\r\n (linkedFilesData[selectedIndex] || []).length\r\n } Certificate(s)`}\r\n \r\n {(linkedFilesData[selectedIndex] || []).map((file, fileIndex) => {\r\n const key = `${selectedIndex}-${fileIndex}`\r\n const fileStatus = downloadStatus[key]\r\n ? downloadStatus[key].status\r\n : 'pending'\r\n const progress = downloadStatus[key]\r\n ? downloadStatus[key].progress\r\n : 0\r\n return (\r\n
\r\n
\r\n \r\n {file.originalFileName}\r\n \r\n {getStatusIcon(fileStatus)}\r\n
\r\n {fileStatus === 'fetching' && (\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 DownloadZipDialog\r\n","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport * as ActionCreators from '../Reducers/Report/report'\r\nimport * as ThunkActionCreators from '../Thunks/ReportThunk'\r\nimport { Box, Paper, Button } from '@material-ui/core'\r\nimport AuthService from '../Services/AuthService'\r\nimport ReportSearch from './ReportSearch'\r\nimport ReportFilter from './ReportFilter'\r\nimport ReportCSV from './ReportCSV'\r\nimport ReportGrouping from './ReportGrouping/ReportGrouping'\r\nimport ReportService from '../Services/ReportService'\r\nimport DownloadZipDialog from './DowloadZipDlg'\r\nimport Config from '../Config'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formContainer: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n },\r\n customer: {\r\n fontFamily: 'Playfair Display',\r\n fontWeight: 'bold',\r\n fontSize: 36,\r\n padding: theme.spacing(0, 0, 3, 0),\r\n color: 'white',\r\n },\r\n message: {\r\n color: 'white',\r\n },\r\n total: {\r\n padding: theme.spacing(0, 2, 1, 2),\r\n },\r\n collapseButton: {\r\n position: 'fixed',\r\n bottom: 20,\r\n right: 20,\r\n zIndex: 20,\r\n },\r\n buttonText: {\r\n color: '#FFD04D',\r\n },\r\n}))\r\n\r\nexport const getSelectFieldValue = (definitionId, fields, reportConfig) => {\r\n var field = fields.filter((x) => x.definitionId === definitionId)[0]\r\n if (field) {\r\n var fielDefinition = reportConfig.textFields.filter(\r\n (x) => x.id === definitionId,\r\n )[0]\r\n var option = fielDefinition.options.filter(\r\n (x) => x.id === field.optionId,\r\n )[0]\r\n return option ? option.displayName : ''\r\n } else {\r\n return ''\r\n }\r\n}\r\n\r\nfunction Report(props) {\r\n const classes = useStyles()\r\n const [selectedFiles, setSelectedFiles] = useState([])\r\n const [filesToZip, setFilesToZip] = useState([])\r\n const [showDownloadZipDlg, setShowDownloadZipDlg] = useState(false)\r\n const [allGrouppedDocuments, setAllGrouppedDocuments] = useState({})\r\n\r\n useEffect(\r\n () => {\r\n props.getReport(props.match.params.id)\r\n return () => props.cleanUp()\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.match.params.id],\r\n )\r\n\r\n useEffect(() => {\r\n setSelectedFiles((prevSelectedFiles) => {\r\n return prevSelectedFiles.filter((each) => {\r\n return !!allGrouppedDocuments[each.customerSite].find((x) => {\r\n return x.item === each.item && x.downloadUrl === each.downloadUrl\r\n })\r\n })\r\n })\r\n }, [allGrouppedDocuments])\r\n\r\n useEffect(() => {\r\n configureAllDownloadFiles()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.fieldValues, props.records, props.reportConfig, props.searchTerm])\r\n\r\n const configureAllDownloadFiles = () => {\r\n try {\r\n const fRecords = ReportService.FilterRecords(\r\n props.records,\r\n props.fieldValues,\r\n )\r\n\r\n const sRecords = ReportService.SearchRecords(\r\n fRecords,\r\n props.searchTerm,\r\n props.reportConfig,\r\n )\r\n\r\n const filesRecords = sRecords\r\n .filter((r) => r.hash)\r\n .map((r) => {\r\n const region = r.customerRegion\r\n const site = r.customerSite\r\n const placement = getSelectFieldValue(\r\n Config.report.specificFields.placement.definitionId,\r\n r.fields,\r\n props.reportConfig,\r\n )\r\n\r\n return {\r\n name: `${region}-${site}-${placement}`,\r\n hash: r.hash,\r\n id: r.id,\r\n site,\r\n }\r\n })\r\n\r\n const structureDownloadItems = (array, key) => {\r\n return array.reduce((result, item) => {\r\n const groupKey = item[key]\r\n if (!result[groupKey]) {\r\n result[groupKey] = []\r\n }\r\n result[groupKey].push(item)\r\n return result\r\n }, {})\r\n }\r\n\r\n setAllGrouppedDocuments({\r\n ...structureDownloadItems(filesRecords, 'site'),\r\n })\r\n } catch (e) {\r\n //\r\n }\r\n }\r\n\r\n const handleFilterChange = (change) => {\r\n props.setCollapsed(true)\r\n props.setField({\r\n [change.id]: {\r\n value: change.value,\r\n type: change.type,\r\n },\r\n })\r\n }\r\n\r\n const handleSearch = (term) => {\r\n props.setCollapsed(true)\r\n props.setSearchTerm(term)\r\n }\r\n\r\n const onDowloadSelectedFilesClick = (filesToDowload) => {\r\n setFilesToZip([...filesToDowload])\r\n setShowDownloadZipDlg(true)\r\n }\r\n\r\n const allyDownloadProps = {\r\n selectedFiles,\r\n setSelectedFiles,\r\n onDowloadSelectedFilesClick,\r\n allGrouppedDocuments,\r\n }\r\n\r\n if (props.records.length && props.reportConfig) {\r\n var groupers = ReportService.GetGroupers(props.reportConfig)\r\n var filteredRecords = ReportService.FilterRecords(\r\n props.records,\r\n props.fieldValues,\r\n )\r\n var searchedRecords = ReportService.SearchRecords(\r\n filteredRecords,\r\n props.searchTerm,\r\n props.reportConfig,\r\n )\r\n const sortOrder = props.fieldValues.installDateSort\r\n ? { by: props.fieldValues.installDateSort.value, key: 'invoiceDate' }\r\n : 0\r\n var groupedDetails = ReportService.GroupRecords(\r\n searchedRecords,\r\n groupers,\r\n sortOrder,\r\n )\r\n var groups = groupedDetails.map((gd, i) => (\r\n props.setCollapsed(false)}\r\n collapsed={props.collapsed}\r\n allyDownloadProps={allyDownloadProps}\r\n />\r\n ))\r\n var result = groups\r\n if (groups.length) {\r\n result = groups\r\n } else {\r\n if (props.records.length) {\r\n result = (\r\n
\r\n No serial details respond to the selected filters\r\n
\r\n )\r\n } else {\r\n result = (\r\n
\r\n You don't have access to any serial details related to this customer\r\n
\r\n )\r\n }\r\n }\r\n\r\n return (\r\n \r\n {!props.collapsed ? (\r\n \r\n props.setCollapsed(true)}\r\n >\r\n Collapse All\r\n \r\n \r\n ) : null}\r\n \r\n {props.customer ? props.customer.name : ''}\r\n \r\n \r\n \r\n \r\n Total: {searchedRecords.length}\r\n \r\n {groups.length ? (\r\n \r\n ) : null}\r\n {result}\r\n {showDownloadZipDlg ? (\r\n {\r\n setShowDownloadZipDlg(false)\r\n setFilesToZip([])\r\n }}\r\n selectedFiles={filesToZip}\r\n />\r\n ) : null}\r\n \r\n )\r\n }\r\n return null\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n var customerId = props.match.params.id ? parseInt(props.match.params.id) : 0\r\n var auth = AuthService.GetAuth()\r\n var customer = auth.customers.filter((x) => x.id === customerId)[0]\r\n return {\r\n records: state.report.records,\r\n reportConfig: state.report.reportConfig,\r\n fieldValues: state.report.fieldValues,\r\n searchTerm: state.report.searchTerm,\r\n collapsed: state.report.collapsed,\r\n customer: customer,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch, props) => {\r\n return {\r\n setRecords: (...args) =>\r\n dispatch(ActionCreators.setRecords.apply(null, args)),\r\n getReport: async (...args) =>\r\n dispatch(await ThunkActionCreators.getReport.apply(null, args)),\r\n setField: (...args) => dispatch(ActionCreators.setField.apply(null, args)),\r\n setSearchTerm: (...args) =>\r\n dispatch(ActionCreators.setSearchTerm.apply(null, args)),\r\n setCollapsed: (...args) =>\r\n dispatch(ActionCreators.setCollapsed.apply(null, args)),\r\n cleanUp: (...args) => dispatch(ActionCreators.cleanUp.apply(null, args)),\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Report))\r\n","import * as ActionCreators from '../Reducers/ServiceTrackers/serviceTrackers'\r\nimport CoreService from '../Services/CoreService'\r\n\r\nexport async function searchServiceTrackers(\r\n customer,\r\n pageSize,\r\n page,\r\n orderBy,\r\n orderAscending,\r\n) {\r\n return async (dispatch, getState) => {\r\n dispatch(ActionCreators.setServiceTrackersLoading(true))\r\n dispatch(ActionCreators.setServiceTrackers([]))\r\n var httpResponse = await CoreService.GetServiceTrackers(\r\n customer,\r\n pageSize,\r\n page,\r\n orderBy,\r\n orderAscending,\r\n )\r\n if (httpResponse.ok) {\r\n const response = await httpResponse.json()\r\n dispatch(ActionCreators.setServiceTrackersWithPagination(response))\r\n } else {\r\n const response = await httpResponse.text()\r\n console.error(response)\r\n }\r\n dispatch(ActionCreators.setServiceTrackersLoading(false))\r\n }\r\n}\r\n","import React, { useState, useEffect } from 'react'\r\nimport useDebounce from '../Hooks/UseDebounce'\r\nimport { fade, makeStyles } from '@material-ui/core/styles'\r\nimport InputBase from '@material-ui/core/InputBase'\r\nimport SearchIcon from '@material-ui/icons/Search'\r\nimport AutorenewIcon from '@material-ui/icons/Autorenew'\r\nimport ClearIcon from '@material-ui/icons/Clear'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n inputRoot: {\r\n color: 'inherit',\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 7, 1, 7),\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n borderBottom: '1px solid rgba(0, 0, 0, 0.42)',\r\n margin: theme.spacing(1),\r\n [theme.breakpoints.up('sm')]: {\r\n width: 150,\r\n '&:focus': {\r\n width: 200,\r\n },\r\n },\r\n '&:hover': {\r\n borderBottom: '2px solid black',\r\n },\r\n '&:focus': {\r\n borderBottom: '2px solid #303f9f',\r\n },\r\n },\r\n search: {\r\n position: 'relative',\r\n minWidth: 200,\r\n lineHeight: '70px',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n margin: '10px',\r\n },\r\n searchIcon: {\r\n width: theme.spacing(7),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n clearIcon: {\r\n width: theme.spacing(7),\r\n height: '100%',\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 1000,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n}))\r\n\r\nfunction SearchBar(props) {\r\n const [isSearching, setIsSearching] = useState(false)\r\n const debouncedSearchTerm = useDebounce(props.searchTerm, 500)\r\n\r\n const search = (term) => {\r\n setIsSearching(true)\r\n props.onSearch(term).then(() => {\r\n setIsSearching(false)\r\n })\r\n }\r\n\r\n useEffect(\r\n () => search(debouncedSearchTerm),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [debouncedSearchTerm],\r\n )\r\n\r\n const test = (event) => {\r\n if (event.key === 'enter' || event.charCode === 13) {\r\n search('')\r\n }\r\n }\r\n\r\n const clearSearchTerm = () => {\r\n props.onSetSearchTerm('')\r\n }\r\n\r\n const classes = useStyles()\r\n\r\n return (\r\n
\r\n
\r\n {isSearching ? : }\r\n
\r\n props.onSetSearchTerm(e.target.value)}\r\n inputProps={{ 'aria-label': 'search' }}\r\n value={props.searchTerm}\r\n />\r\n {props.searchTerm ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n )\r\n}\r\n\r\nexport default SearchBar\r\n","import React from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Paper, Fab } from '@material-ui/core'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n TablePagination,\r\n TableFooter,\r\n} from '@material-ui/core'\r\nimport EditIcon from '@material-ui/icons/Edit'\r\nimport AddIcon from '@material-ui/icons/Add'\r\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp'\r\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n minWidth: 650,\r\n },\r\n header: {\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n fileLink: {\r\n color: 'inherit',\r\n },\r\n fileIcon: {\r\n width: '1.3em',\r\n height: '1.3em',\r\n },\r\n sortIcon: {\r\n position: 'absolute',\r\n },\r\n}))\r\n\r\nfunction DataGrid(props) {\r\n const classes = useStyles()\r\n\r\n const renderSortIcon = (column) => {\r\n if (column === props.orderBy) {\r\n if (props.orderAscending) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n return null\r\n }\r\n\r\n const renderCoreDataHeader = (name, displayName) => {\r\n return (\r\n \r\n props.onSort(name)} className={classes.header}>\r\n {displayName}\r\n {renderSortIcon(name[0].toUpperCase() + name.substr(1))}\r\n \r\n \r\n )\r\n }\r\n\r\n const getServiceType = (typeId) => {\r\n if (props.serviceTypes) {\r\n const typeName = props.serviceTypes.filter((x) => x.id === typeId)[0]\r\n return (typeName && typeName.name) || typeId\r\n }\r\n return typeId\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {renderCoreDataHeader('serviceTypeId', 'Service Type')}\r\n {renderCoreDataHeader('customer', 'Customer ID')}\r\n {renderCoreDataHeader('serviceCycle', 'Service Cycle')}\r\n {renderCoreDataHeader('serviceDate', 'Service Date')}\r\n {renderCoreDataHeader('daysExpired', 'Days Expired')}\r\n {renderCoreDataHeader('daysToExpire', 'Days To Expire')}\r\n \r\n \r\n \r\n \r\n {props.serviceTrackers.map((serviceTracker, i) => (\r\n \r\n \r\n {getServiceType(serviceTracker.serviceTypeId)}\r\n \r\n {serviceTracker.customer}\r\n {serviceTracker.serviceCycle}\r\n {serviceTracker.serviceDate}\r\n {serviceTracker.daysExpired}\r\n {serviceTracker.daysToExpire}\r\n \r\n \r\n props.onSetPath('/serviceTracker/' + serviceTracker.id)\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.onSetPath('/serviceTracker/new')}\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.children}
\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(DataGrid)\r\n","import React, { useEffect } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { connect } from 'react-redux'\r\nimport { Paper } from '@material-ui/core'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/ServiceTrackers/serviceTrackers'\r\nimport * as ThunkActionCreators from '../Thunks/ServiceTrackersThunk'\r\nimport SearchBar from './SearchBar'\r\nimport DataGrid from './DataGrid'\r\nimport GridSpinner from '../Components/GridSpinner'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n inputContainers: {\r\n padding: theme.spacing(1, 0),\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#D8D4C9',\r\n },\r\n progressContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: theme.spacing(3),\r\n },\r\n}))\r\n\r\nfunction ServiceTrackers(props) {\r\n const classes = useStyles()\r\n\r\n useEffect(\r\n () => {\r\n props.searchServiceTrackers(\r\n '',\r\n props.pageSize,\r\n props.page,\r\n props.orderBy,\r\n props.orderAscending,\r\n )\r\n // return () => props.cleanUp();\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n )\r\n\r\n const handleSearch = async (customer) => {\r\n props.setPage(0)\r\n props.setSearchTerm(customer)\r\n await props.searchServiceTrackers(\r\n customer,\r\n props.pageSize,\r\n 0,\r\n props.orderBy,\r\n props.orderAscending,\r\n )\r\n }\r\n\r\n const handlePageChange = async (event, newPage) => {\r\n props.setPage(newPage)\r\n await props.searchServiceTrackers(\r\n props.searchTerm,\r\n props.pageSize,\r\n newPage,\r\n props.orderBy,\r\n props.orderAscending,\r\n )\r\n }\r\n\r\n const handleRowCountChange = async (event) => {\r\n var pageSize = event.target.value\r\n props.setPage(0)\r\n props.setPageSize(pageSize)\r\n await props.searchServiceTrackers(\r\n props.searchTerm,\r\n pageSize,\r\n 0,\r\n props.orderBy,\r\n props.orderAscending,\r\n )\r\n }\r\n\r\n const handleSort = async (orderBy) => {\r\n props.setPage(0)\r\n if (props.orderBy !== orderBy) {\r\n // Sort ascending by orderBy\r\n props.setOrderBy(orderBy)\r\n props.setOrderAscending(true)\r\n await props.searchServiceTrackers(\r\n props.searchTerm,\r\n props.pageSize,\r\n 0,\r\n orderBy,\r\n true,\r\n )\r\n } else if (props.orderBy === orderBy && props.orderAscending === true) {\r\n // Sort descending by orderBy\r\n props.setOrderAscending(false)\r\n await props.searchServiceTrackers(\r\n props.searchTerm,\r\n props.pageSize,\r\n 0,\r\n props.orderBy,\r\n false,\r\n )\r\n } else {\r\n // Remove sort\r\n props.setOrderAscending(true)\r\n props.setOrderBy('')\r\n await props.searchServiceTrackers(\r\n props.searchTerm,\r\n props.pageSize,\r\n 0,\r\n '',\r\n true,\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 return {\r\n fields: state.main.fieldDefinitions,\r\n serviceTrackers: state.serviceTrackers.serviceTrackers,\r\n serviceTypes: state.serviceTracker.serviceTypes,\r\n isServiceTrackersLoading: state.serviceTrackers.isServiceTrackersLoading,\r\n searchTerm: state.serviceTrackers.searchTerm,\r\n pageSize: state.serviceTrackers.pageSize,\r\n page: state.serviceTrackers.page,\r\n totalServiceTrackers: state.serviceTrackers.totalServiceTrackers,\r\n orderBy: state.serviceTrackers.orderBy,\r\n orderAscending: state.serviceTrackers.orderAscending,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSearchTerm: (...args) =>\r\n dispatch(ActionCreators.setSearchTerm.apply(null, args)),\r\n setPageSize: (...args) =>\r\n dispatch(ActionCreators.setPageSize.apply(null, args)),\r\n setPage: (...args) => dispatch(ActionCreators.setPage.apply(null, args)),\r\n setOrderBy: (...args) =>\r\n dispatch(ActionCreators.setOrderBy.apply(null, args)),\r\n setOrderAscending: (...args) =>\r\n dispatch(ActionCreators.setOrderAscending.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n searchServiceTrackers: async (...args) =>\r\n dispatch(await ThunkActionCreators.searchServiceTrackers.apply(null, args)),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ServiceTrackers)\r\n","import React from 'react'\r\nimport { Modal, Button } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n border: '2px solid red',\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n modalAction: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n}))\r\n\r\nfunction ErrorModal(props) {\r\n const classes = useStyles()\r\n\r\n const handleModalChange = (change) => {\r\n props.onModalChange(false)\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n {props.errors.map((x, i) => (\r\n
\r\n {x}\r\n
\r\n ))}\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ErrorModal\r\n","import React from 'react'\r\nimport { Modal } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport ActionButtons from '../Components/ActionButtons'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n modalContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n modal: {\r\n width: 400,\r\n backgroundColor: theme.palette.background.default,\r\n border: '2px solid red',\r\n boxShadow: theme.shadows[2],\r\n padding: theme.spacing(2, 4, 3),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n modalAction: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n}))\r\n\r\nfunction DeleteModal(props) {\r\n const classes = useStyles()\r\n\r\n const closeModal = (change) => {\r\n props.onModalChange(false)\r\n }\r\n\r\n return (\r\n \r\n
\r\n

Are you sure you want to delete this serial detail

\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default DeleteModal\r\n","import React, { useMemo } from 'react'\r\nimport { TextField } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction AutoCompleteInput(props) {\r\n const classes = useStyles()\r\n\r\n var label = props.displayName.concat(props.isRequired ? '*' : '')\r\n\r\n var isOptionInvalid =\r\n (props.value && !props.options.map((x) => x.id).includes(props.value)) ||\r\n !props.value\r\n\r\n const selectedValue = useMemo(() => {\r\n if (!props.value) return undefined\r\n return props.options.find((s) => Number(s.id) === Number(props.value))\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.options, props.value])\r\n\r\n return (\r\n option.name}\r\n clearOnEscape\r\n style={{ height: '64px' }}\r\n onChange={(ev, value) => {\r\n props.handleChange(value && value.id ? value.id : '')\r\n }}\r\n value={selectedValue}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n )\r\n}\r\n\r\nexport default AutoCompleteInput\r\n","import React, { useState } from 'react'\r\nimport DateFnsUtils from '@date-io/date-fns'\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDatePicker,\r\n} from '@material-ui/pickers'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n textField: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n}))\r\n\r\nfunction StringInput(props) {\r\n const [isOpen, setIsOpen] = useState(false)\r\n const classes = useStyles()\r\n\r\n var label = props.displayName.concat(props.isRequired ? '*' : '')\r\n return (\r\n \r\n {\r\n setIsOpen(true)\r\n }}\r\n onClose={() => {\r\n setIsOpen(false)\r\n }}\r\n id={props.id.toString()}\r\n error={props.isDirty && props.isRequired && !props.value}\r\n className={classes.textField}\r\n variant='inline'\r\n format='MM/dd/yyyy'\r\n label={label}\r\n value={props.value}\r\n onChange={(e) => {\r\n props.handleChange(e)\r\n setIsOpen(false)\r\n }}\r\n KeyboardButtonProps={{ 'aria-label': 'change date' }}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default StringInput\r\n","import React from 'react'\r\nimport { TextField } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n textField: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n },\r\n multilineTextField: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 500 + theme.spacing(2),\r\n },\r\n}))\r\n\r\nfunction StringInput(props) {\r\n const classes = useStyles()\r\n\r\n const handleChange = (event) => {\r\n props.handleChange(event.target.value)\r\n }\r\n\r\n var label = props.displayName.concat(props.isRequired ? '*' : '')\r\n if (props.multiline) {\r\n return (\r\n \r\n )\r\n }\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default StringInput\r\n","import React, { useState } from 'react'\r\nimport { Button, Box, CircularProgress } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload'\r\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload'\r\nimport DeleteIcon from '@material-ui/icons/Delete'\r\nimport CoreService from '../../Services/CoreService'\r\nimport FileService from '../../Services/FileService'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 250,\r\n flexDirection: 'column',\r\n display: 'flex',\r\n },\r\n label: {\r\n fontSize: '0.75rem',\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n fontWeight: 500,\r\n lineHeight: 1,\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n },\r\n actions: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n },\r\n buttons: {\r\n flexDirection: 'row',\r\n display: 'flex',\r\n paddingTop: theme.spacing(1),\r\n },\r\n buttonLeft: {\r\n width: 120,\r\n },\r\n buttonRight: {\r\n width: 77,\r\n marginLeft: theme.spacing(1),\r\n },\r\n download: {\r\n width: 250,\r\n paddingTop: theme.spacing(1),\r\n },\r\n spinnerContainer: {\r\n padding: theme.spacing(1, 0, 0, 1),\r\n },\r\n error: {\r\n color: 'red',\r\n },\r\n}))\r\n\r\nfunction FileInput(props) {\r\n const classes = useStyles()\r\n\r\n const [error, setError] = useState('')\r\n const [isLoading, setIsLoading] = useState(false)\r\n\r\n const handleChange = async (event) => {\r\n if (event.target.files[0].size > 10000000) {\r\n // 10MB\r\n setError('File too large, upload unsuccessful')\r\n return\r\n }\r\n setIsLoading(true)\r\n setError('')\r\n var extension = event.target.files[0].name.substr(\r\n event.target.files[0].name.lastIndexOf('.'),\r\n )\r\n var httpResponse = await CoreService.UploadFile(event.target.files[0])\r\n if (httpResponse.ok) {\r\n var response = await httpResponse.json()\r\n props.handleChange({\r\n fileId: response.id,\r\n fileGuid: response.guid,\r\n fileExtension: extension,\r\n })\r\n } else {\r\n var error = await httpResponse.text()\r\n setError(error)\r\n console.error(error)\r\n }\r\n setIsLoading(false)\r\n }\r\n\r\n const removeFile = () => {\r\n props.handleChange({ fileId: null, fileGuid: null })\r\n }\r\n\r\n var label = props.displayName.concat(props.isRequired ? '*' : '')\r\n\r\n var acceptProp = {}\r\n if (\r\n (props.allowedFileExtensions && props.allowedFileExtensions.length) ||\r\n (props.allowedFileMimeTypes && props.allowedFileMimeTypes.length)\r\n ) {\r\n acceptProp = {\r\n accespt: props.allowedFileExtensions\r\n .concat(props.allowedFileMimeTypes)\r\n .join(','),\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.value && props.value.fileId ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n {error}\r\n \r\n )\r\n}\r\n\r\nexport default FileInput\r\n","import React from 'react'\r\nimport { Box, Button } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport AddIcon from '@material-ui/icons/Add'\r\nimport FileInput from './FileInput'\r\nimport { TextField } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n margin: theme.spacing(0, 1),\r\n },\r\n textField: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n marginBottom: theme.spacing(-2),\r\n width: 250,\r\n },\r\n addFileContainer: {\r\n margin: theme.spacing(2, 1),\r\n },\r\n}))\r\n\r\nfunction FileUploads(props) {\r\n const styles = useStyles()\r\n\r\n const handleChange = (index) => async (change) => {\r\n var files = props.files.concat()\r\n var currentFile = files[index]\r\n if (change.fileId === null && change.fileGuid === null) {\r\n files.splice(index, 1)\r\n } else {\r\n var updatedFile = { ...currentFile, ...change }\r\n files[index] = updatedFile\r\n }\r\n props.onChange(files)\r\n }\r\n\r\n const handleNameChange = (index) => (e) => {\r\n var files = props.files.concat()\r\n var currentFile = files[index]\r\n currentFile.name = e.target.value.toUpperCase()\r\n props.onChange(files)\r\n }\r\n\r\n const handleAdd = () => {\r\n const newFiles = props.files.concat([{ fileId: null, name: '' }])\r\n props.onChange(newFiles)\r\n }\r\n\r\n var files = props.files.map((file, index) => (\r\n \r\n \r\n \r\n \r\n ))\r\n return (\r\n \r\n

Attached files

\r\n {files}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default FileUploads\r\n","import React, { useEffect } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Paper, Grid } from '@material-ui/core'\r\nimport * as ActionCreators from '../Reducers/ServiceTracker/serviceTracker'\r\nimport * as MainActionCreators from '../Reducers/main'\r\nimport * as ThunkActionCreators from '../Thunks/ServiceTrackerThunk'\r\nimport ActionButtons from '../Components/ActionButtons'\r\nimport ErrorModal from './ErrorModal'\r\nimport DeleteModal from './DeleteModal'\r\nimport AutoCompleteInput from './Inputs/AutoCompleteInput'\r\nimport DateInput from './Inputs/DateInput'\r\nimport StringInput from './Inputs/StringInput'\r\nimport FileUploads from './Inputs/FileUploads'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formContainer: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n },\r\n}))\r\n\r\nfunction ServiceTracker(props) {\r\n const styles = useStyles()\r\n const fetchData = async () => {\r\n if (props.match.params.id !== 'new') {\r\n await props.getServiceTracker(props.match.params.id)\r\n } else {\r\n const emptyService = {\r\n files: [],\r\n serviceDate: new Date(),\r\n customer: '',\r\n serviceTypeId: '',\r\n }\r\n props.setServiceTracker(emptyService)\r\n }\r\n await props.getServiceTypes()\r\n await props.getCustomers()\r\n }\r\n\r\n useEffect(\r\n () => {\r\n fetchData()\r\n return props.cleanUp\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [],\r\n )\r\n\r\n const handleErrorModalChange = (change) => {\r\n props.setErrorModalOpen([], change)\r\n }\r\n\r\n const handleChange = (field) => (updatedValue) => {\r\n var change = { [field]: updatedValue }\r\n props.setServiceTracker({ ...props.serviceTracker, ...change })\r\n props.setServiceTrackerIsDirty({\r\n ...props.serviceTrackerIsDirty,\r\n ...{ [field]: true },\r\n })\r\n }\r\n\r\n console.log(props.serviceTracker)\r\n\r\n if (\r\n props.serviceTracker &&\r\n props.customers.length &&\r\n props.serviceTypes.length\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 {props.serviceTracker.id ? (\r\n props.setDeleteModalOpen(true)}\r\n primaryLabel='Save'\r\n secondaryLabel='Delete'\r\n isLoading={props.serviceTrackerLoading}\r\n />\r\n ) : (\r\n props.setPath('/serviceTracker')}\r\n primaryLabel='Save'\r\n secondaryLabel='Cancel'\r\n isLoading={props.serviceTrackerLoading}\r\n />\r\n )}\r\n \r\n \r\n
\r\n )\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n return {\r\n serviceTracker: state.serviceTracker.serviceTracker,\r\n serviceTrackerIsDirty: state.serviceTracker.serviceTrackerIsDirty,\r\n customers: state.serviceTracker.customers,\r\n serviceTypes: state.serviceTracker.serviceTypes,\r\n errorList: state.serviceTracker.errorList,\r\n errorModalOpen: state.serviceTracker.errorModalOpen,\r\n deleteModalOpen: state.serviceTracker.deleteModalOpen,\r\n deleteModalLoading: state.serviceTracker.deleteModalLoading,\r\n serviceTrackerLoading: state.serviceTracker.serviceTrackerLoading,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setServiceTracker: (...args) =>\r\n dispatch(ActionCreators.setServiceTracker.apply(null, args)),\r\n setServiceTrackerIsDirty: (...args) =>\r\n dispatch(ActionCreators.setServiceTrackerIsDirty.apply(null, args)),\r\n setErrorModalOpen: (...args) =>\r\n dispatch(ActionCreators.setErrorModalOpen.apply(null, args)),\r\n setDeleteModalOpen: (...args) =>\r\n dispatch(ActionCreators.setDeleteModalOpen.apply(null, args)),\r\n cleanUp: (...args) => dispatch(ActionCreators.cleanUp.apply(null, args)),\r\n setPath: (...args) => dispatch(MainActionCreators.setPath.apply(null, args)),\r\n getServiceTypes: async (...args) =>\r\n dispatch(await ThunkActionCreators.getServiceTypes.apply(null, args)),\r\n getCustomers: async (...args) =>\r\n dispatch(await ThunkActionCreators.getCustomers.apply(null, args)),\r\n getServiceTracker: async (...args) =>\r\n dispatch(await ThunkActionCreators.getServiceTracker.apply(null, args)),\r\n updateServiceTracker: async (...args) =>\r\n dispatch(await ThunkActionCreators.updateServiceTracker.apply(null, args)),\r\n createServiceTracker: async (...args) =>\r\n dispatch(await ThunkActionCreators.createServiceTracker.apply(null, args)),\r\n deleteServiceTracker: async (...args) =>\r\n dispatch(await ThunkActionCreators.deleteServiceTracker.apply(null, args)),\r\n})\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(ServiceTracker),\r\n)\r\n","import * as MainActionCreators from '../Reducers/main'\r\nimport * as ActionCreators from '../Reducers/ServiceReport/serviceReport'\r\nimport CoreService from '../Services/CoreService'\r\n\r\nexport async function getServiceReport(id) {\r\n return async (dispatch, getState) => {\r\n dispatch(MainActionCreators.setDisplayLinearProgress(true))\r\n var reportResponse = await CoreService.GetServiceReport(id)\r\n if (reportResponse.ok) {\r\n if (reportResponse.ok) {\r\n var report = await reportResponse.json()\r\n dispatch(ActionCreators.setRecords(report))\r\n } else {\r\n const error = await reportResponse.text()\r\n console.log(error)\r\n }\r\n } else {\r\n dispatch(MainActionCreators.setPath('/noCustomerAccess'))\r\n }\r\n dispatch(MainActionCreators.setDisplayLinearProgress(false))\r\n }\r\n}\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Grid } from '@material-ui/core'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n serviceTrackerChart: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n },\r\n endOfLifeContainer: {\r\n color: '#e0e0e0',\r\n width: 200,\r\n height: 230,\r\n },\r\n relative: {\r\n position: 'relative',\r\n },\r\n endOfLife: {\r\n position: 'absolute',\r\n textAlign: 'center',\r\n width: 200,\r\n top: 0,\r\n left: 0,\r\n color: 'black',\r\n fontSize: 18,\r\n },\r\n endOfLifeVisual: {\r\n position: 'absolute',\r\n top: 30,\r\n left: 10,\r\n },\r\n}))\r\n\r\nfunction EndOfLifeChart({ serviceTracker }) {\r\n const classes = useStyles()\r\n\r\n const getAge = () => {\r\n var dateInstalled = serviceTracker.serviceDate\r\n var dateInstalledDate = new Date(dateInstalled)\r\n var now = new Date()\r\n var age =\r\n now.getFullYear() * 12 +\r\n now.getMonth() -\r\n dateInstalledDate.getFullYear() * 12 -\r\n dateInstalledDate.getMonth()\r\n\r\n return age\r\n }\r\n\r\n const getEndOfLife = () => {\r\n var age = getAge()\r\n var lifeTime = serviceTracker.serviceCycle\r\n return Math.min((age * 100) / lifeTime, 100)\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n {getEndOfLife() < 100 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default EndOfLifeChart\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Grid } from '@material-ui/core'\r\nimport UtilService from '../../Services/UtilService'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n serviceTrackerDataContainer: {\r\n width: 300,\r\n padding: theme.spacing(1, 0),\r\n flexDirectison: 'column',\r\n },\r\n serviceTrackerDataHeader: {\r\n padding: theme.spacing(0, 0, 2, 1),\r\n fontFamily: 'Source Sans Pro',\r\n fontSize: 20,\r\n fontWeight: 900,\r\n },\r\n serviceTrackerDecomissionedLabel: {\r\n color: 'red',\r\n padding: theme.spacing(0, 1),\r\n fontSize: 15,\r\n },\r\n serviceTrackerData: {\r\n padding: theme.spacing(0, 0, 0, 3),\r\n },\r\n serviceTrackerDataLine: {\r\n lineHeight: '26px',\r\n flexDirection: 'row',\r\n display: 'flex',\r\n },\r\n serviceTrackerDataName: {\r\n fontWeight: 'bold',\r\n },\r\n}))\r\n\r\nfunction ServiceTrackerData({ serviceTracker }) {\r\n const classes = useStyles()\r\n\r\n const getServiceDue = () => {\r\n const dateInstalled = new Date(serviceTracker.serviceDate)\r\n return new Date(\r\n dateInstalled.setMonth(\r\n dateInstalled.getMonth() + serviceTracker.serviceCycle,\r\n ),\r\n )\r\n }\r\n\r\n var notes = ''\r\n if (serviceTracker.notes) {\r\n notes = serviceTracker.notes\r\n .split('\\n')\r\n .map((i, key) =>
 {i}
)\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ServiceDate:\r\n \r\n  \r\n {UtilService.FormatDateUS(new Date(serviceTracker.serviceDate))}\r\n \r\n \r\n \r\n \r\n \r\n Service Cycle (mo):\r\n \r\n  {serviceTracker.serviceCycle}\r\n \r\n \r\n  \r\n \r\n \r\n \r\n SERVICE DUE:\r\n \r\n  {UtilService.FormatDateUS(getServiceDue())}\r\n \r\n \r\n  \r\n \r\n \r\n Notes:\r\n {notes}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ServiceTrackerData\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Button, Grid } from '@material-ui/core'\r\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload'\r\nimport FileService from '../../Services/FileService'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n serviceTrackerData: {\r\n margin: theme.spacing(1, 0, 0, 0),\r\n padding: theme.spacing(1),\r\n width: 250,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n borderWidth: 1,\r\n borderRadius: 10,\r\n borderColor: 'black',\r\n borderStyle: 'solid',\r\n },\r\n documents: {\r\n padding: theme.spacing(1, 0),\r\n fontSize: 16,\r\n },\r\n serviceTrackerDownload: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n button: {\r\n width: 200,\r\n margin: theme.spacing(1, 0),\r\n color: '#FFD04D',\r\n justifyContent: 'left',\r\n },\r\n}))\r\n\r\nfunction ServiceTrackerDownload({ serviceTracker }) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n {serviceTracker.files.length ? (\r\n \r\n Documents\r\n {serviceTracker.files.map((file, i) => (\r\n \r\n \r\n \r\n  \r\n {file.name}\r\n \r\n \r\n ))}\r\n \r\n ) : null}\r\n \r\n )\r\n}\r\n\r\nexport default ServiceTrackerDownload\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Grid, Paper } from '@material-ui/core'\r\nimport EndOfLifeChart from './EndOfLifeChart'\r\nimport ServiceTrackerData from './ServiceTrackerData'\r\nimport SerciceTrackerDownload from './ServiceTrackerDownload'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n serviceTracker: {\r\n margin: theme.spacing(1, 3, 0, 3),\r\n padding: theme.spacing(1, 0, 0, 0),\r\n },\r\n header: {\r\n flex: 1,\r\n justifyContent: 'space-between',\r\n padding: theme.spacing(1, 2),\r\n backgroundColor: '#0F3035',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n },\r\n headerData: {\r\n color: 'white',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n headerLabel: {\r\n fontFamily: 'Source Sans Pro',\r\n fontSize: 20,\r\n },\r\n headerValue: {\r\n fontFamily: 'Playfair Display',\r\n fontSize: 26,\r\n fontWeight: 'bold',\r\n },\r\n}))\r\n\r\nfunction ServiceTracker({ serviceTracker, serviceTypes }) {\r\n const classes = useStyles()\r\n const serviceType = serviceTypes.filter(\r\n (x) => x.id === serviceTracker.serviceTypeId,\r\n )[0].name\r\n return (\r\n \r\n \r\n \r\n Service Type\r\n {serviceType}\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 ServiceTracker\r\n","import React, { useEffect } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport * as ActionCreators from '../Reducers/Report/report'\r\nimport * as ThunkActionCreators from '../Thunks/ServiceReportThunk'\r\nimport { Box, Paper } from '@material-ui/core'\r\nimport AuthService from '../Services/AuthService'\r\nimport ServiceTracker from './ServiceTracker/ServiceTracker'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n formContainer: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n },\r\n customer: {\r\n fontFamily: 'Playfair Display',\r\n fontWeight: 'bold',\r\n fontSize: 36,\r\n padding: theme.spacing(0, 0, 3, 0),\r\n color: 'white',\r\n },\r\n message: {\r\n color: 'white',\r\n },\r\n paperContainer: {\r\n padding: theme.spacing(2, 0, 0, 0),\r\n },\r\n header: {\r\n margin: theme.spacing(0, 3),\r\n padding: theme.spacing(1, 2),\r\n borderColor: 'black',\r\n backgroundColor: '#FFD04D',\r\n },\r\n label: {\r\n fontFamily: 'Source Sans Pro',\r\n fontSize: 20,\r\n },\r\n value: {\r\n margin: theme.spacing(2, 0, 0, 0),\r\n fontFamily: 'Playfair Display',\r\n fontSize: 32,\r\n fontWeight: 'bold',\r\n },\r\n}))\r\n\r\nfunction Report(props) {\r\n const classes = useStyles()\r\n\r\n useEffect(\r\n () => {\r\n props.getServiceReport(props.match.params.id)\r\n return () => props.cleanUp()\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.match.params.id],\r\n )\r\n\r\n if (props.isLoading) {\r\n return null\r\n }\r\n\r\n if (props.records.length && props.serviceTypes.length) {\r\n const trackers = props.records.map((x) => (\r\n \r\n ))\r\n\r\n return (\r\n \r\n \r\n {props.customer ? props.customer.name : ''}\r\n \r\n \r\n \r\n Services\r\n \r\n {trackers}\r\n \r\n \r\n )\r\n } else {\r\n return (\r\n
\r\n You don't have access to any service trackers related to this customer\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n var customerId = props.match.params.id ? props.match.params.id : 0\r\n var auth = AuthService.GetAuth()\r\n var customer = auth.customers.filter((x) => x.id === customerId)[0]\r\n return {\r\n records: state.serviceReport.records,\r\n serviceTypes: state.serviceTracker.serviceTypes,\r\n customer: customer,\r\n isLoading: state.main.displayLinearProgress,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch, props) => {\r\n return {\r\n setRecords: (...args) =>\r\n dispatch(ActionCreators.setRecords.apply(null, args)),\r\n cleanUp: (...args) => dispatch(ActionCreators.cleanUp.apply(null, args)),\r\n getServiceReport: async (...args) =>\r\n dispatch(await ThunkActionCreators.getServiceReport.apply(null, args)),\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Report))\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { Box, Paper } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n marginTop: theme.spacing(5),\r\n },\r\n logo: {\r\n width: 'fit-content',\r\n margin: 'auto',\r\n padding: theme.spacing(0, 0, 4, 0),\r\n },\r\n paper: {\r\n padding: theme.spacing(1, 0, 2, 0),\r\n margin: 'auto',\r\n maxWidth: 400,\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n justifyContent: 'center',\r\n },\r\n}))\r\n\r\nfunction NotFound(props) {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n

404 Not Found

\r\n

Sorry, the page you are looking for does not exist.

\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default NotFound\r\n","import React, { useState, useEffect, useCallback } from 'react'\r\nimport {\r\n CircularProgress,\r\n Container,\r\n Grid,\r\n Typography,\r\n useMediaQuery,\r\n useTheme,\r\n Box,\r\n} from '@material-ui/core'\r\nimport { useDropzone } from 'react-dropzone'\r\nimport CoreService from '../Services/CoreService'\r\n\r\nconst VerifyUploadFile = () => {\r\n const theme = useTheme()\r\n const isSmallScreen = useMediaQuery(theme.breakpoints.down('xs'))\r\n\r\n const [selectedFiles, setSelectedFiles] = useState([])\r\n const [currentActiveIndex, setCurrentActiveIndex] = useState(null)\r\n\r\n const onDrop = (acceptedFiles) => {\r\n resetState()\r\n setSelectedFiles(acceptedFiles)\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedFiles.length) setCurrentActiveIndex(0)\r\n }, [selectedFiles])\r\n\r\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\r\n onDrop,\r\n })\r\n\r\n const resetState = () => {\r\n setSelectedFiles([])\r\n setCurrentActiveIndex(null)\r\n }\r\n\r\n const processNextFile = useCallback(\r\n (index) => {\r\n if (index + 1 !== selectedFiles.length) {\r\n setCurrentActiveIndex((prev) => prev + 1)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },\r\n [selectedFiles],\r\n )\r\n\r\n return (\r\n \r\n \r\n Upload certificate\r\n \r\n \r\n \r\n {isDragActive ? (\r\n Drop the file here ...\r\n ) : (\r\n \r\n {isSmallScreen ? 'Tap' : `Drag n drop or click`} to select a files\r\n \r\n )}\r\n \r\n {selectedFiles.map((file, index) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\nconst FileItem = ({\r\n selectedFile,\r\n itemIndex,\r\n currentActiveIndex,\r\n processNextFile,\r\n}) => {\r\n const [validationResult, setValidationResult] = useState(null)\r\n const [uploadResult, setUploadResult] = useState(null)\r\n const [isValidating, setIsValidating] = useState(false)\r\n const [isUploading, setIsUploading] = useState(false)\r\n const [uploadPercentage, setUploadPercentage] = useState(0)\r\n\r\n useEffect(() => {\r\n return () => {\r\n resetState()\r\n }\r\n }, [])\r\n\r\n const resetState = () => {\r\n setValidationResult(null)\r\n setIsValidating(false)\r\n setIsUploading(false)\r\n setUploadResult(null)\r\n setUploadPercentage(0)\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedFile && itemIndex === currentActiveIndex) {\r\n startValidation(selectedFile)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [selectedFile, currentActiveIndex, itemIndex])\r\n\r\n const getFileName = (selectedFile) => {\r\n return selectedFile.name ? selectedFile.name.replace(/\\.[^/.]+$/, '') : ''\r\n }\r\n\r\n const startValidation = async (selectedFile) => {\r\n setIsValidating(true)\r\n try {\r\n const fileName = getFileName(selectedFile)\r\n\r\n const res = await CoreService.VerifyFileName(fileName)\r\n\r\n if (res.ok) {\r\n const response = await res.json()\r\n setValidationResult({ ...(response || {}) })\r\n setIsValidating(false)\r\n\r\n if (response.exists) {\r\n await uploadFile(selectedFile)\r\n }\r\n } else {\r\n setValidationResult({ exists: false })\r\n setIsValidating(false)\r\n }\r\n } catch (error) {\r\n console.error('Error during file validation:', error)\r\n setValidationResult({ exists: false })\r\n } finally {\r\n setIsValidating(false)\r\n processNextFile(currentActiveIndex)\r\n }\r\n }\r\n\r\n const uploadFile = async (file) => {\r\n setIsUploading(true)\r\n try {\r\n await CoreService.UploadFileQR(file, setUploadPercentage)\r\n\r\n setIsUploading(false)\r\n setUploadResult({ uploaded: true })\r\n } catch (error) {\r\n console.error('Error during file upload:', error)\r\n setUploadResult({ uploaded: false })\r\n } finally {\r\n setIsUploading(false)\r\n }\r\n }\r\n\r\n return (\r\n \r\n {selectedFile && (\r\n \r\n \r\n \r\n {selectedFile.name} ({(selectedFile.size / 1024).toFixed(2)} KB)\r\n \r\n \r\n \r\n )}\r\n {itemIndex > currentActiveIndex ? (\r\n \r\n \r\n In queue...\r\n \r\n \r\n ) : (\r\n ''\r\n )}\r\n {isValidating && (\r\n \r\n \r\n Validating...\r\n \r\n )}\r\n {validationResult && (\r\n \r\n \r\n {validationResult.exists\r\n ? `Your file ${selectedFile.name} has passed validation successfully.`\r\n : `Unfortunately, validation for your file ${selectedFile.name} has failed. Please check and try again.`}\r\n \r\n \r\n )}\r\n {isUploading && (\r\n \r\n \r\n \r\n Uploading... {uploadPercentage > 0 ? `(${uploadPercentage}%)` : ''}\r\n \r\n \r\n )}\r\n {uploadResult && (\r\n \r\n \r\n {uploadResult.uploaded\r\n ? `Congratulations! Your file ${selectedFile.name} has been successfully uploaded.`\r\n : `Oops! Something went wrong during the upload of ${selectedFile.name}, Please retry.`}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nconst dropzoneStyle = {\r\n border: '2px dashed #cccccc',\r\n borderRadius: '4px',\r\n padding: '20px',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n}\r\n\r\nconst dropzoneStyleActive = {\r\n ...dropzoneStyle,\r\n backgroundColor: '#e0f2f1',\r\n}\r\n\r\nexport default VerifyUploadFile\r\n","import React, { useState, useEffect } from 'react'\r\nimport {\r\n Button,\r\n Container,\r\n Grid,\r\n Paper,\r\n // TextField,\r\n Typography,\r\n // useMediaQuery,\r\n // useTheme,\r\n Box,\r\n} from '@material-ui/core'\r\nimport { useParams } from 'react-router-dom'\r\nimport CoreService from '../Services/CoreService'\r\nimport config from '../Config'\r\n\r\nconst SerialHash = () => {\r\n // const theme = useTheme()\r\n // const isSmallScreen = useMediaQuery(theme.breakpoints.down('xs'))\r\n\r\n // const history = useHistory()\r\n const params = useParams()\r\n\r\n const [isSearching, setIsSearching] = useState(false)\r\n const [searchResults, setSearchResults] = useState(null)\r\n\r\n useEffect(() => {\r\n if (params.id) {\r\n handleSearch()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (searchResults && searchResults.length === 1) {\r\n handleViewFile(searchResults[0].fileUrl)\r\n }\r\n }, [searchResults])\r\n\r\n const handleSearch = async () => {\r\n setSearchResults(null)\r\n setIsSearching(true)\r\n\r\n try {\r\n const res = await CoreService.GetHashFiles(params.id.trim())\r\n\r\n if (res.ok) {\r\n const response = await res.json()\r\n setSearchResults([...(response || [])])\r\n } else {\r\n setSearchResults([])\r\n }\r\n } catch (error) {\r\n console.error('Error during API call:', error)\r\n setSearchResults([])\r\n } finally {\r\n setIsSearching(false)\r\n }\r\n }\r\n\r\n const handleViewFile = (fileUrl) => {\r\n window.open(`${config.fileServer}/${fileUrl}`, '_blank')\r\n }\r\n\r\n // const handleKeyDown = (event) => {\r\n // if (event.key === 'Enter') {\r\n // handleSearch()\r\n // }\r\n // }\r\n\r\n return (\r\n \r\n {/* \r\n \r\n Serial Files\r\n \r\n \r\n \r\n {\r\n history.replace(`/serial/${e.target.value}`)\r\n }}\r\n placeholder='Enter hash...'\r\n disabled={isSearching}\r\n onKeyDown={handleKeyDown}\r\n />\r\n \r\n \r\n \r\n {isSearching ? 'Searching...' : 'Search'}\r\n \r\n \r\n \r\n */}\r\n\r\n \r\n \r\n Serial Files\r\n \r\n {isSearching ? (\r\n \r\n Please wait...\r\n \r\n ) : searchResults === null ? (\r\n ''\r\n ) : searchResults.length > 0 ? (\r\n \r\n {searchResults.map((file, index) => (\r\n \r\n \r\n {file.originalFileName}\r\n \r\n Date: {new Date(file.testDate).toLocaleString()}\r\n \r\n handleViewFile(file.fileUrl)}\r\n style={{ marginTop: '10px' }}\r\n >\r\n View File\r\n \r\n \r\n \r\n ))}\r\n \r\n ) : (\r\n \r\n No files available.\r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SerialHash\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Box from '@material-ui/core/Box'\r\nimport LinearProgress from '@material-ui/core/LinearProgress'\r\nimport * as ActionCreators from './Reducers/main'\r\nimport * as ServiceTrackerThunkActionCreators from './Thunks/ServiceTrackerThunk'\r\nimport ReactiveRouter from './Routing/ReactiveRouter'\r\nimport ProtectedRoute from './Routing/ProtectedRoute'\r\nimport CoreService from './Services/CoreService'\r\nimport NavBar from './NavBar'\r\nimport Login from './Auth/Login'\r\nimport ReportPicker from './ReportPicker/ReportPicker'\r\nimport ForgotPassword from './Auth/ForgotPassword'\r\nimport ResetPassword from './Auth/ResetPassword'\r\nimport SerialDetails from './SerialDetails/SerialDetails'\r\n// import UnassignedSerialDetails from './SerialDetails/UnassignedSerialDetails'\r\nimport NewSerialDetail from './SerialDetail/NewSerialDetail'\r\nimport SerialDetail from './SerialDetail/SerialDetail'\r\nimport Customers from './Customers/Customers'\r\nimport Customer from './Customer/Customer'\r\nimport Users from './Users/Users'\r\nimport User from './User/User'\r\nimport Report from './Report/Report'\r\nimport ServiceTrackers from './ServiceTrackers/ServiceTrackers'\r\nimport ServiceTracker from './ServiceTracker/ServiceTracker'\r\nimport ServiceReport from './ServiceReport/ServiceReport'\r\nimport NotFound from './Components/NotFound'\r\nimport UploadCertificate from './UploadCertificate'\r\nimport SerialHash from './SerialHash'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n backgroundColor: '#0F3035',\r\n flexGrow: 1,\r\n },\r\n screen: {\r\n padding: '24px',\r\n overflow: 'auto',\r\n height: 'calc(100vh - 139px)',\r\n },\r\n}))\r\n\r\nfunction Main(props) {\r\n const classes = useStyles()\r\n\r\n const getAppData = async () => {\r\n var fetchers = [\r\n getFieldData(),\r\n props.getServiceTypes(),\r\n props.getCustomers(),\r\n ]\r\n await Promise.all(fetchers)\r\n }\r\n\r\n const getFieldData = async () => {\r\n var fieldsHttpResponse = await CoreService.GetFieldDefinitions()\r\n if (fieldsHttpResponse.ok) {\r\n var fieldsResponse = await fieldsHttpResponse.json()\r\n props.setFieldDefinitions(\r\n fieldsResponse.map((fd) => ({\r\n ...fd,\r\n selected: false,\r\n isDirty: false,\r\n })),\r\n )\r\n } else {\r\n fieldsHttpResponse.text().then((x) => console.log(x))\r\n }\r\n }\r\n\r\n React.useEffect(\r\n () => {\r\n getAppData()\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [props.setFieldDefinitions],\r\n )\r\n\r\n const NoCustomerReport = () => (\r\n

\r\n You currently don't have access to any customers, please talk to your\r\n Austin Distribting contact\r\n

\r\n )\r\n\r\n return (\r\n
\r\n \r\n \r\n {props.displayLinearProgress ? (\r\n \r\n ) : null}\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\n\r\nconst mapStateToProps = (state) => ({\r\n displayLinearProgress: state.main.displayLinearProgress,\r\n})\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setFieldDefinitions: (...args) =>\r\n dispatch(ActionCreators.setFieldDefinitions.apply(null, args)),\r\n getServiceTypes: async (...args) =>\r\n dispatch(\r\n await ServiceTrackerThunkActionCreators.getServiceTypes.apply(null, args),\r\n ),\r\n getCustomers: async (...args) =>\r\n dispatch(\r\n await ServiceTrackerThunkActionCreators.getCustomers.apply(null, args),\r\n ),\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Main)\r\n","/* eslint-disable */\r\nexport default (function () {\r\n Array.prototype.groupBy = function (hash) {\r\n var _hash = hash\r\n ? hash\r\n : function (o) {\r\n return o\r\n }\r\n\r\n var _map = {}\r\n var put = function (map, key, value) {\r\n if (!map[_hash(key)]) {\r\n map[_hash(key)] = {}\r\n map[_hash(key)].group = []\r\n map[_hash(key)].key = key\r\n }\r\n map[_hash(key)].group.push(value)\r\n }\r\n\r\n this.map(function (obj) {\r\n put(_map, obj, obj)\r\n })\r\n\r\n return Object.keys(_map).map(function (key) {\r\n return { key: _map[key].key, group: _map[key].group }\r\n })\r\n }\r\n})()\r\n/* eslint-enable */\r\n","import React from 'react'\r\nimport { Box, Paper, Typography } from '@material-ui/core'\r\n\r\nfunction ErrorFallbackRender({ error }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {error.message}{' '}\r\n window.location.reload()}\r\n >\r\n Click here\r\n {' '}\r\n to reload this page.\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ErrorFallbackRender\r\n","import React from 'react'\r\nimport { createStore, combineReducers, applyMiddleware } from 'redux'\r\nimport { Provider } from 'react-redux'\r\nimport thunkMiddleware from 'redux-thunk'\r\nimport { createMuiTheme } from '@material-ui/core/styles'\r\nimport { ThemeProvider } from '@material-ui/styles'\r\nimport reducer from './Reducers'\r\nimport Main from './Main'\r\n/* eslint-disable */\r\nimport Util from './Util/Util'\r\n/* eslint-enable */\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\nimport ErrorFallbackRender from './Components/ErrorBoundry'\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: { main: '#2F7A8C' },\r\n secondary: { main: '#FFD04D' },\r\n },\r\n typography: {\r\n fontFamily: ['Source Sans Pro'],\r\n },\r\n})\r\n\r\nfunction App() {\r\n const rootReducer = combineReducers(reducer)\r\n const store = createStore(rootReducer, applyMiddleware(thunkMiddleware))\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\nexport default App\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\r\n ),\r\n)\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config)\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\r\n )\r\n })\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing\r\n if (installingWorker == null) {\r\n return\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\r\n )\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration)\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.')\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error during service worker registration:', error)\r\n })\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type')\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload()\r\n })\r\n })\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.',\r\n )\r\n })\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister()\r\n })\r\n }\r\n}\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport './index.css'\r\nimport App from './App'\r\nimport * as serviceWorker from './serviceWorker'\r\n\r\nReactDOM.render(, document.getElementById('root'))\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister()\r\n","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}