{"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/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/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","IsUserAuthenticated","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","Array","isArray","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","includes","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","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","ReportFilter","filters","staticFilters","siteStatusFilter","dynamicFilters","filteringFields","downloadBox","ReportCSV","downloadReport","keys","range","fileResponse","blob","URL","createObjectURL","document","createElement","appendChild","click","remove","regionContainer","borderColor","loadMore","RegionGrouping","preloadedSize","loadStep","setGroup","g","onExpand","siteContainer","flex","siteData","dynamicContainer","SiteGrouping","completelyLoaded","setCompletelyLoaded","hideLoadCompleteSiteButton","every","customerSiteFileGuid","customerSiteFileExtension","placementFieldName","dynamicFieldName","DynamicGrouping","groupings","serialDetailDataContainer","flexDirectison","serialDetailDataHeader","serialDetailDecomissionedLabel","serialDetailData","serialDetailDataLine","serialDetailDataName","DisplayFormattedText","formattedText","replace","whiteSpace","SerialDetailData","getStringFieldValue","getSelectFieldValue","textFields","getDateFieldValue","testComment","dateInstalled","dateInstalledDate","getAge","serialDetailChart","endOfLifeContainer","relative","endOfLife","left","endOfLifeVisual","EndOfLifeChart","getEndOfLife","age","lifeTime","customerEndOfLifeMonths","thickness","serialDetailDownload","SerialDetailDownload","getFileFieldValue","downloadFields","borderTop","SerialDetail","ReportGrouping","dynamicFieldGroupers","groupingFields","fd","function","displayNameFunction","o","groupers","grouper","groups","groupBy","sort","b","GroupRecords","filtersValues","filteredRecords","fitlerIds","filterId","dynamicField","df","ageField","toLowerCase","searchableFields","sf","collapseButton","bottom","buttonText","parseInt","ReportService","GetGroupers","FilterRecords","searchedRecords","SearchRecords","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","selectedFile","itemIndex","currentActiveIndex","processNextFile","validationResult","setValidationResult","uploadResult","setUploadResult","isValidating","setIsValidating","isUploading","setIsUploading","uploadPercentage","resetState","startValidation","getFileName","VerifyFileName","res","exists","uploadFile","UploadFileQR","uploaded","toFixed","dropzoneStyle","dropzoneStyleActive","VerifyUploadFile","useTheme","isSmallScreen","down","selectedFiles","setSelectedFiles","setCurrentActiveIndex","useDropzone","onDrop","acceptedFiles","getRootProps","getInputProps","isDragActive","Container","SerialHash","useParams","searchResults","setSearchResults","handleViewFile","fileUrl","GetHashFiles","elevation","originalFileName","testDate","screen","overflow","ServiceTrackerThunkActionCreators","getAppData","fetchers","getFieldData","all","GetFieldDefinitions","React","LinearProgress","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.1d90f64b.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) {\r\n var auth = this.GetAuth()\r\n if (auth && this.IsUserAuthenticated()) {\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 '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 = ({ setPath, role, component: Component, ...rest }) => {\r\n if (rest.path === '/') {\r\n return (\r\n \r\n AuthService.IsAtLeast(role) ? (\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) ? (\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('AustinEmployee') ? (\r\n <>\r\n \r\n
props.setPath('/newSerialDetail')}>\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') ? (\r\n \r\n
props.setPath('/customers')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
props.setPath('/users')}>\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('AustinAdmin') ? (\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 \r\n {props.secondaryLabel}\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 \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\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\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 function cleanUp() {\r\n props.setSerialDetail(null, [])\r\n var fields = props.fields.map((x) => ({ ...x, isDirty: false }))\r\n props.setFieldDefinitions(fields)\r\n }\r\n return 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 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='Delete'\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 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 (model.roleType === 3) {\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 User));\r\n \r\n \r\n \r\n \r\n \r\n {props.user.roleType === 3 ? (\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\r\nexport async function getReport(id) {\r\n return async (dispatch, getState) => {\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 { 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\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 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 } 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\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 [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 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 return (\r\n \r\n \r\n \r\n Site\r\n {props.data.key}\r\n \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 {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\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 \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 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 return (\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\nexport default EndOfLifeChart\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 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 },\r\n}))\r\n\r\nfunction SerialDetailDownload(props) {\r\n const classes = useStyles()\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 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 \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\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) {\r\n var grouper = groupers[0]\r\n var groups = data.groupBy(grouper.function)\r\n if (grouper.type === 'Site') {\r\n groups = groups.sort((a, b) =>\r\n grouper.displayNameFunction(a.key) < grouper.displayNameFunction(b.key)\r\n ? -1\r\n : grouper.displayNameFunction(a.key) >\r\n grouper.displayNameFunction(b.key)\r\n ? 1\r\n : 0,\r\n )\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: g.group,\r\n type: grouper.type,\r\n }))\r\n }\r\n\r\n return groups.map((g) => ({\r\n key: grouper.displayNameFunction(g.key),\r\n group: this.GroupRecords(g.group, groupers.slice(1)),\r\n type: grouper.type,\r\n }))\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 }\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, { 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/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\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\nfunction Report(props) {\r\n const classes = useStyles()\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 const handleFilterChange = (change) => {\r\n props.setCollapsed(true)\r\n props.setField({ [change.id]: { value: change.value, type: change.type } })\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 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 var groupedDetails = ReportService.GroupRecords(searchedRecords, groupers)\r\n var groups = groupedDetails.map((gd, i) => (\r\n props.setCollapsed(false)}\r\n collapsed={props.collapsed}\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 \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":""}