{"version":3,"sources":["components/login/login-background.jpg","components/login/login-background480.jpg","components/login/login-background720.jpg","components/login/login-background1080.jpg","components/menu/main-menu/6410_Conti_360_Logo_RGB_Black.png","components/menu/main-menu/trukfix-logo-data.png","components/home/user-guide.pdf","components/home/terms-of-use.pdf","components/home/privacy-statement.pdf","components/OpenSans-Regular.ttf","utils/token.ts","utils/colours.ts","components/input/styles.ts","components/field-errors/styles.ts","components/field-errors/FieldErrors.tsx","components/input/Input.tsx","components/select/styles.ts","components/select/Select.tsx","components/button/styles.ts","components/button/Button.tsx","utils/screens.ts","components/login/styles.ts","utils/ValidationResult.ts","api/Responses.ts","contexts/ApiContext.ts","api/utils.ts","api/Api.ts","components/general-errors/styles.ts","components/modal/styles.ts","components/modal/Modal.tsx","components/general-errors/GeneralErrors.tsx","components/spinner/styles.ts","components/spinner/Spinner.tsx","components/login/Login.tsx","components/phone-us/button/styles.ts","components/phone-us/button/Button.tsx","components/phone-us/default-number/styles.ts","components/phone-us/default-number/DefaultNumber.tsx","components/phone-us/select-number/styles.ts","components/phone-us/select-number/SelectNumber.tsx","components/phone-us/PhoneUs.tsx","components/menu/main-menu/styles.ts","components/menu/main-menu/MainMenu.tsx","components/menu/sub-menu/styles.ts","components/menu/icon/styles.ts","components/menu/icon/Icon.tsx","components/menu/sub-menu/SubMenu.tsx","components/menu/styles.ts","components/menu/Menu.tsx","components/content/styles.ts","components/content/Content.tsx","components/home/styles.ts","components/home/button/styles.ts","components/home/button/Button.tsx","components/home/StandardHome.tsx","components/home/SupplierGuideComingSoon.tsx","components/health-safety-warning/styles.ts","components/health-safety-warning/HealthSafetyWarning.tsx","components/home/SupplierHome.tsx","components/home/Home.tsx","components/notifications/styles.ts","components/notifications/notification-bubble/styles.ts","utils/parseNotification.ts","components/notifications/notification-bubble/bubbleContent/BubbleContent.tsx","components/notifications/notification-bubble/noticeBubble/NoticeBubble.tsx","components/notifications/notification-bubble/warningBubble/WarningBubble.tsx","components/notifications/notification-bubble/NotificationBubble.tsx","utils/Interval.ts","components/notifications/Notifications.tsx","components/textarea/styles.ts","components/textarea/TextArea.tsx","components/breakdown/single-field-component/styles.ts","components/breakdown/single-field-component/SingleFieldComponent.tsx","components/breakdown/additional-information/AdditionalInformation.tsx","components/breakdown/customer/styles.ts","components/breakdown/customer/Customer.tsx","components/breakdown/vehicle-availability/styles.ts","components/breakdown/vehicle-availability/time-slot-selection/styles.ts","components/check-box/styles.ts","components/check-box/CheckBox.tsx","components/breakdown/vehicle-availability/time-slot/styles.ts","components/breakdown/vehicle-availability/time-slot/TimeSlot.tsx","components/breakdown/vehicle-availability/utils.ts","components/breakdown/vehicle-availability/time-slot-selection/TimeSlotSelection.tsx","components/breakdown/vehicle-availability/VehicleAvailability.tsx","components/breakdown/confirmation/styles.ts","components/breakdown/confirmation/Confirmation.tsx","components/breakdown/contact-caller/styles.ts","components/breakdown/contact-caller/ContactCaller.tsx","components/breakdown/location/manual-location/styles.ts","components/breakdown/location/manual-location/ManualLocation.tsx","components/breakdown/location/automatic-location/getting-location/styles.ts","components/breakdown/location/automatic-location/getting-location/GettingLocation.tsx","components/breakdown/location/automatic-location/location-failed/styles.ts","components/breakdown/location/automatic-location/location-failed/LocationFailed.tsx","components/breakdown/location/automatic-location/styles.ts","components/breakdown/location/automatic-location/AutomaticLocation.tsx","components/breakdown/location/Location.tsx","components/breakdown/location-type/styles.ts","components/breakdown/location-type/LocationType.tsx","components/breakdown/mileage/styles.ts","components/breakdown/mileage/Mileage.tsx","components/breakdown/purchase-order-defect-number/PurchaseOrderDefectNumber.tsx","components/breakdown/summary/styles.ts","components/job-details/contact-information/styles.ts","components/job-details/job-category/styles.ts","components/job-details/job-category/JobCategory.tsx","components/job-details/job-sub-category/styles.ts","components/job-details/job-sub-category/JobSubCategory.tsx","components/job-details/contact-information/ContactInformation.tsx","components/job-details/location-details/styles.ts","components/job-details/location-details/LocationDetails.tsx","components/breakdown/tyre-details/styles.ts","components/image-gallery/styles.ts","components/image-gallery/thumbnail/styles.ts","components/image-gallery/thumbnail/Thumbnail.tsx","components/modal/image-viewer/styles.ts","components/modal/image-viewer/ImageViewer.tsx","components/image-gallery/ImageGallery.tsx","components/breakdown/tyre-details/TyreDetails.tsx","components/job-details/job-overview/styles.ts","components/job-details/job-overview/JobOverview.tsx","components/job-details/availability/styles.ts","components/job-details/availability/Availability.tsx","contexts/UserContext.ts","components/breakdown/summary/Summary.tsx","components/breakdown/vehicle/styles.ts","components/breakdown/vehicle/Vehicle.tsx","components/breakdown/work-required/configuration/position-work-required/work-type/styles.ts","components/breakdown/work-required/configuration/position-work-required/work-type/WorkType.tsx","components/breakdown/work-required/configuration/position-work-required/removal-reason-type/styles.ts","components/breakdown/work-required/configuration/position-work-required/removal-reason-type/RemovalReasonType.tsx","components/breakdown/work-required/configuration/position-work-required/tyre-size/styles.ts","components/breakdown/work-required/configuration/position-work-required/tyre-size/TyreSize.tsx","components/breakdown/work-required/configuration/position-work-required/list-component/styles.ts","components/breakdown/work-required/configuration/position-work-required/list-component/ListComponent.tsx","components/camera/styles.ts","components/camera/Camera.tsx","components/breakdown/work-required/configuration/position-work-required/tyre/Tyre.tsx","components/breakdown/work-required/configuration/position-work-required/husbandry/Husbandry.tsx","components/breakdown/work-required/configuration/position-work-required/prompt/styles.ts","components/breakdown/work-required/configuration/position-work-required/prompt/Prompt.tsx","components/breakdown/work-required/configuration/position-work-required/PositionWorkRequired.tsx","components/breakdown/work-required/configuration/styles.ts","components/breakdown/work-required/configuration/Configuration.tsx","components/breakdown/work-required/configuration-chooser/styles.ts","components/breakdown/work-required/configuration-chooser/configuration-preview/styles.ts","components/breakdown/work-required/configuration-chooser/configuration-preview/ConfigurationPreview.tsx","components/breakdown/work-required/configuration-chooser/ConfigurationChooser.tsx","components/breakdown/work-required/WorkRequired.tsx","components/breakdown/save-or-cancel/styles.ts","components/breakdown/save-or-cancel/SaveOrCancel.tsx","components/breakdown/contacts/styles.ts","components/breakdown/contacts/Contacts.tsx","components/breakdown/Breakdown.tsx","components/breakdowns-in-progress/styles.ts","components/breakdowns-in-progress/BreakdownsInProgress.tsx","components/todays-jobs/styles.ts","components/todays-jobs/job-result/styles.ts","components/job-location-type/job-location-type-icon/styles.ts","components/job-location-type/job-location-type-icon/JobLocationTypeIcon.tsx","components/job-status/styles.ts","components/job-status/JobStatusIcon.tsx","components/todays-jobs/job-result/JobResult.tsx","components/job-details/styles.ts","components/job-details/tyre-details/styles.ts","components/job-details/tyre-details/TyreDetails.tsx","components/job-details/job-history/styles.ts","components/job-details/job-history/JobHistory.tsx","components/job-details/additional-information/styles.ts","components/job-details/additional-information/AdditionalInformation.tsx","components/job-details/husbandry-details/styles.ts","components/job-details/husbandry-details/HusbandryDetails.tsx","components/job-details/wheel-security/styles.ts","components/job-details/wheel-security/WheelSecurity.tsx","components/job-details/JobDetails.tsx","components/todays-jobs/RecentJobs.tsx","components/search-jobs/styles.ts","components/search-jobs/job-result/styles.ts","components/search-jobs/job-result/JobResult.tsx","components/search-jobs/SearchJobs.tsx","components/menu/sub-menu/notification-icon/styles.ts","components/menu/sub-menu/notification-icon/NotificationIcon.tsx","components/menu/sub-menu/LoggedInSubMenu.tsx","components/menu/LoggedInMenu.tsx","components/tech/documents/styles.ts","components/tech/documents/Documents.tsx","components/tech/documents/SupplierDocuments.tsx","components/tech/allocated-jobs/styles.ts","components/tech/allocated-jobs/AllocatedJob/styles.ts","components/tech/allocated-jobs/AllocatedJob/AllocatedJob.tsx","components/tech/allocated-jobs/AllocatedJobs.tsx","components/tech/job-management/styles.ts","components/tech/job-management/button/styles.ts","components/tech/job-management/button/Button.tsx","components/tech/job-management/job-overview/styles.ts","components/tech/job-management/job-overview/JobOverview.tsx","components/tech/job-details/styles.ts","components/tech/job-details/JobDetails.tsx","components/tech/en-route/styles.ts","components/date-time-input/styles.ts","components/date-time-input/DateTimeInput.tsx","components/tech/en-route/EnRoute.tsx","components/tech/job-takeover/styles.ts","components/tech/job-takeover/JobTakeover.tsx","components/tech/on-scene/styles.ts","components/tech/on-scene/OnScene.tsx","components/tech/work-complete/styles.ts","components/tech/wheel-security/styles.ts","components/tech/wheel-security/WheelSecurity.tsx","components/tech/work-complete/contact-tsu/styles.ts","components/tech/work-complete/contact-tsu/ContactTSU.tsx","components/tech/work-complete/PositionsMissingPhotos.tsx","components/tech/work-complete/FittedDetails.tsx","components/tech/work-complete/FailureDescription.tsx","components/tech/work-complete/RemovedDetails.tsx","components/tech/work-complete/PositionContainer.tsx","components/tech/work-complete/PositionWorkConfirmation.tsx","components/tech/work-complete/WorkConfirmation.tsx","components/tech/work-complete/HusbandryWorkConfirmation.tsx","components/tech/work-complete/HusbandryConfirmation.tsx","components/tech/work-complete/WorkComplete.tsx","components/tech/job-cancelled/styles.ts","components/tech/job-cancelled/JobCancelled.tsx","components/time-reason/styles.ts","components/time-reason/TimeReason.tsx","components/tech/returned-home/styles.ts","components/tech/returned-home/ReturnedHome.tsx","components/tech/configuration/styles.ts","components/tech/gallery/styles.ts","components/tech/gallery/Gallery.tsx","components/tech/configuration/Configuration.tsx","components/tech/camera/Camera.tsx","components/tech/documents/CustomerDocuments.tsx","components/tech/job-management/JobManagement.tsx","components/content/LoggedInContent.tsx","components/GlobalStyle.tsx","components/styles.ts","i18n/resources.ts","i18n/i18n.ts","serviceWorker.ts","components/App.tsx","index.tsx"],"names":["module","exports","expired","token","Error","decoded","jwt","decode","exp","Date","colors","lightOrange","darkOrange","grey1","grey2","grey3","grey4","lightBlue","darkBlue","lightGreen","darkGreen","lightRed","extraLightRed","white","black","darkRed","pastelGreen","pastelRed","yellow","lightYellow","Input","styled","input","invalid","colours","FieldErrors","ul","li","props","t","useTranslation","errors","map","e","i","key","hasErrors","undefined","length","Select","select","Wrapper","div","Button","button","colour","screens","small","medium","large","extraLarge","Login","background480","background720","background1080","background","Background","Label","label","HelpMessage","p","_Button","_Input","_Select","ValidationResult","this","field","error","v","getErrors","push","val","Success","data","kind","Failure","NoContent","response","Unauthorised","NetworkError","isSuccess","isFailure","isNoContent","mapSuccess","f","ApiContext","createContext","parseResponse","a","status","json","result","ok","ResponseError","parseBlob","blob","getHeaders","version","Accept","addAuthorizationHeader","opts","headers","Authorization","options","fetchWithRetry","url","fetch","globalState","setGlobalToken","refreshToken","method","refreshed","unauthorised","console","Api","onNetworkError","onUnauthenticated","params","queryString","querystring","encode","fullUrl","networkError","body","JSON","stringify","form","tokenExpired","refreshResult","useApi","ctx","useContext","useApiContext","useMemo","Container","Header","h2","List","ListItem","Parent","IconWrapper","span","Model","useEffect","document","addEventListener","onKeyPressed","removeEventListener","event","keyCode","onClose","onClick","icon","faTimes","size","children","GeneralErrors","header","Modal","stretchDelay","keyframes","First","Second","Third","Fourth","Fifth","Spinner","onLogin","useState","username","setUsername","password","setPassword","country","setCountry","countries","setCountries","VR","empty","vr","setVr","setErrors","api","loading","setLoading","login","post","countryId","id","datasetId","tokenPromise","countriesPromise","get","tokenResponse","validate","add","handleLoginClick","htmlFor","autoComplete","value","onChange","target","type","parseInt","find","c","disabled","hidden","description","Icon","FontAwesomeIcon","number","href","faPhone","DefaultNumber","SelectNumber","contactNumber","PhoneUs","MainMenu","Image","img","src","contiLogo","alt","trukfixLogo","SubMenu","onPhoneClick","onHomeClick","faHome","MenuContainer","Menu","Content","SubWrapper","activeComponent","setActiveComponent","component","Home","Grid","Link","Text","onBreakdownClick","onBreakdownsInProgressClick","onTodaysJobsClick","onSearchClick","onPhoneUsClick","loggedInToUs","faTire","faEdit","faClock","faSearch","userGuide","rel","faBook","termsOfUse","faFileSignature","privacyStatement","faUserSecret","SupplierGuideComingSoon","onBackClick","HealthSafetyWarning","WarningIcon","continueButton","showContinue","onContinue","faExclamationTriangle","SupplierHome","onAllocatedJobsClick","onSupplierDocumentsClick","showSupplierGuideComingSoon","setShowSupplierGuideComingSoon","faClipboardList","faFile","supplier","StandardHome","Notifications","NotificationHeader","NotificationList","NotificationGroup","Bubble","NotificationContent","NotificationSpacer","hr","NotificationIcon","GreenIcon","YellowIcon","NotificationDate","NoticeBubble","WarningBubble","NotificationDetails","BubbleContent","parsers","1","notification","parsed","parse","eta","2","revisedEta","3","enRoute","4","onScene","5","completed","6","parseNotification","n","parsersForType","typeId","parser","faTruck","vehicleReg","jobId","faCheckCircle","NotificationBubble","useInterval","callback","delay","frontload","savedCallback","useRef","current","tick","setInterval","clearInterval","groupNotifications","notifications","groups","reduce","acc","Object","values","sort","b","localeCompare","group","lastViewedNotificationId","setLastViewedNotificationId","setNotifications","firstLoad","setFirstLoad","xs","x","date","merged","maxId","Math","max","grouped","item","TextArea","textarea","SingleFieldComponent","_TextArea","onCancel","handleChange","inputComponent","trim","AdditionalInformation","initialValue","reference","onComplete","onFail","additionalInformation","setAdditionalInformation","len","handleContinue","Customer","customer","setCustomer","customers","setCustomers","submitCustomer","customerId","Id","handleContinueClick","orderedCustomers","name","Title","SubTitle","ContinueButton","BtnContainer","AllDayContainer","CurrentDayContainer","CurrentDay","CheckBox","isChecked","onCheckBoxClicked","Timing","TimeSlot","onToggle","slot","checked","prefix","time","from","to","adjustSlotsToDate","slots","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","days","isSameTime","y","getHours","isSameHour","getMinutes","isSameMinute","getSeconds","isSameSecond","getMilliseconds","isSameMillisecond","slotTimesEqual","allDaySlot","setHours","TimeSlotSelection","availableSlots","selectedSlots","onSlotSelect","onSlotDeselect","selected","ss","getTime","handleSlotToggle","submitTimeslots","availability","formatISO","VehicleAvailability","setAvailableSlots","allDaySelected","setAllDaySelected","setSelectedSlots","startOfDay","startOfToday","daysFromToday","differenceInDays","canClickPreviousDay","canClickNextDay","handleConfirmClicked","adjustedToDate","filtered","filter","Confirmation","JobNumber","fullySubmitted","additionalText","ContactCaller","WhoButton","ButtonContainer","SomeoneElseContainer","setName","telephone","setTelephone","depot","setDepot","driverName","userWithVehicle","setUserWithVehicle","theirName","setTheirName","driverTelephone","theirTelephone","setTheirTelephone","contactDepotRequired","setContactDepotRequired","submitContactCaller","contactName","contactTelephone","contactDepot","getOptionLabel","option","location","getOptionValue","ManualLocation","initialLocation","setLocation","google","maps","places","AutocompleteService","service","AutocompleteSessionToken","sessionToken","submitLocation","coordinates","getLocations","Promise","resolve","_","getPlacePredictions","predictions","loadOptions","inputValue","debounced","debounce","cacheOptions","o","Array","isArray","placeholder","styles","control","provided","width","valueContainer","padding","indicatorSeparator","display","indicatorsContainer","LoadingText","GettingLocation","WarningContainer","WarningParagraph","LocationFailed","onRetry","onManualLocation","LoadingContainer","reverseGeocode","coords","reject","position","lat","latitude","lng","longitude","Geocoder","geocode","GeocoderStatus","OK","formatted_address","getLocation","onAutoLocation","onError","navigator","geolocation","getCurrentPosition","pos","formattedAddress","timeout","enableHighAccuracy","AutomaticLocation","setError","handleYesClick","mapContainerClassName","zoom","center","fullscreenControl","clickableIcons","mapTypeControl","streetViewControl","draggable","Location","useAutomaticLocation","enteringManualLocation","setEnteringManualLocation","manualLocation","setManualLocation","LocationType","BackButton","faRoad","faWrench","faWarehouse","faQuestion","lt","locationTypes","setLocationTypes","selectLocationType","orderedLocationTypes","Warning","ValidationWarning","Mileage","mileage","setMileage","lastSubmittedMileage","setLastSubmittedMileage","submitted","setSubmitted","submitMileage","toString","digits","replace","isNaN","PurchaseOrderDefectNumber","podn","setPodn","submitPodn","purchaseOrderDefectNumber","Summary","h3","DetailContainer","Detail","DetailContent","ContactInformation","JobCategory","JobCategoryIcon","JobCategoryContent","TitleContent","EditButton","title","JobSubCategory","onEditClicked","faPencilAlt","onCallerEdit","onDriverEdit","faUser","showEndUser","endUser","LocationDetails","MapContainer","Map","LocationEditClicked","faMapMarkedAlt","TyreDetails","DetailBlock","Thumbnails","Thumbnail","Position","ImageViewer","ImageGallery","images","fullImage","setFullImage","withThumbnails","thumbnailSrc","image","index","workRequired","jobDetailsEditClicked","otpKey","showImages","setShowImages","photoIds","tyreSize","removalReason","husbandryRequested","faImages","JobOverview","showForSummary","mileageEditClicked","tsuNumber","jobDate","Fragment","podnEditClicked","poNumber","locationTypeEditClick","locationType","customerEditClicked","vehicleEditClicked","attachedVehicleReg","sub","crossesMidnight","start","end","Availability","availabilityEditClicked","groupedAvailability","curr","keys","faCalendarAlt","UserContext","useUserContext","onEditCallerDetails","onEditDriverDetails","onEditMileage","onEditLocation","onEditLocationType","onEditCustomer","onEditVehicle","onEditWorkRequired","onEditAvailability","onEditAdditionalInformation","onEditPurchaseOrderDefectNumber","onEditContacts","summary","setSummary","setKey","user","submitBreakdown","mapped","r","handleSubmitClick","contactCaller","breakdownVehicle","vehicle","breakdownLocation","workRequested","contacts","attachedVehicleRegistration","registration","enableContacts","wr","faInfo","faEnvelope","count","Vehicle","getNewOptionData","existing","isValidNewOption","selectOptions","toLowerCase","indexOf","getVehicles","submitVehicle","attachedVehicle","SuspendedWarning","setVehicle","setAttachedVehicleRegistration","displaySuspendedWarning","vehicleErrors","onCreateOption","isClearable","borderColor","WorkType","ButtonText","IconContainer","Heading","onSelect","RemovalReasonType","faEllipsisH","TyreSize","_FieldErrors","DoesNotMatchHistoryWarning","isSkippable","onSkip","positionId","defaultTyreSize","setDefaultTyreSize","setTyreSize","results","forEach","tyreSizeIsSelected","doesNotMatchHistory","ListComponent","heading","Gallery","FileSelect","UploadContainer","UploadButton","ConfirmButton","Upload","Footer","alert","Trash","ImageContainer","DataUsageWarning","Camera","photoLimit","photoCount","fileUrls","setFileUrls","files","setFiles","tooManyPhotos","setTooManyPhotos","noImages","file","faTrash","newFileURLs","newFiles","onRemoveImage","faCamera","currentFileCount","newFileCount","newFileUrls","URL","createObjectURL","multiple","accept","faCheck","Tyre","isRemovalReasonDamage","setIsRemovalReasonDamage","setRemovalReason","removalReasons","setRemovalReasons","submitTyre","removalReasonId","photos","FormData","append","photo","postForm","complete","rr","isDamage","Number","Husbandry","husbandry","setHusbandry","husbandries","setHusbandries","tyreSizeSkipped","setTyreSizeSkipped","submitHusbandry","husbandryId","h","Prompt","PromptText","onAddWork","onChangeWork","onRemoveWork","hasExistingWork","PositionWorkRequired","onRemove","workType","setWorkType","setHasExistingWork","prompted","setPrompted","handleRemoveWork","delete","Configuration","hasWork","configuration","onChangeConfiguration","editingPosition","setEditingPosition","positionIdsWithWork","setPositionsWithWork","promptedForLostWork","setPromptedForLostWork","workAlreadySubmitted","positions","axleNumber","axles","axle","positionNumber","className","newPositionIdsWithWork","ConfigurationChooser","ButtonRow","LittleButton","BigButton","ArrowButton","PreviewHolder","Axle","AxleType","hasPosition","PositionPreview","AxlePreview","axleType","ConfigurationPreview","axleIsTwinned","axleIsDrive","filterConfigurations","configurations","axleCount","driveAxleCount","twinned","axleCountFilter","getAxleCountFilter","driveAxleCountFilter","getDriveAxleCountFilter","twinnedFilter","getTwinnedFilter","NoConfigurationsFound","onChoose","vehicleType","setVehicleType","setAxleCount","setDriveAxleCount","axlesTwinned","setAxlesTwinned","setConfigurations","configurationIndex","setConfigurationIndex","enoughDataForConfigurationSelection","filteredConfigurations","faChevronLeft","faChevronRight","WorkRequired","setConfiguration","submitResponse","handleChooseConfiguration","config","cancelBreakdown","SaveOrCancel","canSave","onReturnToBreakdown","handleCancel","Contacts","Contact","addContact","contact","removeContact","isValidContact","ats","match","setContacts","setContact","handleAddClick","handleRemoveClick","updated","sorted","getBreakdownInProgress","getFirstComponentForResumedBreakdown","breakdown","Breakdown","criticalError","setCriticalError","reachedSummary","setReachedSummary","submissionResult","setSubmissionResult","showCancelPrompt","setShowCancelPrompt","breakdownInProgress","setBreakdownInProgress","breakdownIsRoadside","canSaveForLater","handleHealthSafetyWarningComplete","showNextComponent","nextComponent","BreakdownsInProgress","BreakdownContent","BreakdownButtons","BreakdownButton","getBreakdownsInProgress","breakdowns","created","expires","BreakdownList","setBreakdowns","JobsContent","JobResults","JobListing","JobDetails","DetailsContainer","Icons","JobLocation","height","JobLocationType","JobStatusIcon","GetStatusIcon","faHandHoldingBox","faLocationArrow","faFlagCheckered","faThumbsUp","jobStatus","JobResult","onViewJob","HeaderDetails","Spacer","SectionTitle","DateDetail","HeaderContainer","DetailColumn","DetailItem","NoItems","tyre","make","pattern","JobHistory","serviceProvider","allocated","displayDate","HusbandryDetails","notNullOrEmpty","s","wheelsRemoved","torqueSetting","wrenchNumber","retorqued","reasonNotRetorqued","tagNumber","job","setJob","timeAllocated","estimatedTimeOfArrival","onSceneTime","handleSummaryPdfClick","getBlob","filename","File","link","createElement","download","click","revokeObjectURL","attachedRegistration","tyres","faImage","statusId","Results","jobs","NoRecentJobs","RecentJobs","setJobs","viewingJobId","setViewingJobId","SearchContent","FieldContainer","SearchFields","Search","SearchResults","SearchLabel","JobDate","JobFlagContainer","SearchJobs","setRegistration","setJobId","searchById","searchByRegistration","handleSearchClick","Count","notificationCount","setNotificationCount","faBell","LoggedInSubMenu","onNotificationClick","onLogoutClick","userTypeId","faSignOut","Documents","Document","FileDetails","FileDate","NoDocumentsFound","documentType","effective","expiry","faFileDownload","documents","SupplierDocuments","setDocuments","documentsWithUrls","d","AllocatedJob","Filters","UserJobsCheckBox","loneWorkerStatus","JobDetailsContainer","convertLocationType","locationTypeId","jobDetail","onClicked","vehicleRegistration","faHourglassEnd","serviceProviderDepot","AllocatedJobs","userId","userJobsFilter","setUserJobsFilter","customerFilter","setCustomerFilter","depotFilter","setDepotFilter","orderedJobs","j","allocatedFitter","depots","Set","loneWorkerWarning","Details","DetailOverview","AdditionalInfo","DetailTitle","WorkInstruction","WorkImage","JobWrapper","fullImageSource","setFullImageSource","workInstructionComponents","setWorkInstructionComponents","buildWorkInstruction","html","components","textBlock","blockId","openTag","search","closeTag","substring","text","idKey","dangerouslySetInnerHTML","__html","buildTextBlock","element","buildImageBlock","srcTag","srcEnd","source","handleWorkImageClicked","buildWorkInstructionComponents","wi","htmlMarkUp","getJobDetails","returnedHome","jobNumber","callerName","driverNumber","allocatedTyres","faTireFlat","allocatedHusbandries","requestedHusbandry","workInstructions","onReturn","EnRoute","Time","DateTime","InputWrapper","padValue","DateTimeInput","setTime","handleOnChange","datetime","enRouteTime","setEnRouteTime","JobTakeover","TextContent","TextWarning","takeOverDate","setTakeOverDate","takeOverJob","etaDate","onConfirmTakeover","OnScene","arrivedTime","setArrivedTime","WorkComplete","MissingPhotosWarning","WheelSecurity","reason","notRetorquedReasons","setNotRetorquedReasons","setWheelsRemoved","setRetorqued","setNotRetorquedReason","setWrenchNumber","setTorqueSetting","setTagNumber","model","reasonNotRetorquedId","notRetorquedReason","ContactTSU","PhoneIcon","_button","phoneNumber","PositionsMissingPhotos","onReturnToPhotos","getPatterns","isOption","FittedDetails","makes","setMake","setPattern","patterns","setPatterns","validationResult","setValidationResult","handleMakeChange","makeErrors","patternErrors","trimmed","FailureDescription","failureDescription","setFailureDescription","RemovedDetails","treadDepth","setTreadDepth","PositionContainer","PositionWorkConfirmation","confirmationRequired","fittedDetails","setFittedDetails","removedMake","removedPattern","getMakes","WorkConfirmation","setMakes","confirmedWork","setConfirmedWork","confirmedIds","pendingConfirmation","cr","includes","cw","HusbandryWorkConfirmation","unconfirmedHusbandry","HusbandryConfirmation","unconfirmedHusbandries","confirmedHusbandries","setConfirmedHusbandries","ch","submitCompletion","wheelSecurity","workCompleted","husbandriesNeedingConfirmation","confirmWheelSecurity","confirmWork","positionsMissingPhotos","setPositionsMissingPhotos","dateWorkCompleted","setDateWorkCompleted","dateEntered","setDateEntered","setWheelSecurity","contactTSU","setContactTSU","setUnconfirmedHusbandries","missingPhotos","unconfirmedWork","contactTsu","canSubmitAfterCompletion","getComponentState","submitWorkComplete","JobCancelled","onCancelled","reasons","setReasons","reasonId","setReasonId","cancel","TimeReason","isValidDate","orderedReasons","ReturnedHome","submitReturnedHome","NoPhotosFound","userPhotoCount","imageSources","setImageSource","showCamera","setShowCamera","setOtpKey","currentPhotoCount","setCurrentPhotoCount","maxPhotoCount","submitPhotos","onImagesSelected","onChangeConfig","editingPositionId","setEditingPositionId","editingPositionDescription","setEditingPositionDescription","positionWithWork","currentJob","setCurrentJob","updatedJob","configId","photosAddedCount","newPhoto","addedById","concat","photoSlotsLeft","showConfigChooser","setShowConfigChooser","selectedConfig","setSelectedConfig","CustomerDocuments","getJob","getStatus","JobManagement","onBackClicked","setJobStatus","handleCameraClicked","reloadJob","errorsToDisplay","setJobManagementActive","all","jobIsAllocatedToDifferentFitter","assignedFitterId","canTakeOverJob","canSubmitEnRoute","canSubmitOnScene","canSubmitCompletion","canSubmitReturnedHome","customerName","faClipboardListCheck","arrived","workComplete","cancelled","updatedStatus","LoggedInContent","onLogout","currentReference","setCurrentReference","currentJobId","setCurrentJobId","handleLogoutClick","handlePhoneClick","callCentreContactNumber","LoggedInMenu","GlobalStyle","createGlobalStyle","openSans","App","resources","en","translation","Username","Password","Country","Cancel","You","Continue","Skip","Retry","Yes","ETA","Size","Images","Damage","Other","No","DisplayDate","Errors","AVAILABILITY","AVAILABILITY_WITH_DATE","AVAILABILITY_DATE","Edit","Coordinates","View","Roadside","NOTIFICATION_NOFORMAT","NOTIFICATION_ALLOCATED_V1","NOTIFICATION_REVISEDETA_V1","NOTIFICATION_ENROUTE_V1","NOTIFICATION_ONSCENE_V1","NOTIFICATION_COMPLETED_V1","NOTIFICATION_REALLOCATED_V1","Back","Completed","DOCUMENT_EFFECTIVE","DOCUMENT_EXPIRY","Puncture","Husbandries","Expires","Description","Add","fr","Client","Photos","Make","Pattern","Arrived","STEER","DRIVE","TRAILER","Confirm","ASAP","Submit","Repair","Retorque","Rebalance","Regroove","Mismatch","Worn","Timings","LIFT","Twinning","es","locale","enGB","i18n","use","initReactI18next","init","fallbackLng","keySeparator","interpolation","escapeValue","format","toUpperCase","fnsFormat","parseUser","tkn","languageId","window","Provider","setUser","warnUnauthenticated","setWarnUnauthenticated","handleLogout","unstable_batchedUpdates","enUS","changeLanguage","frCA","setLocale","isLocalhost","Boolean","hostname","registerValidSW","swUrl","serviceWorker","register","then","onupdatefound","installingWorker","installing","onstatechange","state","controller","log","onUpdate","onSuccess","catch","ReactDOM","render","getElementById","process","origin","contentType","ready","unregister","reload","checkValidServiceWorker"],"mappings":"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AAa,aACb,uBAAwB,4BACxB,2CACE,sEACF,WAAY,qBACZ,uBAAwB,+BACxB,uBAAwB,gCACxB,0BAA2B,kCAC3B,eAAgB,sBAChB,kBAAmB,kCACnB,wBAAyB,2BACzB,gBAAiB,qBACjB,0BACE,kFACFC,GAAI,MACJC,YAAa,gBACb,+CACE,2CACF,oFACE,4FACF,mBAAoB,gCACpB/6B,SAAU,SACV,gEACE,oFACFg7B,OAAQ,UACRryC,MAAO,SACP,mHACE,qHACF,kFACE,oGACF,kCACE,kEACF,iCACE,4FACF,+BACE,0FACF,8CACE,mGACF,2DACE,0IACF,0EACE,mGACF,kCACE,mDACFsyC,aAAc,kBACdC,uBAAwB,sBACxBC,kBAAmB,cACnB,oBAAqB,iCACrB,iBAAkB,qBAClB,yBAA0B,gCAC1BjpB,aAAc,mBACd,iBAAkB,2BAClB,eAAgB,iBAChB,oBAAqB,8BACrB,cAAe,oBACf,mBAAoB,gCACpB,eAAgB,0BAChB,aAAc,gBACd,iCAAkC,2CAClC,gBAAiB,qBACjBkpB,KAAM,YACNC,YAAa,iBACbxrB,SAAU,WACV0K,UAAW,0BACX,cAAe,qBACf,cAAe,sBACf+gB,KAAM,MACN,2BACE,4DACF,+BAAgC,8BAChC,8EACE,iHACFzjC,KAAM,UACN,8CACE,8DACF,sFACE,4GACF0jC,SAAU,mBACV,mBAAoB,2BACpB,eAAgB,yBAChBC,sBACE,oEACFC,0BACE,0GACFC,2BACE,+GACFC,wBACE,uFACFC,wBACE,4FACFC,0BACE,oGACFC,4BACE,8GACF,iCACE,4CACF,aAAc,oBACd,gBAAiB,2BACjB,2CACE,wDACF,sEACE,uGACFC,KAAM,SACN,YAAa,iBACb,yIACE,+LACF,WAAY,WACZC,UAAW,aACXtT,UAAW,YACXuT,mBAAoB,8BACpBC,gBAAiB,2BACjB,qBAAsB,oBACtB,4CACE,wDACF,kBAAmB,kBACnB,kCACE,6CACF,gBAAiB,yBACjB,sBAAuB,oCACvB,oBAAqB,0BACrB,yBAA0B,mCAC1B,qBAAsB,wBACtB,oBAAqB,uCACrB,eAAgB,2BAChB,kMACE,o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,eACdC,OAAQ,UACRC,MAAO,OACP,iBAAkB,yBAClB,iBAAkB,wBAClB,eAAgB,yBAChB,gBAAiB,oBACjB,iBAAkB,wBAClB,YAAa,iCACb,YAAa,iCACb,uBAAwB,8BACxB,2CACE,sCACF,WAAY,kBACZ,uBAAwB,+BACxB,uBAAwB,gCACxB,0BAA2B,+BAC3B,eAAgB,sBAChB,kBAAmB,mBACnB,wBAAyB,4BACzB,gBAAiB,eACjB,0BAA2B,wCAC3BC,GAAI,KACJC,YAAa,gBACb,+CACE,uDACF,oFACE,2EACF,mBAAoB,uBACpB/6B,SAAU,UACV,gEACE,0EACFg7B,OAAQ,UACRryC,MAAO,QACP,mHACE,0HACF,kFACE,yGACF,kCACE,qFACF,iCACE,uFACF,+BACE,6EACF,8CACE,oGACF,2DACE,kJACF,0EACE,wGACF,kCACE,qDACFsyC,aAAc,kBACdC,uBAAwB,sBACxBC,kBAAmB,cACnB,oBAAqB,0BACrB,iBAAkB,qBAClB,yBAA0B,2BAC1BjpB,aAAc,iBACd,iBAAkB,gCAClB,eAAgB,sBAChB,oBAAqB,0BACrB,cAAe,uBACf,mBAAoB,4BACpB,eAAgB,qCAChB,aAAc,wDACd,iCAAkC,qCAClC,gBAAiB,sBACjBkpB,KAAM,SACNC,YAAa,cACbxrB,SAAU,cACV0K,UAAW,aACX,cAAe,sBACf,cAAe,sBACf+gB,KAAM,MACN,2BAA4B,+BAC5B,+BAAgC,2BAChC,8EACE,iIACFzjC,KAAM,SACN,8CACE,mDACF,sFACE,gGACF0jC,SAAU,eACV,mBAAoB,iCACpB,eAAgB,0BAChBC,sBACE,4DACFC,0BACE,iGACFC,2BACE,uGACFC,wBACE,kFACFC,wBACE,oFACFC,0BACE,4FACFC,4BACE,mGACF,iCAAkC,kCAClC,aAAc,iBACd,gBAAiB,4CACjB,2CACE,+CACF,sEACE,mGACFC,KAAM,SACN,YAAa,YACb,yIACE,sLACF,WAAY,YACZC,UAAW,aACXtT,UAAW,aACXuT,mBAAoB,+BACpBC,gBAAiB,0BACjB,qBAAsB,yBACtB,4CACE,2CACF,kBAAmB,mBACnB,kCACE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","file":"static/js/main.19a27fae.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/login-background.a3f45968.jpg\";","module.exports = __webpack_public_path__ + \"static/media/login-background480.f113c072.jpg\";","module.exports = __webpack_public_path__ + \"static/media/login-background720.2f874e17.jpg\";","module.exports = __webpack_public_path__ + \"static/media/login-background1080.d999a263.jpg\";","module.exports = __webpack_public_path__ + \"static/media/6410_Conti_360_Logo_RGB_Black.ed152c2a.png\";","module.exports = __webpack_public_path__ + \"static/media/trukfix-logo-data.5946dbc3.png\";","module.exports = __webpack_public_path__ + \"static/media/user-guide.a42d3440.pdf\";","module.exports = __webpack_public_path__ + \"static/media/terms-of-use.142b2b84.pdf\";","module.exports = __webpack_public_path__ + \"static/media/privacy-statement.2d9f4e50.pdf\";","module.exports = __webpack_public_path__ + \"static/media/OpenSans-Regular.629a55a7.ttf\";","import jwt from \"jsonwebtoken\";\r\n\r\nexport const expired = (token: string) => {\r\n if (!token) throw new Error(\"token must be provided\");\r\n\r\n const decoded = jwt.decode(token);\r\n if (!decoded || typeof decoded === \"string\")\r\n throw new Error(\"token could not be decoded\");\r\n\r\n const exp = decoded[\"exp\"] as number;\r\n const expiry = new Date(exp * 1000);\r\n return expiry <= new Date();\r\n};\r\n\r\nexport const getPhoneNumber = (token: string) => {\r\n if (!token) throw new Error(\"token must be provided\");\r\n\r\n const decoded = jwt.decode(token);\r\n if (!decoded || typeof decoded === \"string\")\r\n throw new Error(\"token could not be decoded\");\r\n\r\n return decoded[\"phoneNumber\"];\r\n};\r\n\r\nexport const getCountryId = (token: string) => {\r\n if (!token) throw new Error(\"token must be provided\");\r\n\r\n const decoded = jwt.decode(token);\r\n if (!decoded || typeof decoded === \"string\")\r\n throw new Error(\"token could not be decoded\");\r\n\r\n return parseInt(decoded[\"country\"]);\r\n};\r\n\r\nexport const getLanguageId = (token: string) => {\r\n if (!token) throw new Error(\"token must be provided\");\r\n\r\n const decoded = jwt.decode(token);\r\n if (!decoded || typeof decoded === \"string\")\r\n throw new Error(\"token could not be decoded\");\r\n\r\n return parseInt(decoded[\"language\"]);\r\n};\r\n\r\nexport const getUserTypeId = (token: string): number => {\r\n if (!token) throw new Error(\"token must be provided\");\r\n\r\n const decoded = jwt.decode(token);\r\n if (!decoded || typeof decoded === \"string\")\r\n throw new Error(\"token could not be decoded\");\r\n\r\n return parseInt(decoded[\"userType\"]);\r\n};\r\n\r\nexport const getUserId = (token: string): number => {\r\n if (!token) throw new Error(\"token must be provided\");\r\n\r\n const decoded = jwt.decode(token);\r\n if (!decoded || typeof decoded === \"string\")\r\n throw new Error(\"token must be provided\");\r\n\r\n return parseInt(decoded[\"sub\"]);\r\n};\r\n","const colors = {\r\n lightOrange: \"#ffa500\",\r\n darkOrange: \"#cc7200\",\r\n grey1: \"#707571\",\r\n grey2: \"#969b96\",\r\n grey3: \"#cdd2cd\",\r\n grey4: \"#f0f5eb\",\r\n lightBlue: \"#00a5dc\",\r\n darkBlue: \"#004eaf\",\r\n lightGreen: \"#2db928\",\r\n darkGreen: \"#057855\",\r\n lightRed: \"#ff2d37\",\r\n extraLightRed: \"#fecacd\",\r\n white: \"#fff\",\r\n black: \"#000\",\r\n darkRed: \"#cc0004\",\r\n pastelGreen: \"#ccffcc\",\r\n pastelRed: \"#ffd3b9\",\r\n yellow: \"#ffd700\",\r\n lightYellow: \"#fff099\"\r\n};\r\n\r\nexport default colors;\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../utils/colours\";\r\n\r\ntype InputProps = { invalid: boolean };\r\n\r\nconst Input = styled.input`\r\n background-color: ${({ invalid }: InputProps) =>\r\n invalid ? colours.extraLightRed : colours.white};\r\n border: 1px solid\r\n ${({ invalid }: InputProps) => (invalid ? colours.lightRed : colours.black)};\r\n box-sizing: border-box;\r\n border-radius: 5px;\r\n padding: 2px 5px;\r\n`;\r\n\r\nexport default { Input };\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../utils/colours\";\r\n\r\nconst FieldErrors = styled.ul``;\r\nconst Error = styled.li`\r\n color: ${colours.lightRed};\r\n`;\r\n\r\nexport default { FieldErrors, Error };\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport S from \"./styles\";\r\n\r\ntype Props = {\r\n errors: string[];\r\n};\r\n\r\nconst FieldErrors = (props: Props) => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n {props.errors.map((e, i) => (\r\n {t(e)}\r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default FieldErrors;\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport FieldErrors from \"../field-errors/FieldErrors\";\r\n\r\ntype Props = {\r\n errors?: string[];\r\n} & React.InputHTMLAttributes;\r\n\r\nconst Input = (props: Props) => {\r\n const { errors } = props;\r\n\r\n const hasErrors = errors !== undefined && errors.length > 0;\r\n\r\n return (\r\n
\r\n \r\n {hasErrors && }\r\n
\r\n );\r\n};\r\n\r\nexport default Input;\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../utils/colours\";\r\n\r\ntype SelectProps = { invalid: boolean };\r\n\r\nconst Select = styled.select`\r\n background-color: ${({ invalid }: SelectProps) =>\r\n invalid ? colours.extraLightRed : colours.white};\r\n border: 1px solid\r\n ${({ invalid }: SelectProps) =>\r\n invalid ? colours.lightRed : colours.black};\r\n box-sizing: border-box;\r\n border-radius: 5px;\r\n padding: 2px 0;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n & > ul {\r\n margin-top: 5px;\r\n }\r\n`;\r\n\r\nexport default { Select, Wrapper };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport FieldErrors from \"../field-errors/FieldErrors\";\r\n\r\ntype Props = {\r\n errors?: string[];\r\n} & React.SelectHTMLAttributes;\r\n\r\nconst Input = (props: Props) => {\r\n const { errors } = props;\r\n\r\n const hasErrors = errors !== undefined && errors.length > 0;\r\n\r\n return (\r\n \r\n \r\n {hasErrors && }\r\n \r\n );\r\n};\r\n\r\nexport default Input;\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../utils/colours\";\r\n\r\ntype Colour = \"ORANGE\" | \"GREY\";\r\n\r\ntype Props = {\r\n colour?: Colour;\r\n};\r\n\r\nconst Button = styled.button`\r\n background-color: ${props =>\r\n props.colour && props.colour === \"GREY\"\r\n ? colours.grey3\r\n : colours.lightOrange};\r\n border: none;\r\n padding: 5px;\r\n border-radius: 5px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: ${props =>\r\n props.colour && props.colour === \"GREY\"\r\n ? colours.grey2\r\n : colours.darkOrange};\r\n }\r\n\r\n &:disabled {\r\n background-color: ${colours.grey3};\r\n }\r\n`;\r\n\r\nexport default { Button };\r\n","import S from \"./styles\";\r\n\r\nconst Button = S.Button;\r\n\r\nexport default Button;\r\n","const screens = {\r\n small: `(min-width: 576px)`,\r\n medium: `(min-width: 768px)`,\r\n large: `(min-width: 992px)`,\r\n extraLarge: `(min-width: 1200px)`\r\n};\r\n\r\nexport default screens;\r\n","import styled from \"styled-components\";\r\nimport _Input from \"../input/Input\";\r\nimport _Select from \"../select/Select\";\r\nimport _Button from \"../button/Button\";\r\nimport colours from \"../../utils/colours\";\r\nimport background from \"./login-background.jpg\";\r\nimport background480 from \"./login-background480.jpg\";\r\nimport background720 from \"./login-background720.jpg\";\r\nimport background1080 from \"./login-background1080.jpg\";\r\nimport screens from \"../../utils/screens\";\r\n\r\nconst Login = styled.div`\r\n background-image: url(${background480});\r\n background-position: 30%;\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n flex-grow: 1;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n & input,\r\n select,\r\n button,\r\n label {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n\r\n @media screen and ${screens.small} {\r\n background-image: url(${background720});\r\n }\r\n\r\n @media screen and ${screens.large} {\r\n background-image: url(${background1080});\r\n }\r\n\r\n @media screen and ${screens.extraLarge} {\r\n background-image: url(${background});\r\n }\r\n`;\r\n\r\nconst Background = styled.div`\r\n background-color: ${colours.black + \"8\"};\r\n padding: 15px;\r\n border-radius: 5px;\r\n`;\r\n\r\nconst Label = styled.label`\r\n color: ${colours.white};\r\n`;\r\n\r\nconst HelpMessage = styled.p`\r\n font-size: 12px;\r\n color: ${colours.white};\r\n text-align: center;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16em;\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16em;\r\n`;\r\n\r\nconst Select = styled(_Select)`\r\n width: 16em;\r\n`;\r\n\r\nexport default {\r\n Login,\r\n Button,\r\n Select,\r\n Input,\r\n HelpMessage,\r\n Label,\r\n Background,\r\n};\r\n","class ValidationResult {\r\n private errors: { [key: string]: string[] | undefined };\r\n\r\n private constructor() {\r\n this.errors = {};\r\n }\r\n\r\n get ok(): boolean {\r\n for (const field in this.errors) {\r\n const val = this.errors[field];\r\n\r\n if (val !== undefined && val.length > 0) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n getErrors(field: string): string[] | undefined {\r\n if (!field) {\r\n throw new Error(\"field is compulsory\");\r\n }\r\n\r\n return this.errors[field];\r\n }\r\n\r\n add(field: string, error: string): void {\r\n if (!field) {\r\n throw new Error(\"field is compulsory\");\r\n }\r\n\r\n if (!error) {\r\n throw new Error(\"error is compulsory\");\r\n }\r\n\r\n let v = this.getErrors(field);\r\n\r\n if (v === undefined) {\r\n v = [];\r\n this.errors[field] = v;\r\n }\r\n\r\n v.push(error);\r\n }\r\n\r\n static get empty(): ValidationResult {\r\n return new ValidationResult();\r\n }\r\n}\r\n\r\nexport default ValidationResult;\r\n","export class Success {\r\n kind = \"SUCCESS\";\r\n data: T;\r\n\r\n constructor(data: T) {\r\n this.data = data;\r\n }\r\n}\r\n\r\nexport class Failure {\r\n kind = \"FAILURE\";\r\n errors: string[];\r\n\r\n constructor(errors: string[]) {\r\n this.errors = errors;\r\n }\r\n}\r\n\r\nexport class NoContent {\r\n kind = \"NO-CONTENT\";\r\n}\r\n\r\nexport class Error {\r\n kind = \"ERROR\";\r\n response: globalThis.Response;\r\n\r\n constructor(response: globalThis.Response) {\r\n this.response = response;\r\n }\r\n}\r\n\r\nexport class Unauthorised {\r\n kind = \"UNAUTHORISED\";\r\n}\r\n\r\nexport class NetworkError {\r\n kind = \"NETWORK-ERROR\";\r\n error: Error;\r\n\r\n constructor(error: Error) {\r\n this.error = error;\r\n }\r\n}\r\n\r\nexport type Response =\r\n | Success\r\n | Failure\r\n | NoContent\r\n | Unauthorised\r\n | Error\r\n | NetworkError;\r\n\r\nexport const isSuccess = (response: Response): response is Success =>\r\n response.kind === \"SUCCESS\";\r\nexport const isFailure = (response: Response): response is Failure =>\r\n response.kind === \"FAILURE\";\r\nexport const isNoContent = (response: Response): response is NoContent =>\r\n response.kind === \"NO-CONTENT\";\r\nexport const isUnauthorised = (\r\n response: Response\r\n): response is Unauthorised => response.kind === \"UNAUTHORISED\";\r\nexport const isError = (response: Response): response is Error =>\r\n response.kind === \"ERROR\";\r\nexport const isNetworkError = (\r\n response: Response\r\n): response is NetworkError => response.kind === \"NETWORK-ERROR\";\r\nexport const mapSuccess = (\r\n response: Response,\r\n f: (data: T1) => T2\r\n): Response => {\r\n if (!isSuccess(response)) return response;\r\n\r\n return new Success(f(response.data));\r\n};\r\n","import { createContext, useContext } from \"react\";\r\nimport { NetworkError } from \"../api/Api\";\r\n\r\ninterface ApiContext {\r\n onNetworkError: (error: NetworkError) => void;\r\n onUnauthenticated?: () => void;\r\n}\r\n\r\nexport const ApiContext = createContext(null);\r\n\r\nexport const useApiContext = () => {\r\n const ctx = useContext(ApiContext);\r\n\r\n if (!ctx)\r\n throw new Error(\r\n \"attempted to use api context inside provider with no value.\"\r\n );\r\n\r\n return ctx;\r\n};\r\n","import {\r\n Response,\r\n NoContent,\r\n Unauthorised,\r\n Error as ResponseError,\r\n Success,\r\n Failure,\r\n} from \"./Responses\";\r\n\r\nexport const parseResponse = async (\r\n response: globalThis.Response,\r\n): Promise> => {\r\n if (response.status === 200) {\r\n const result = await response.json();\r\n\r\n return result.ok ? new Success(result.data) : new Failure(result.errors);\r\n }\r\n\r\n if (response.status === 204) {\r\n return new NoContent();\r\n }\r\n\r\n if (response.status === 401) {\r\n return new Unauthorised();\r\n }\r\n\r\n return new ResponseError(response);\r\n};\r\n\r\nexport const parseBlob = async (\r\n response: globalThis.Response,\r\n): Promise> => {\r\n if (response.status === 200) {\r\n const blob = await response.blob();\r\n return new Success(blob);\r\n }\r\n\r\n if (response.status === 204) {\r\n return new NoContent();\r\n }\r\n\r\n if (response.status === 401) {\r\n return new Unauthorised();\r\n }\r\n\r\n return new ResponseError(response);\r\n};\r\n\r\nexport const getHeaders = (version: string) => ({\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n \"Api-Version\": version,\r\n});\r\n\r\nexport const addAuthorizationHeader = (\r\n opts: RequestInit,\r\n token: string,\r\n): RequestInit => ({\r\n ...opts,\r\n headers: { ...opts.headers, Authorization: `Bearer ${token}` },\r\n});\r\n\r\nconst options = {\r\n maxRetries: 3,\r\n};\r\n\r\nexport const fetchWithRetry = async (url: string, opts: RequestInit) => {\r\n for (let i = 1; i <= options.maxRetries; i++) {\r\n try {\r\n return await fetch(url, opts);\r\n } catch (e) {\r\n if (i === options.maxRetries) {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n throw new Error(`request to ${url} failed`);\r\n};\r\n","import querystring from \"querystring\";\r\nimport { expired } from \"../utils/token\";\r\nimport { isSuccess, NetworkError } from \"./Responses\";\r\nimport { useApiContext } from \"../contexts/ApiContext\";\r\nimport { useMemo } from \"react\";\r\nimport {\r\n fetchWithRetry,\r\n addAuthorizationHeader,\r\n getHeaders,\r\n parseResponse,\r\n parseBlob,\r\n} from \"./utils\";\r\n\r\ntype GlobalState = {\r\n token: string | null;\r\n};\r\n\r\nconst globalState: GlobalState = { token: null };\r\n\r\nconst setGlobalToken = (token: string) => (globalState.token = token);\r\n\r\ntype TokenRefreshResult =\r\n | { refreshed: true }\r\n | { refreshed: false; unauthorised: boolean };\r\n\r\nconst refreshToken = async (): Promise => {\r\n const response = await fetchWithRetry(\"api/auth/refresh\", {\r\n method: \"POST\",\r\n headers: getHeaders(\"1.1\"),\r\n });\r\n\r\n if (response.status !== 200) {\r\n return { refreshed: false, unauthorised: response.status === 401 };\r\n }\r\n\r\n try {\r\n const result = await parseResponse(response);\r\n if (isSuccess(result)) {\r\n setGlobalToken(result.data);\r\n return { refreshed: true };\r\n }\r\n } catch (e) {\r\n console.error(\"failed to parse token refresh response\", e);\r\n }\r\n\r\n return { refreshed: false, unauthorised: false };\r\n};\r\n\r\ntype NetworkErrorHandler = (e: NetworkError) => void;\r\ntype UnauthenticatedHandler = () => void;\r\n\r\nclass Api {\r\n private onNetworkError: NetworkErrorHandler;\r\n private onUnauthenticated?: UnauthenticatedHandler;\r\n\r\n constructor(\r\n onNetworkError: NetworkErrorHandler,\r\n onUnauthenticated?: UnauthenticatedHandler,\r\n ) {\r\n this.onNetworkError = onNetworkError;\r\n this.onUnauthenticated = onUnauthenticated;\r\n }\r\n\r\n async get(\r\n url: string,\r\n version: string,\r\n params: querystring.ParsedUrlQueryInput = {},\r\n ) {\r\n const queryString = querystring.encode(params);\r\n const fullUrl = (queryString && `${url}?${queryString}`) || url;\r\n let response;\r\n\r\n try {\r\n response = await this.fetch(fullUrl, {\r\n method: \"GET\",\r\n headers: getHeaders(version),\r\n });\r\n } catch (e) {\r\n const networkError = new NetworkError(e);\r\n this.onNetworkError(networkError);\r\n return networkError;\r\n }\r\n\r\n return parseResponse(response);\r\n }\r\n\r\n async getBlob(\r\n url: string,\r\n version: string,\r\n params: querystring.ParsedUrlQueryInput = {},\r\n ) {\r\n const queryString = querystring.encode(params);\r\n const fullUrl = (queryString && `${url}?${queryString}`) || url;\r\n let response;\r\n\r\n try {\r\n response = await this.fetch(fullUrl, {\r\n method: \"GET\",\r\n headers: getHeaders(version),\r\n });\r\n } catch (e) {\r\n const networkError = new NetworkError(e);\r\n this.onNetworkError(networkError);\r\n return networkError;\r\n }\r\n\r\n return parseBlob(response);\r\n }\r\n\r\n async post(url: string, version: string, body?: object) {\r\n let response;\r\n\r\n try {\r\n response = await this.fetch(url, {\r\n method: \"POST\",\r\n body: JSON.stringify(body),\r\n headers: getHeaders(version),\r\n });\r\n } catch (e) {\r\n const networkError = new NetworkError(e);\r\n this.onNetworkError(networkError);\r\n return networkError;\r\n }\r\n\r\n return parseResponse(response);\r\n }\r\n\r\n async postForm(url: string, version: string, form: FormData) {\r\n let response;\r\n\r\n const headers = getHeaders(version);\r\n delete headers[\"Content-Type\"]; // allow the browser to set the Content-Type for the request\r\n\r\n try {\r\n response = await this.fetch(url, {\r\n method: \"POST\",\r\n body: form,\r\n headers,\r\n });\r\n } catch (e) {\r\n const networkError = new NetworkError(e);\r\n this.onNetworkError(networkError);\r\n return networkError;\r\n }\r\n\r\n return parseResponse(response);\r\n }\r\n\r\n async delete(url: string, version: string) {\r\n let response;\r\n\r\n try {\r\n response = await this.fetch(url, {\r\n method: \"DELETE\",\r\n headers: getHeaders(version),\r\n });\r\n } catch (e) {\r\n const networkError = new NetworkError(e);\r\n this.onNetworkError(networkError);\r\n return networkError;\r\n }\r\n\r\n return parseResponse(response);\r\n }\r\n\r\n async fetch(url: string, opts: RequestInit): Promise {\r\n if (!globalState.token) {\r\n return await fetchWithRetry(url, opts);\r\n }\r\n\r\n if (globalState.token && expired(globalState.token)) {\r\n await refreshToken();\r\n }\r\n\r\n const response = await fetchWithRetry(\r\n url,\r\n addAuthorizationHeader(opts, globalState.token),\r\n );\r\n const unauthorised = response.status === 401;\r\n const tokenExpired = expired(globalState.token);\r\n\r\n if (unauthorised && tokenExpired) {\r\n const refreshResult = await refreshToken();\r\n\r\n if (refreshResult.refreshed) {\r\n return await fetchWithRetry(\r\n url,\r\n addAuthorizationHeader(opts, globalState.token),\r\n );\r\n }\r\n\r\n if (refreshResult.unauthorised && this.onUnauthenticated) {\r\n this.onUnauthenticated();\r\n }\r\n }\r\n\r\n return response;\r\n }\r\n}\r\n\r\nconst useApi = () => {\r\n const { onNetworkError, onUnauthenticated } = useApiContext();\r\n\r\n return useMemo(\r\n () => new Api(onNetworkError, onUnauthenticated),\r\n [onUnauthenticated, onNetworkError],\r\n );\r\n};\r\n\r\nexport { useApi, Api, setGlobalToken };\r\nexport * from \"./Responses\";\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../utils/colours\";\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 1em;\r\n`;\r\n\r\nconst Header = styled.h2`\r\n color: ${colours.lightRed};\r\n font-size: 1.2em;\r\n margin: 2px;\r\n font-weight: bold;\r\n`;\r\n\r\nconst List = styled.ul``;\r\n\r\nconst ListItem = styled.li`\r\n margin: 5px 0px;\r\n color: ${colours.white};\r\n`;\r\n\r\nexport default { Container, Header, List, ListItem };\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../utils/colours\";\r\n\r\nconst Parent = styled.div`\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: #000e;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n opacity: 1;\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n`;\r\n\r\nconst IconWrapper = styled.span`\r\n position: absolute;\r\n z-index: 9999;\r\n top: 0;\r\n right: 0;\r\n margin: 5px 8px 0 0;\r\n color: ${colours.white};\r\n\r\n &:hover {\r\n cursor: pointer;\r\n color: ${colours.grey2};\r\n }\r\n`;\r\n\r\nexport default { Parent, IconWrapper };\r\n","import React, { ReactNode, useEffect } from \"react\";\r\nimport S from \"./styles\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faTimes } from \"@fortawesome/pro-solid-svg-icons\";\r\n\r\ntype Props = {\r\n children: ReactNode;\r\n onClose: () => void;\r\n};\r\n\r\nconst Model = (props: Props) => {\r\n useEffect(() => {\r\n document.addEventListener(\"keydown\", onKeyPressed, false);\r\n\r\n return () => {\r\n document.removeEventListener(\"keydown\", onKeyPressed, false);\r\n };\r\n });\r\n\r\n const onKeyPressed = (event: KeyboardEvent) => {\r\n if (event.keyCode === 27) props.onClose();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default Model;\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport S from \"./styles\";\r\nimport Modal from \"../modal/Modal\";\r\n\r\ntype Props = {\r\n errors: string[];\r\n onClose: () => void;\r\n};\r\n\r\nconst GeneralErrors = (props: Props) => {\r\n const { errors, onClose } = props;\r\n\r\n const { t } = useTranslation();\r\n\r\n const header = t(errors.length > 1 ? \"Errors\" : \"Error\");\r\n\r\n return (\r\n \r\n \r\n {header}\r\n \r\n {errors.map((e, i) => (\r\n {e}\r\n ))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default GeneralErrors;\r\n","import styled, { keyframes } from \"styled-components\";\r\nimport colours from \"../../utils/colours\";\r\n\r\nconst stretchDelay = keyframes`\r\n 0%, 40%, 100% {\r\n transform: scaleY(0.4)\r\n }\r\n 20% {\r\n transform: scaleY(1.0)\r\n }\r\n`;\r\n\r\nconst First = styled.div``;\r\nconst Second = styled.div``;\r\nconst Third = styled.div``;\r\nconst Fourth = styled.div``;\r\nconst Fifth = styled.div``;\r\n\r\nconst Spinner = styled.div`\r\n width: 50px;\r\n height: 50px;\r\n text-align: center;\r\n\r\n & div {\r\n background-color: ${colours.lightOrange}\r\n height: 100%;\r\n width: 6px;\r\n display: inline-block;\r\n margin: 1px;\r\n\r\n animation: ${stretchDelay} 1.2s infinite ease-in-out;\r\n }\r\n\r\n & ${Second} {\r\n animation-delay: -1.1s;\r\n }\r\n\r\n & ${Third} {\r\n animation-delay: -1.0s;\r\n }\r\n\r\n & ${Fourth} {\r\n animation-delay: -0.9s;\r\n }\r\n\r\n & ${Fifth} {\r\n animation-delay: -0.8s;\r\n }\r\n`;\r\n\r\nexport default { First, Second, Third, Fourth, Fifth, Spinner };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\n\r\nconst Spinner = () => {\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 Spinner;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport S from \"./styles\";\r\nimport VR from \"../../utils/ValidationResult\";\r\nimport { Country } from \"360\";\r\nimport { useApi, Response, isSuccess, isFailure } from \"../../api/Api\";\r\nimport GeneralErrors from \"../general-errors/GeneralErrors\";\r\nimport Spinner from \"../spinner/Spinner\";\r\n\r\ntype Props = { onLogin: (token: string) => void };\r\n\r\nconst Login = (props: Props) => {\r\n const { onLogin } = props;\r\n const { t } = useTranslation();\r\n const [username, setUsername] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [country, setCountry] = useState(null);\r\n const [countries, setCountries] = useState([]);\r\n const [vr, setVr] = useState(VR.empty);\r\n const [errors, setErrors] = useState([]);\r\n const api = useApi();\r\n const [loading, setLoading] = useState(true);\r\n\r\n const login = async (\r\n username: string,\r\n password: string,\r\n country: Country\r\n ): Promise> =>\r\n api.post(\"api/auth/authenticate\", \"1.1\", {\r\n username,\r\n password,\r\n countryId: country.id,\r\n datasetId: country.datasetId,\r\n });\r\n\r\n useEffect(() => {\r\n (async () => {\r\n const tokenPromise = api.post(\"api/auth/refresh\", \"1.1\");\r\n const countriesPromise = api.get(\"api/countries\", \"1.0\");\r\n\r\n try {\r\n // if we can generate a new auth token using an existing refresh token, do so\r\n const tokenResponse = await tokenPromise;\r\n\r\n if (isSuccess(tokenResponse)) {\r\n return onLogin(tokenResponse.data);\r\n }\r\n } catch {\r\n // if we failed to use a refresh token, allow the user to log in\r\n }\r\n\r\n try {\r\n const response = await countriesPromise;\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) return setCountries(response.data);\r\n } catch {}\r\n\r\n setErrors([\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\"\r\n ),\r\n ]);\r\n })();\r\n }, [t, api, onLogin]);\r\n\r\n const validate = (): VR => {\r\n const result = VR.empty;\r\n\r\n if (!username) result.add(\"username\", t(\"Field is required.\"));\r\n if (!password) result.add(\"password\", t(\"Field is required.\"));\r\n if (!country) result.add(\"country\", t(\"Field is required.\"));\r\n\r\n return result;\r\n };\r\n\r\n const handleLoginClick = async () => {\r\n const vr = validate();\r\n setVr(vr);\r\n\r\n if (!vr.ok) return;\r\n\r\n try {\r\n const response = await login(username, password, country!);\r\n\r\n if (isSuccess(response)) return onLogin(response.data);\r\n if (isFailure(response))\r\n return setErrors(response.errors.map((e) => t(e)));\r\n } catch {}\r\n\r\n return setErrors([t(\"Login failed. Please try again.\")]);\r\n };\r\n\r\n const handleUsernameChange = (e: React.ChangeEvent) =>\r\n setUsername(e.target.value);\r\n\r\n const handlePasswordChange = (e: React.ChangeEvent) =>\r\n setPassword(e.target.value);\r\n\r\n const handleCountryChange = (e: React.ChangeEvent) => {\r\n const id = parseInt(e.target.value);\r\n setCountry(countries.find((c) => c.id === id) || null);\r\n };\r\n\r\n if (loading)\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n {errors.length > 0 && (\r\n setErrors([])} />\r\n )}\r\n \r\n
\r\n {t(\"Username\")}\r\n \r\n {t(\"Password\")}\r\n \r\n {t(\"Country\")}\r\n \r\n \r\n {countries.map((c) => (\r\n \r\n ))}\r\n \r\n \r\n {t(\"Sign in\")}\r\n {t(\"Having trouble signing in?\")}\r\n {t(\"Please contact us for assistance.\")}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Login;\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../../utils/colours\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nconst Icon = styled(FontAwesomeIcon)`\r\n font-size: 16px;\r\n margin-right: 5px;\r\n`;\r\n\r\nconst Button = styled.a`\r\n border-radius: 5px;\r\n background-color: ${colours.lightOrange};\r\n display: flex;\r\n align-items: center;\r\n color: ${colours.black};\r\n text-decoration: none;\r\n padding: 5px;\r\n\r\n &:hover {\r\n background-color: ${colours.darkOrange};\r\n }\r\n`;\r\n\r\nexport default { Icon, Button };\r\n","import React from \"react\";\r\nimport { faPhone } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport S from \"./styles\";\r\n\r\ntype Props = {\r\n number: string;\r\n};\r\n\r\nconst Button = (props: Props) => {\r\n const { number } = props;\r\n return (\r\n \r\n \r\n

{number}

\r\n
\r\n );\r\n};\r\n\r\nexport default Button;\r\n","import styled from \"styled-components\";\r\n\r\nconst HelpMessage = styled.p`\r\n margin-bottom: 5px;\r\n text-align: center;\r\n`;\r\n\r\nconst DefaultNumber = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n padding: 10px;\r\n`;\r\n\r\nexport default { HelpMessage, DefaultNumber };\r\n","import React from \"react\";\r\nimport Button from \"../button/Button\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n number: string;\r\n};\r\n\r\nconst DefaultNumber = (props: Props) => {\r\n const { number } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {t(\"If you require assistance, please click the button to phone us.\")}\r\n \r\n \r\n )\r\n ) : (\r\n
\r\n )}\r\n {showImages && images && }\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TyreDetails;\r\n","import styled from \"styled-components\";\r\nimport Button from \"../../button/Button\";\r\n\r\nconst JobOverview = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n margin-bottom: 3px;\r\n margin-top: 3px;\r\n`;\r\n\r\nconst ButtonContainer = styled.div`\r\n width: 100%;\r\n text-align: right;\r\n`;\r\n\r\nconst EditButton = styled(Button)``;\r\n\r\nexport default {\r\n JobOverview,\r\n DetailContainer,\r\n Detail,\r\n DetailContent,\r\n Title,\r\n EditButton,\r\n ButtonContainer\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobCategory from \"../job-category/JobCategory\";\r\nimport { faClipboardList } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport JobSubCategory from \"../job-sub-category/JobSubCategory\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n showForSummary: boolean;\r\n tsuNumber: number;\r\n jobDate?: Date;\r\n poNumber: string | null;\r\n customer?: string;\r\n mileage: number | null;\r\n\r\n locationType: string;\r\n vehicleReg: string;\r\n attachedVehicleReg: string | null;\r\n\r\n mileageEditClicked?: () => void;\r\n locationTypeEditClick?: () => void;\r\n customerEditClicked?: () => void;\r\n vehicleEditClicked?: () => void;\r\n podnEditClicked?: () => void;\r\n};\r\n\r\nconst JobOverview = (props: Props) => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n {!props.showForSummary && (\r\n
\r\n \r\n \r\n \r\n {t(\"TSU number\")}\r\n {props.tsuNumber}\r\n \r\n \r\n \r\n\r\n {props.jobDate !== undefined ? (\r\n \r\n \r\n \r\n {t(\"Job Date\")}\r\n \r\n {t(\"DisplayDate\", { date: props.jobDate })}\r\n \r\n \r\n \r\n \r\n ) : (\r\n
\r\n )}\r\n
\r\n )}\r\n\r\n {props.showForSummary && (\r\n \r\n \r\n \r\n \r\n {t(\"Purchase order / defect number\")}\r\n {props.poNumber}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {t(\"Mileage\")}\r\n {props.mileage}\r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n {t(\"Location type\")}\r\n {t(props.locationType)}\r\n \r\n \r\n \r\n\r\n {props.customer !== undefined ? (\r\n \r\n \r\n {t(\"Customer\")}\r\n {props.customer}\r\n \r\n \r\n ) : (\r\n
\r\n )}\r\n\r\n \r\n \r\n {t(\"Vehicle / unit number\")}\r\n {props.vehicleReg}\r\n \r\n \r\n {t(\"Attached vehicle\")}\r\n {props.attachedVehicleReg}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default JobOverview;\r\n","import styled from \"styled-components\";\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 5px;\r\n`;\r\n\r\nexport default { DetailContainer, Detail, DetailContent };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobCategory from \"../job-category/JobCategory\";\r\nimport JobSubCategory from \"../job-sub-category/JobSubCategory\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { faCalendarAlt } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { TimeSlot } from \"360\";\r\n\r\ntype DateProps = {\r\n date: Date;\r\n availability: TimeSlot[];\r\n};\r\n\r\nconst Date = (props: DateProps) => {\r\n const { date, availability } = props;\r\n const { t } = useTranslation();\r\n\r\n const sub = availability\r\n .sort((a, b) => a.from.getTime() - b.from.getTime())\r\n .map((slot, i) => {\r\n const crossesMidnight = slot.from.getDate() !== slot.to.getDate();\r\n const start = t(\"AVAILABILITY\", { time: slot.from });\r\n const endFormat = crossesMidnight\r\n ? \"AVAILABILITY_WITH_DATE\"\r\n : \"AVAILABILITY\";\r\n const end = t(endFormat, { time: slot.to });\r\n return {`${start} - ${end}`};\r\n });\r\n return (\r\n \r\n {t(\"AVAILABILITY_DATE\", { date })}\r\n {sub}\r\n \r\n );\r\n};\r\n\r\ntype Props = {\r\n availability: TimeSlot[];\r\n availabilityEditClicked?: () => void;\r\n};\r\n\r\nconst Availability = (props: Props) => {\r\n const { availabilityEditClicked, availability } = props;\r\n const { t } = useTranslation();\r\n\r\n const groupedAvailability = availability.reduce(\r\n (acc: any, curr: TimeSlot) => {\r\n const key = curr.from.getDate();\r\n\r\n if (acc[key] === undefined) acc[key] = [];\r\n\r\n acc[key].push(curr);\r\n return acc;\r\n },\r\n {}\r\n );\r\n\r\n const children = Object.keys(groupedAvailability)\r\n .map((key) => groupedAvailability[key])\r\n .sort((a, b) => a[0] - b[0])\r\n .map((slots, i) => (\r\n \r\n ));\r\n return (\r\n \r\n 0 ? availabilityEditClicked : undefined\r\n }\r\n >\r\n {children.length === 0 ? (\r\n \r\n {t(\"ASAP\")}\r\n \r\n ) : (\r\n children\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Availability;\r\n","import { createContext, useContext } from \"react\";\r\nimport { User } from \"360\";\r\n\r\nexport const UserContext = createContext(null);\r\n\r\nexport const useUserContext = () => {\r\n const ctx = useContext(UserContext);\r\n\r\n if (!ctx)\r\n throw new Error(\r\n \"attempted to use user context inside provider with no value.\"\r\n );\r\n\r\n return ctx;\r\n};\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { faTire, faInfo, faEnvelope } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport S from \"./styles\";\r\nimport ContactInformation from \"../../job-details/contact-information/ContactInformation\";\r\nimport LocationDetails from \"../../job-details/location-details/LocationDetails\";\r\nimport JobCategory from \"../../job-details/job-category/JobCategory\";\r\nimport TyreDetails from \"../tyre-details/TyreDetails\";\r\nimport JobOverview from \"../../job-details/job-overview/JobOverview\";\r\nimport JobSubCategory from \"../../job-details/job-sub-category/JobSubCategory\";\r\nimport Availability from \"../../job-details/availability/Availability\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { useApi, Response, mapSuccess, isSuccess } from \"../../../api/Api\";\r\nimport { BreakdownSummary, SubmissionResult } from \"360\";\r\nimport { useUserContext } from \"../../../contexts/UserContext\";\r\n\r\ntype Props = {\r\n reference: string;\r\n onEditCallerDetails: () => void;\r\n onEditDriverDetails: () => void;\r\n onEditMileage: () => void;\r\n onEditLocationType: () => void;\r\n onEditCustomer: () => void;\r\n onEditVehicle: () => void;\r\n onEditWorkRequired: () => void;\r\n onEditAvailability: () => void;\r\n onEditLocation: () => void;\r\n onEditAdditionalInformation: () => void;\r\n onEditPurchaseOrderDefectNumber: () => void;\r\n onEditContacts: () => void;\r\n onComplete: (result: SubmissionResult) => void;\r\n onFail: () => void;\r\n onCancel: () => void;\r\n};\r\n\r\ntype SummaryResponse = {\r\n key: string;\r\n summary: BreakdownSummary;\r\n};\r\n\r\nconst Summary = (props: Props) => {\r\n const {\r\n onCancel,\r\n reference,\r\n onEditCallerDetails,\r\n onEditDriverDetails,\r\n onEditMileage,\r\n onEditLocation,\r\n onEditLocationType,\r\n onEditCustomer,\r\n onEditVehicle,\r\n onEditWorkRequired,\r\n onEditAvailability,\r\n onEditAdditionalInformation,\r\n onEditPurchaseOrderDefectNumber,\r\n onEditContacts,\r\n onComplete,\r\n onFail,\r\n } = props;\r\n const [summary, setSummary] = useState(null);\r\n const [key, setKey] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n const user = useUserContext();\r\n\r\n const submitBreakdown = async (\r\n reference: string\r\n ): Promise> =>\r\n api.post(`api/breakdowns/${reference}/submit`, \"1.0\", {});\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const response = await api.get(\r\n `api/breakdowns/${reference}`,\r\n \"1.1\"\r\n );\r\n const mapped = mapSuccess(\r\n response,\r\n (r): SummaryResponse => ({\r\n key: r.key,\r\n summary: {\r\n ...r.summary,\r\n availability: r.summary.availability.map(\r\n (slot: { from: string; to: string }) => ({\r\n from: new Date(slot.from),\r\n to: new Date(slot.to),\r\n })\r\n ),\r\n },\r\n })\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(mapped)) {\r\n setSummary(mapped.data.summary);\r\n setKey(mapped.data.key);\r\n return;\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n })();\r\n }, [onFail, reference, api]);\r\n\r\n const handleSubmitClick = async () => {\r\n try {\r\n setLoading(true);\r\n const response = await submitBreakdown(reference);\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) return onComplete(response.data);\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n if (summary == null || key == null || loading) return ;\r\n\r\n const {\r\n contactCaller,\r\n mileage,\r\n locationType,\r\n vehicle: breakdownVehicle,\r\n location: breakdownLocation,\r\n customer,\r\n workRequired: workRequested,\r\n availability,\r\n additionalInformation,\r\n purchaseOrderDefectNumber,\r\n contacts,\r\n } = summary;\r\n\r\n if (\r\n contactCaller === null ||\r\n locationType === null ||\r\n breakdownVehicle === null ||\r\n breakdownLocation === null ||\r\n customer === null ||\r\n workRequested === null ||\r\n availability === null ||\r\n contacts === null\r\n ) {\r\n // if the breakdown is missing this information at this stage,\r\n // something has gone wrong and the user should be prevented\r\n // from submitting the breakdown.\r\n onFail();\r\n return null;\r\n }\r\n\r\n const { latitude, longitude, location } = breakdownLocation;\r\n const { name, telephone, depot, driverName, driverTelephone } = contactCaller;\r\n const { attachedVehicleRegistration, vehicle } = breakdownVehicle;\r\n const { registration } = vehicle;\r\n const enableContacts = user.countryId === 2;\r\n\r\n return (\r\n \r\n {t(\"Breakdown summary\")}\r\n \r\n \r\n \r\n {workRequested.map((wr, i) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {additionalInformation}\r\n \r\n \r\n \r\n {enableContacts && (\r\n \r\n \r\n \r\n \r\n {t(\"{{count}} contact(s)\", { count: contacts.length })}\r\n \r\n \r\n \r\n \r\n )}\r\n {t(\"Submit\")}\r\n {t(\"Save for later or cancel\")}\r\n \r\n );\r\n};\r\n\r\nexport default Summary;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport _Input from \"../../input/Input\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport colours from \"../../../utils/colours\";\r\n\r\nconst Vehicle = styled.div`\r\n & > * {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst Warning = styled.div`\r\n display: flex;\r\n align-items: center;\r\n max-width: 16rem;\r\n`;\r\n\r\nconst WarningIcon = styled(FontAwesomeIcon)`\r\n font-size: 24px;\r\n margin-right: 5px;\r\n color: ${colours.yellow};\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16rem;\r\n`;\r\n\r\nexport default { Vehicle, Input, Button, Warning, WarningIcon };\r\n","import React, { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport FieldErrors from \"../../field-errors/FieldErrors\";\r\nimport AsyncCreatable from \"react-select/async-creatable\";\r\nimport { ValueType, OptionsType } from \"react-select\";\r\nimport VR from \"../../../utils/ValidationResult\";\r\nimport colours from \"../../../utils/colours\";\r\nimport { faExclamationTriangle } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport S from \"./styles\";\r\nimport debounce from \"debounce-promise\";\r\nimport { Api, useApi, Response, mapSuccess, isSuccess } from \"../../../api/Api\";\r\nimport GeneralErrors from \"../../general-errors/GeneralErrors\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport {\r\n BreakdownVehicle,\r\n ExistingVehicle,\r\n Vehicle as VM,\r\n Customer,\r\n} from \"360\";\r\n\r\ntype Props = {\r\n reference: string;\r\n onContinue: (vehicle: BreakdownVehicle, customer: Customer | null) => void;\r\n onFail: () => void;\r\n onCancel: () => void;\r\n initialValue: BreakdownVehicle | null;\r\n};\r\n\r\nconst getNewOptionData = (inputValue: string, _: React.ReactNode): VM => {\r\n return { existing: false, registration: inputValue };\r\n};\r\n\r\nconst getOptionLabel = (option: VM): string => option.registration;\r\n\r\nconst getOptionValue = (option: VM): string => option.registration;\r\n\r\nconst isValidNewOption = (\r\n inputValue: string,\r\n _: ValueType,\r\n selectOptions: OptionsType\r\n) =>\r\n selectOptions\r\n .map((o) => o.registration.toLowerCase())\r\n .indexOf(inputValue.toLowerCase()) === -1;\r\n\r\nconst isVehicle = (o: VM | readonly VM[] | undefined | null): o is VM => {\r\n return o !== undefined && o !== null && !Array.isArray(o);\r\n};\r\n\r\nconst getVehicles = async (\r\n api: Api,\r\n registration: string\r\n): Promise> => {\r\n const response: Response = await api.get(\r\n \"api/vehicles/search\",\r\n \"1.0\",\r\n {\r\n registration,\r\n }\r\n );\r\n\r\n return mapSuccess(response, (data): ExistingVehicle[] =>\r\n data.map((v) => ({\r\n ...v,\r\n existing: true,\r\n status: v.status === \"Suspended\" ? \"SUSPENDED\" : \"ACTIVE\",\r\n }))\r\n );\r\n};\r\n\r\nconst submitVehicle = async (\r\n api: Api,\r\n reference: string,\r\n vehicle: string,\r\n attachedVehicle: string\r\n): Promise> =>\r\n api.post(`api/breakdowns/${reference}/vehicle`, \"1.1\", {\r\n vehicle,\r\n attachedVehicle,\r\n });\r\n\r\nconst Vehicle = (props: Props) => {\r\n const { onContinue, onCancel, onFail, initialValue } = props;\r\n const [vehicle, setVehicle] = useState(\r\n initialValue?.vehicle || null\r\n );\r\n const [\r\n attachedVehicleRegistration,\r\n setAttachedVehicleRegistration,\r\n ] = useState(initialValue?.attachedVehicleRegistration || \"\");\r\n const [vr, setVr] = useState(VR.empty);\r\n const { t } = useTranslation();\r\n const [errors, setErrors] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const api = useApi();\r\n\r\n const displaySuspendedWarning =\r\n vehicle && vehicle.existing && vehicle.status === \"SUSPENDED\";\r\n\r\n const loadOptions = async (\r\n input: string,\r\n callback: (results: ExistingVehicle[]) => void\r\n ) => {\r\n if (input.length < 3) return callback([]);\r\n if (input.length > 20) return callback([]);\r\n\r\n try {\r\n const response = await getVehicles(api, input);\r\n\r\n if (isSuccess(response)) return callback(response.data);\r\n } catch {}\r\n\r\n // if the vehicle search call fails, we will allow the user to continue anyway\r\n return callback([]);\r\n };\r\n\r\n const debounced = debounce(loadOptions, 2.5e2);\r\n\r\n const handleContinue = async () => {\r\n const vr = validate();\r\n setVr(vr);\r\n\r\n if (!vr.ok) return;\r\n\r\n if (!vehicle) throw new Error(\"no vehicle provided.\");\r\n\r\n try {\r\n setLoading(true);\r\n const response = await submitVehicle(\r\n api,\r\n props.reference,\r\n vehicle.registration,\r\n attachedVehicleRegistration\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) {\r\n return onContinue(\r\n { vehicle, attachedVehicleRegistration },\r\n response.data\r\n );\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n const handleChange = (option: VM | readonly VM[] | undefined | null) => {\r\n if (isVehicle(option) || option === null) {\r\n setVehicle(option);\r\n }\r\n };\r\n\r\n const handleCreate = (registration: string) => {\r\n setVehicle({ existing: false, registration });\r\n };\r\n\r\n const handleAttachedVehicleChange = (\r\n e: React.ChangeEvent\r\n ) => setAttachedVehicleRegistration(e.target.value);\r\n\r\n const validate = () => {\r\n const vr = VR.empty;\r\n\r\n if (!vehicle) {\r\n vr.add(\"vehicle\", t(\"Field is required.\"));\r\n }\r\n\r\n if (vehicle && !vehicle.existing && vehicle.registration.length > 20) {\r\n vr.add(\r\n \"vehicle\",\r\n t(\"Maximum length is {{len}} characters.\", { len: 20 })\r\n );\r\n }\r\n\r\n if (attachedVehicleRegistration.length > 20)\r\n vr.add(\r\n \"attachedVehicle\",\r\n t(\"Maximum length is {{len}} characters.\", { len: 20 })\r\n );\r\n\r\n return vr;\r\n };\r\n\r\n var vehicleErrors = vr.getErrors(\"vehicle\") || [];\r\n\r\n if (loading) return ;\r\n\r\n return (\r\n \r\n {errors.length > 0 && (\r\n setErrors([])} />\r\n )}\r\n \r\n ({\r\n ...provided,\r\n width: \"16rem\",\r\n borderColor:\r\n vehicleErrors.length > 0 ? colours.lightRed : colours.black,\r\n background:\r\n vehicleErrors.length > 0 ? colours.extraLightRed : colours.white,\r\n }),\r\n valueContainer: (provided, _) => ({\r\n ...provided,\r\n padding: \"2px 5px\",\r\n }),\r\n }}\r\n />\r\n {!vr.ok && }\r\n {displaySuspendedWarning && }\r\n \r\n \r\n {t(\"Continue\")}\r\n {t(\"Save for later or cancel\")}\r\n \r\n );\r\n};\r\n\r\nconst SuspendedWarning = () => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\r\n \"This vehicle is suspended. By continuing, you accept any costs associated with this work.\"\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Vehicle;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../../../../button/Button\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nconst WorkType = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n display: flex;\r\n padding: 10px 10px;\r\n align-items: center;\r\n`;\r\n\r\nconst ButtonText = styled.span`\r\n padding-left: 15px;\r\n`;\r\n\r\nconst IconContainer = styled.div`\r\n height: 48px;\r\n width: 48px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst Icon = styled(FontAwesomeIcon)`\r\n font-size: 48px;\r\n max-height: 48px;\r\n max-width: 48px;\r\n`;\r\n\r\nconst Heading = styled.p`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst BackButton = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nexport default {\r\n BackButton,\r\n WorkType,\r\n Heading,\r\n Button,\r\n ButtonText,\r\n Icon,\r\n IconContainer,\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { faWrench, faTire } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { WorkType as WT } from \"360\";\r\n\r\ntype Props = {\r\n onSelect: (wt: WT) => void;\r\n onBackClick: () => void;\r\n};\r\n\r\nconst WorkType = (props: Props) => {\r\n const { onSelect, onBackClick } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n {t(\"Work required\")}\r\n onSelect(\"TYRE\")}>\r\n \r\n \r\n \r\n {t(\"Replacement tire\")}\r\n \r\n onSelect(\"HUSBANDRY\")}>\r\n \r\n \r\n \r\n {t(\"Other work\")}\r\n \r\n {t(\"Back\")}\r\n \r\n );\r\n};\r\n\r\nexport default WorkType;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../../../../button/Button\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nconst RemovalReasonType = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n display: flex;\r\n padding: 10px 10px;\r\n align-items: center;\r\n`;\r\n\r\nconst ButtonText = styled.span`\r\n padding-left: 15px;\r\n`;\r\n\r\nconst IconContainer = styled.div`\r\n height: 48px;\r\n width: 48px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst Icon = styled(FontAwesomeIcon)`\r\n font-size: 48px;\r\n max-height: 48px;\r\n max-width: 48px;\r\n`;\r\n\r\nconst Heading = styled.p`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst BackButton = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nexport default {\r\n BackButton,\r\n RemovalReasonType,\r\n Heading,\r\n Button,\r\n ButtonText,\r\n Icon,\r\n IconContainer,\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport {\r\n faEllipsisH,\r\n faExclamationTriangle,\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n onSelect: (rrt: boolean) => void;\r\n onBackClick: () => void;\r\n};\r\n\r\nconst RemovalReasonType = (props: Props) => {\r\n const { onSelect, onBackClick } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n {t(\"Removal reason\")}\r\n onSelect(true)}>\r\n \r\n \r\n \r\n {t(\"Damage\")}\r\n \r\n onSelect(false)}>\r\n \r\n \r\n \r\n {t(\"Other\")}\r\n \r\n {t(\"Back\")}\r\n \r\n );\r\n};\r\n\r\nexport default RemovalReasonType;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../../../../button/Button\";\r\nimport _FieldErrors from \"../../../../../field-errors/FieldErrors\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport colours from \"../../../../../../utils/colours\";\r\n\r\nconst TyreSize = styled.div`\r\n & > * {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst FieldErrors = styled(_FieldErrors)``;\r\n\r\nconst Warning = styled.div`\r\n display: flex;\r\n align-items: center;\r\n max-width: 16rem;\r\n`;\r\n\r\nconst WarningIcon = styled(FontAwesomeIcon)`\r\n font-size: 24px;\r\n margin-right: 5px;\r\n color: ${colours.yellow};\r\n`;\r\n\r\nexport default { TyreSize, Button, FieldErrors, Warning, WarningIcon };\r\n","import React, { useState, useEffect } from \"react\";\r\nimport S from \"./styles\";\r\nimport AsyncCreatable from \"react-select/async-creatable\";\r\nimport { ValueType, OptionsType } from \"react-select\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport VR from \"../../../../../../utils/ValidationResult\";\r\nimport colours from \"../../../../../../utils/colours\";\r\nimport debounce from \"debounce-promise\";\r\nimport Spinner from \"../../../../../spinner/Spinner\";\r\nimport { faExclamationTriangle } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useApi, isSuccess } from \"../../../../../../api/Api\";\r\n\r\ntype Props = {\r\n reference: string;\r\n positionId: number;\r\n onSelect: (tyreSize: string) => void;\r\n isSkippable: boolean;\r\n onSkip: () => void;\r\n onBackClick: () => void;\r\n};\r\n\r\ntype TyreSize = {\r\n tyreSize: string;\r\n};\r\n\r\nconst getNewOptionData = (\r\n inputValue: string,\r\n _: React.ReactNode\r\n): TyreSize => ({ tyreSize: inputValue });\r\n\r\nconst getOptionLabel = (option: TyreSize) => option.tyreSize;\r\nconst getOptionValue = (option: TyreSize) => option.tyreSize;\r\n\r\nconst isValidNewOption = (\r\n inputValue: string,\r\n _: ValueType,\r\n selectOptions: OptionsType\r\n) =>\r\n selectOptions\r\n .map((o) => o.tyreSize.toLowerCase())\r\n .indexOf(inputValue.toLowerCase()) === -1;\r\n\r\nconst isTyreSize = (\r\n o: TyreSize | readonly TyreSize[] | undefined | null\r\n): o is TyreSize => {\r\n return o !== undefined && o !== null && !Array.isArray(o);\r\n};\r\n\r\nconst TyreSize = (props: Props) => {\r\n const {\r\n onBackClick,\r\n onSelect,\r\n isSkippable,\r\n onSkip,\r\n reference,\r\n positionId,\r\n } = props;\r\n const [loading, setLoading] = useState(true);\r\n const [defaultTyreSize, setDefaultTyreSize] = useState(null);\r\n const [tyreSize, setTyreSize] = useState(null);\r\n const [vr, setVr] = useState(VR.empty);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n const response = await api.get(\r\n `api/breakdowns/${reference}/default-tyre-sizes`,\r\n \"1.0\",\r\n { positionId }\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) {\r\n setDefaultTyreSize(response.data);\r\n\r\n if (response.data) setTyreSize({ tyreSize: response.data });\r\n }\r\n } catch {\r\n // if we couldn't get a default tyre size, just allow the user to select one.\r\n }\r\n })();\r\n }, [api, positionId, reference]);\r\n\r\n const loadOptions = async (\r\n inputValue: string,\r\n callback: (sizes: TyreSize[]) => void\r\n ) => {\r\n if (inputValue.length < 3) return callback([]);\r\n\r\n try {\r\n const response = await api.get(\"api/tyre-sizes/search\", \"1.0\", {\r\n tyreSize: inputValue,\r\n });\r\n\r\n if (isSuccess(response)) {\r\n const results: TyreSize[] = [];\r\n response.data.forEach((size) => results.push({ tyreSize: size }));\r\n return callback(results);\r\n }\r\n } catch {\r\n // if we couldn't search for search for tyre sizes, just allow the user to manually\r\n // enter one.\r\n }\r\n };\r\n\r\n const handleChange = (\r\n option: TyreSize | readonly TyreSize[] | undefined | null\r\n ) => {\r\n if (isTyreSize(option) || option === null) {\r\n setTyreSize(option);\r\n }\r\n };\r\n\r\n const debounced = debounce(loadOptions, 2.5e2);\r\n\r\n const handleCreate = (tyreSize: string) => {\r\n setTyreSize({ tyreSize });\r\n };\r\n\r\n const handleContinue = () => {\r\n const vr = validate();\r\n setVr(vr);\r\n\r\n if (!vr.ok) {\r\n return;\r\n }\r\n\r\n return tyreSize !== null ? onSelect(tyreSize.tyreSize.trim()) : onSkip();\r\n };\r\n\r\n const validate = () => {\r\n const vr = VR.empty;\r\n\r\n const tyreSizeIsSelected = tyreSize !== null && tyreSize.tyreSize.trim();\r\n\r\n if (!isSkippable && !tyreSizeIsSelected) {\r\n vr.add(\"tyreSize\", t(\"Field is required.\"));\r\n }\r\n\r\n if (tyreSizeIsSelected && tyreSize!.tyreSize.length > 20) {\r\n vr.add(\r\n \"tyreSize\",\r\n t(\"Maximum length is {{len}} characters.\", { len: 20 })\r\n );\r\n }\r\n\r\n return vr;\r\n };\r\n\r\n const doesNotMatchHistory =\r\n defaultTyreSize !== null &&\r\n tyreSize &&\r\n defaultTyreSize !== tyreSize.tyreSize;\r\n\r\n var errors = vr.getErrors(\"tyreSize\") || [];\r\n\r\n if (loading) return ;\r\n\r\n return (\r\n \r\n \r\n ({\r\n ...provided,\r\n width: \"16rem\",\r\n borderColor: errors.length > 0 ? colours.lightRed : colours.black,\r\n background:\r\n errors.length > 0 ? colours.extraLightRed : colours.white,\r\n }),\r\n valueContainer: (provided, _) => ({\r\n ...provided,\r\n padding: \"2px 5px\",\r\n }),\r\n }}\r\n />\r\n {!vr.ok && }\r\n {doesNotMatchHistory && }\r\n \r\n {t(tyreSize === null && isSkippable ? \"Skip\" : \"Continue\")}\r\n \r\n {t(\"Back\")}\r\n \r\n );\r\n};\r\n\r\nconst DoesNotMatchHistoryWarning = () => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\r\n \"The selected tire size does not match our history for this vehicle.\"\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TyreSize;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../../../../button/Button\";\r\n\r\nconst ListComponent = styled.div``;\r\n\r\nconst ListItem = styled.li`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst Heading = styled.p`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nexport default { ListComponent, Heading, ListItem, Button };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport type Option = {\r\n value: string;\r\n label: string;\r\n};\r\n\r\ntype Props = {\r\n heading: string;\r\n options: Option[];\r\n onSelect: (option: Option) => void;\r\n onBackClick: () => void;\r\n};\r\n\r\nconst ListComponent = (props: Props) => {\r\n const { heading, options, onSelect, onBackClick } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n {heading}\r\n
    \r\n {options.map((o) => (\r\n \r\n onSelect(o)}>{o.label}\r\n \r\n ))}\r\n
\r\n {t(\"Back\")}\r\n
\r\n );\r\n};\r\n\r\nexport default ListComponent;\r\n","import styled from \"styled-components\";\r\nimport colors from \"../../utils/colours\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport _Button from \"../button/Button\";\r\n\r\nconst Parent = styled.div`\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n`;\r\n\r\nconst Gallery = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n width: 100%;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n`;\r\n\r\nconst FileSelect = styled.input`\r\n width: 0.1px;\r\n height: 0.1px;\r\n display: none;\r\n`;\r\nconst UploadContainer = styled.div`\r\n height: 1vh;\r\n`;\r\n\r\nconst UploadButton = styled.div`\r\n background-color: orange;\r\n width: 16rem;\r\n margin: auto;\r\n border-radius: 5px;\r\n margin-bottom: 5px;\r\n padding-top: 4px;\r\n padding-bottom: 4px;\r\n font-size: calc(5px + 1vw);\r\n width: 16rem;\r\n`;\r\n\r\nconst ConfirmButton = styled(UploadButton)``;\r\n\r\nconst Upload = styled.label`\r\n font-size: 1rem;\r\n display: block;\r\n text-align: center;\r\n padding: 5px;\r\n cursor: pointer;\r\n margin-left: 10px;\r\n margin-right: 10px;\r\n\r\n & span {\r\n font-size: 1em;\r\n margin-left: 10px;\r\n }\r\n\r\n &:hover {\r\n }\r\n`;\r\n\r\nconst Image = styled.img`\r\n max-width: 200px;\r\n max-height: 200px;\r\n height: 200px;\r\n width: 200px;\r\n position: absolute;\r\n z-index: 1;\r\n`;\r\n\r\nconst Footer = styled.div`\r\n margin-bottom: 5px;\r\n justify-content: space-around;\r\n display: flex;\r\n width: 100%;\r\n`;\r\n\r\ntype ErrorProp = {\r\n alert: boolean;\r\n};\r\n\r\nconst Error = styled.div`\r\n color: ${(props) => (props.alert ? colors.lightRed : colors.black)};\r\n margin-bottom: 5px;\r\n max-width: 16rem;\r\n`;\r\n\r\nconst Trash = styled(FontAwesomeIcon)`\r\ncolor: #808080\r\nopacity: 0.5;\r\nposition: absolute;\r\nz-index: 2;\r\nleft: 170px;\r\ntop: 2px;\r\npointer-events: none\r\n\r\n`;\r\n\r\nconst ImageContainer = styled.div`\r\n position: relative;\r\n z-index: 0;\r\n height: 200px;\r\n width: 200px;\r\n border: 2px solid black;\r\n margin: 2px;\r\n`;\r\n\r\nconst DataUsageWarning = styled.p`\r\n margin-bottom: 5px;\r\n max-width: 16rem;\r\n`;\r\n\r\nconst BackButton = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nexport default {\r\n BackButton,\r\n Parent,\r\n Image,\r\n FileSelect,\r\n Upload,\r\n UploadButton,\r\n UploadContainer,\r\n ConfirmButton,\r\n Footer,\r\n Gallery,\r\n Error,\r\n DataUsageWarning,\r\n Trash,\r\n ImageContainer,\r\n};\r\n","import React, { useState } from \"react\";\r\nimport S from \"./styles\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faCamera, faCheck, faTrash } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n onComplete: (files: File[]) => void;\r\n photoLimit?: number;\r\n photoCount?: number;\r\n onBackClick: () => void;\r\n};\r\n\r\nconst Camera = (props: Props) => {\r\n const { onComplete, photoLimit, photoCount, onBackClick } = props;\r\n const [fileUrls, setFileUrls] = useState([]);\r\n const [files, setFiles] = useState([]);\r\n const [tooManyPhotos, setTooManyPhotos] = useState(false);\r\n const { t } = useTranslation();\r\n\r\n const onChangeEvent = (e: React.ChangeEvent) => {\r\n if (e.target.files === null) {\r\n return;\r\n }\r\n\r\n setTooManyPhotos(false);\r\n const currentFileCount = files.length;\r\n const newFileCount = e.target.files.length;\r\n\r\n if (photoLimit && currentFileCount + newFileCount > photoLimit) {\r\n return setTooManyPhotos(true);\r\n }\r\n\r\n const newFileUrls = Array.from(e.target.files).map((f) =>\r\n URL.createObjectURL(f)\r\n );\r\n setFileUrls([...fileUrls, ...newFileUrls]);\r\n setFiles([...files, ...e.target.files]);\r\n };\r\n\r\n const onRemoveImage = (index: number) => {\r\n const newFileURLs: string[] = [];\r\n const newFiles: File[] = [];\r\n\r\n for (let i = 0; i < fileUrls.length; i++) {\r\n if (i !== index) {\r\n newFileURLs.push(fileUrls[i]);\r\n newFiles.push(files[i]);\r\n }\r\n }\r\n\r\n setFileUrls(newFileURLs);\r\n setFiles(newFiles);\r\n };\r\n\r\n const noImages = fileUrls.length === 0 && files.length === 0;\r\n\r\n return (\r\n \r\n {noImages && (\r\n \r\n {t(\r\n \"Please be aware that submitting high quality images may result in significant data usage. Methods for reducing image quality will vary by device so please check with your device manufacturer.\"\r\n )}\r\n \r\n )}\r\n \r\n {fileUrls.map((file, index) => (\r\n \r\n \r\n {\r\n onRemoveImage(index);\r\n }}\r\n />\r\n \r\n ))}\r\n \r\n \r\n \r\n {photoCount !== undefined && (\r\n \r\n {t(\"You are limited to only {{count}} photos.\", {\r\n count: photoLimit,\r\n })}\r\n \r\n )}\r\n \r\n \r\n \r\n {t(\"Upload Photos\")}\r\n \r\n \r\n \r\n {\r\n onComplete(files);\r\n }}\r\n >\r\n \r\n \r\n {t(\"Confirm\")}\r\n \r\n \r\n {t(\"Back\")}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Camera;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport RemovalReasonType from \"../removal-reason-type/RemovalReasonType\";\r\nimport TyreSize from \"../tyre-size/TyreSize\";\r\nimport ListComponent, { Option } from \"../list-component/ListComponent\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { RemovalReason } from \"360\";\r\nimport Camera from \"../../../../../camera/Camera\";\r\nimport { useApi, isSuccess, isNoContent } from \"../../../../../../api/Api\";\r\nimport Spinner from \"../../../../../spinner/Spinner\";\r\nimport GeneralErrors from \"../../../../../general-errors/GeneralErrors\";\r\n\r\ntype Props = {\r\n positionId: number;\r\n reference: string;\r\n onComplete: () => void;\r\n onFail: () => void;\r\n onBackClick: () => void;\r\n};\r\n\r\nconst Tyre = (props: Props) => {\r\n const { positionId, reference, onComplete, onFail, onBackClick } = props;\r\n const [isRemovalReasonDamage, setIsRemovalReasonDamage] = useState<\r\n boolean | null\r\n >(null);\r\n const [removalReason, setRemovalReason] = useState(\r\n null\r\n );\r\n const [removalReasons, setRemovalReasons] = useState([]);\r\n const [tyreSize, setTyreSize] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n const [errors, setErrors] = useState([]);\r\n const api = useApi();\r\n const { t } = useTranslation();\r\n\r\n const submitTyre = async (\r\n reference: string,\r\n positionId: number,\r\n removalReasonId: number,\r\n tyreSize: string,\r\n photos: File[]\r\n ) => {\r\n const form = new FormData();\r\n form.append(\"removalReasonId\", removalReasonId.toString());\r\n form.append(\"tyreSize\", tyreSize);\r\n\r\n for (var photo of photos) form.append(\"photos\", photo);\r\n\r\n return api.postForm(\r\n `api/breakdowns/${reference}/work-required/${positionId}`,\r\n \"1.0\",\r\n form\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const response = await api.get(\r\n \"api/removal-reasons\",\r\n \"1.0\"\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(response) && response.data.length > 0) {\r\n return setRemovalReasons(response.data);\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n })();\r\n }, [onFail, api]);\r\n\r\n const handleRemovalReasonSelect = (o: Option) => {\r\n const removalReason = removalReasons.find(\r\n (rr) => rr.id === Number(o.value)\r\n );\r\n\r\n if (removalReason) {\r\n setRemovalReason(removalReason);\r\n }\r\n };\r\n\r\n const handleCameraComplete = (photos: File[]) => {\r\n complete(photos);\r\n };\r\n\r\n const complete = async (photos: File[]) => {\r\n if (removalReason === null || tyreSize === null)\r\n throw new Error(\r\n \"attempted to submit tyre with no removal reason or tire size\"\r\n );\r\n\r\n try {\r\n setLoading(true);\r\n const response = await submitTyre(\r\n reference,\r\n positionId,\r\n removalReason.id,\r\n tyreSize,\r\n photos\r\n );\r\n setLoading(false);\r\n\r\n if (isNoContent(response)) return onComplete();\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n if (loading) return ;\r\n if (errors.length > 0)\r\n return setErrors([])} />;\r\n\r\n if (isRemovalReasonDamage === null) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (removalReason === null) {\r\n const heading =\r\n isRemovalReasonDamage === true\r\n ? t(\"Specify damage\")\r\n : t(\"Specify reason\");\r\n const options = removalReasons\r\n .filter((rr) => rr.isDamage === isRemovalReasonDamage)\r\n .map((rr) => ({ value: rr.id.toString(), label: t(rr.description) }));\r\n\r\n return (\r\n setIsRemovalReasonDamage(null)}\r\n />\r\n );\r\n }\r\n\r\n if (tyreSize === null)\r\n return (\r\n {}}\r\n onBackClick={() => setRemovalReason(null)}\r\n />\r\n );\r\n\r\n return (\r\n setTyreSize(null)}\r\n />\r\n );\r\n};\r\n\r\nexport default Tyre;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport ListComponent, { Option } from \"../list-component/ListComponent\";\r\nimport TyreSize from \"../tyre-size/TyreSize\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Husbandry as H } from \"360\";\r\nimport Camera from \"../../../../../camera/Camera\";\r\nimport { useApi, isSuccess, isNoContent } from \"../../../../../../api/Api\";\r\nimport Spinner from \"../../../../../spinner/Spinner\";\r\n\r\ntype Props = {\r\n positionId: number;\r\n reference: string;\r\n onComplete: () => void;\r\n onBackClick: () => void;\r\n onFail: () => void;\r\n};\r\n\r\nconst Husbandry = (props: Props) => {\r\n const { positionId, reference, onComplete, onBackClick, onFail } = props;\r\n const [husbandry, setHusbandry] = useState(null);\r\n const [husbandries, setHusbandries] = useState([]);\r\n const [tyreSizeSkipped, setTyreSizeSkipped] = useState(false);\r\n const [tyreSize, setTyreSize] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n const submitHusbandry = async (\r\n reference: string,\r\n positionId: number,\r\n husbandryId: number,\r\n tyreSize: string | null,\r\n photos: File[]\r\n ) => {\r\n const form = new FormData();\r\n form.append(\"husbandryId\", husbandryId.toString());\r\n if (tyreSize !== null) form.append(\"tyreSize\", tyreSize);\r\n\r\n for (var photo of photos) form.append(\"photos\", photo);\r\n\r\n return api.postForm(\r\n `api/breakdowns/${reference}/work-required/${positionId}`,\r\n \"1.0\",\r\n form\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const response = await api.get(\"api/husbandries\", \"1.0\");\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) {\r\n if (response.data.length === 0) onFail();\r\n return setHusbandries(response.data);\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n })();\r\n }, [t, onFail, api]);\r\n\r\n const complete = async (photos: File[]) => {\r\n if (husbandry === null)\r\n throw new Error(\"attempted to submit null husbandry.\");\r\n\r\n try {\r\n setLoading(true);\r\n const response = await submitHusbandry(\r\n reference,\r\n positionId,\r\n husbandry.id,\r\n tyreSize,\r\n photos\r\n );\r\n setLoading(false);\r\n\r\n if (isNoContent(response)) return onComplete();\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n const handleHusbandrySelect = (o: Option) => {\r\n const husbandry = husbandries.find((h) => h.id === Number(o.value));\r\n\r\n if (husbandry) setHusbandry(husbandry);\r\n };\r\n\r\n const handleCameraComplete = (photos: File[]) => {\r\n complete(photos);\r\n };\r\n\r\n const options = husbandries.map((h) => ({\r\n value: h.id.toString(),\r\n label: t(h.description),\r\n }));\r\n\r\n if (loading) return ;\r\n\r\n if (husbandry === null)\r\n return (\r\n \r\n );\r\n\r\n if (tyreSize === null && !tyreSizeSkipped)\r\n return (\r\n setTyreSizeSkipped(true)}\r\n onBackClick={() => setHusbandry(null)}\r\n />\r\n );\r\n\r\n return (\r\n {\r\n setTyreSize(null);\r\n setTyreSizeSkipped(false);\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default Husbandry;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../../../../button/Button\";\r\n\r\nconst Prompt = styled.div`\r\n & > * {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nconst PromptText = styled.p`\r\n width: 16rem;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nexport default { Prompt, PromptText, Button };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n position: string;\r\n onAddWork: () => void;\r\n onChangeWork: () => void;\r\n onRemoveWork: () => void;\r\n onCancel: () => void;\r\n hasExistingWork: boolean;\r\n};\r\n\r\nconst Prompt = (props: Props) => {\r\n const {\r\n position,\r\n onAddWork,\r\n onChangeWork,\r\n onRemoveWork,\r\n onCancel,\r\n hasExistingWork,\r\n } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {t(\"You have selected position {{position}}.\", { position })}\r\n \r\n {!hasExistingWork && (\r\n {t(\"Add work\")}\r\n )}\r\n {hasExistingWork && (\r\n {t(\"Change existing work\")}\r\n )}\r\n {hasExistingWork && (\r\n {t(\"Remove existing work\")}\r\n )}\r\n {t(\"Back\")}\r\n \r\n );\r\n};\r\n\r\nexport default Prompt;\r\n","import React, { useState } from \"react\";\r\nimport WorkType from \"./work-type/WorkType\";\r\nimport Tyre from \"./tyre/Tyre\";\r\nimport Husbandry from \"./husbandry/Husbandry\";\r\nimport Prompt from \"./prompt/Prompt\";\r\nimport { WorkType as WT } from \"360\";\r\nimport { useApi, isNoContent } from \"../../../../../api/Api\";\r\nimport Spinner from \"../../../../spinner/Spinner\";\r\nimport { Position } from \"360\";\r\n\r\ntype Props = {\r\n position: Position;\r\n reference: string;\r\n onComplete: () => void;\r\n onCancel: () => void;\r\n onFail: () => void;\r\n onRemove: () => void;\r\n hasExistingWork: boolean;\r\n};\r\n\r\nconst PositionWorkRequired = (props: Props) => {\r\n const { position, reference, onCancel, onComplete, onRemove, onFail } = props;\r\n const [workType, setWorkType] = useState(null);\r\n const [hasExistingWork, setHasExistingWork] = useState(\r\n props.hasExistingWork\r\n );\r\n const [prompted, setPrompted] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const api = useApi();\r\n\r\n const handleRemoveWork = async () => {\r\n try {\r\n setLoading(true);\r\n const response = await api.delete(\r\n `api/breakdowns/${reference}/work-required/${position.id}`,\r\n \"1.0\"\r\n );\r\n setLoading(false);\r\n\r\n if (isNoContent(response)) return onRemove();\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n const handleChangeWork = () => {\r\n setHasExistingWork(false);\r\n setPrompted(true);\r\n };\r\n\r\n const handleWorkTypeBackClick = () => {\r\n setHasExistingWork(props.hasExistingWork);\r\n setPrompted(false);\r\n };\r\n\r\n if (loading) return ;\r\n\r\n if (!prompted) {\r\n return (\r\n setPrompted(true)}\r\n onChangeWork={handleChangeWork}\r\n onRemoveWork={handleRemoveWork}\r\n onCancel={onCancel}\r\n hasExistingWork={hasExistingWork}\r\n />\r\n );\r\n }\r\n\r\n if (workType === \"TYRE\")\r\n return (\r\n setWorkType(null)}\r\n />\r\n );\r\n\r\n if (workType === \"HUSBANDRY\")\r\n return (\r\n setWorkType(null)}\r\n />\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default PositionWorkRequired;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../../button/Button\";\r\nimport colours from \"../../../../utils/colours\";\r\n\r\nconst Configuration = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n & > * {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst Grid = styled.div`\r\n border-radius: 5px;\r\n display: grid;\r\n justify-content: space-between;\r\n justify-items: center;\r\n align-items: center;\r\n grid-template-columns: repeat(5, 1fr);\r\n grid-template-rows: repeat(5, 4em);\r\n grid-gap: 2px;\r\n\r\n & .pos1 {\r\n grid-column: 1;\r\n }\r\n\r\n & .pos2 {\r\n grid-column: 2;\r\n }\r\n\r\n & .pos3 {\r\n grid-column: 3;\r\n }\r\n\r\n & .pos4 {\r\n grid-column: 4;\r\n }\r\n\r\n & .pos5 {\r\n grid-column: 5;\r\n }\r\n\r\n & .axle1 {\r\n grid-row: 1;\r\n }\r\n\r\n & .axle2 {\r\n grid-row: 2;\r\n }\r\n\r\n & .axle3 {\r\n grid-row: 3;\r\n }\r\n\r\n & .axle4 {\r\n grid-row: 4;\r\n }\r\n\r\n & .axle5 {\r\n grid-row: 5;\r\n }\r\n`;\r\n\r\ntype PositionProps = {\r\n hasWork: boolean;\r\n};\r\n\r\nconst Position = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: ${props =>\r\n props.hasWork ? colours.lightOrange : colours.grey3};\r\n height: 4em;\r\n width: 100%;\r\n border-radius: 5px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: ${props =>\r\n props.hasWork ? colours.darkOrange : colours.grey2};\r\n }\r\n`;\r\n\r\nexport default { Grid, Position, Configuration, Button };\r\n","import React, { useState } from \"react\";\r\nimport PositionWorkRequired from \"./position-work-required/PositionWorkRequired\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Configuration as Config } from \"360\";\r\nimport GeneralErrors from \"../../../general-errors/GeneralErrors\";\r\nimport { Position } from \"360\";\r\n\r\ntype Props = {\r\n initialValue: number[] | null;\r\n configuration: Config;\r\n reference: string;\r\n onChangeConfiguration: () => void;\r\n onComplete: (positionsWithWork: number[]) => void;\r\n onBackClick: () => void;\r\n onFail: () => void;\r\n onCancel: () => void;\r\n};\r\n\r\nconst Configuration = (props: Props) => {\r\n const {\r\n onCancel,\r\n configuration,\r\n reference,\r\n onChangeConfiguration,\r\n onComplete,\r\n onBackClick,\r\n onFail,\r\n initialValue,\r\n } = props;\r\n\r\n const [editingPosition, setEditingPosition] = useState(null);\r\n const [positionIdsWithWork, setPositionsWithWork] = useState(\r\n initialValue || []\r\n );\r\n const [errors, setErrors] = useState([]);\r\n const [promptedForLostWork, setPromptedForLostWork] = useState(\r\n false\r\n );\r\n const { t } = useTranslation();\r\n const workAlreadySubmitted = initialValue !== null;\r\n\r\n const handlePositionComplete = () => {\r\n if (editingPosition !== null) {\r\n setPositionsWithWork([...positionIdsWithWork, editingPosition.id]);\r\n }\r\n\r\n setEditingPosition(null);\r\n };\r\n\r\n const handleContinueClick = () => {\r\n if (positionIdsWithWork.length > 0) return onComplete(positionIdsWithWork);\r\n\r\n setErrors([t(\"You must add work to at least one position.\")]);\r\n };\r\n\r\n const handleBackClick = () => {\r\n if (positionIdsWithWork.length > 0 || !workAlreadySubmitted)\r\n return onBackClick();\r\n\r\n setErrors([t(\"You must add work to at least one position.\")]);\r\n };\r\n\r\n const handleChangeConfigurationClick = () => {\r\n if (positionIdsWithWork.length === 0 || promptedForLostWork)\r\n return onChangeConfiguration();\r\n\r\n setErrors([\r\n t(\r\n \"Warning: You will lose existing work on positions if you change the configuration.\"\r\n ),\r\n ]);\r\n setPromptedForLostWork(true);\r\n };\r\n\r\n const handlePositionRemoved = () => {\r\n if (editingPosition) {\r\n const newPositionIdsWithWork = positionIdsWithWork.filter(\r\n (id) => id !== editingPosition.id\r\n );\r\n setPositionsWithWork(newPositionIdsWithWork);\r\n }\r\n\r\n setEditingPosition(null);\r\n };\r\n\r\n const handlePositionCancel = () => setEditingPosition(null);\r\n\r\n const positions = [];\r\n\r\n for (const axleNumber in configuration.axles) {\r\n const axle = configuration.axles[axleNumber];\r\n\r\n for (const positionNumber in axle.positions) {\r\n const position = axle.positions[positionNumber];\r\n\r\n positions.push(\r\n -1}\r\n onClick={() => setEditingPosition(position)}\r\n >\r\n {position.description}\r\n \r\n );\r\n }\r\n }\r\n\r\n if (errors.length > 0)\r\n return setErrors([])} />;\r\n\r\n if (editingPosition)\r\n return (\r\n -1}\r\n />\r\n );\r\n\r\n return (\r\n \r\n {positions}\r\n \r\n {t(\"Change configuration\")}\r\n \r\n {t(\"Continue\")}\r\n {t(\"Back\")}\r\n {t(\"Save for later or cancel\")}\r\n \r\n );\r\n};\r\n\r\nexport default Configuration;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../../button/Button\";\r\nimport colours from \"../../../../utils/colours\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nconst ConfigurationChooser = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n & > * {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nconst Heading = styled.p`\r\n width: 16rem;\r\n`;\r\n\r\nconst ButtonRow = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n`;\r\n\r\nconst LittleButton = styled(_Button)`\r\n flex-grow: 1;\r\n margin-right: 5px;\r\n\r\n &:last-child {\r\n margin-right: 0px;\r\n }\r\n`;\r\n\r\nconst BigButton = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst ArrowButton = styled(_Button)`\r\n width: 2rem;\r\n height: 2rem;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst PreviewHolder = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin: 10px 0px;\r\n`;\r\n\r\nconst Warning = styled.div`\r\n display: flex;\r\n align-items: center;\r\n max-width: 16rem;\r\n`;\r\n\r\nconst WarningIcon = styled(FontAwesomeIcon)`\r\n font-size: 24px;\r\n margin-right: 5px;\r\n color: ${colours.yellow};\r\n`;\r\n\r\nexport default {\r\n ConfigurationChooser,\r\n PreviewHolder,\r\n ArrowButton,\r\n Heading,\r\n ButtonRow,\r\n LittleButton,\r\n BigButton,\r\n Warning,\r\n WarningIcon\r\n};\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../../../../utils/colours\";\r\n\r\nconst Configuration = styled.div``;\r\n\r\nconst Axle = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n position: relative;\r\n`;\r\n\r\nconst AxleType = styled.div`\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n z-index: 10;\r\n\r\n & span {\r\n padding: 5px;\r\n border-radius: 5px;\r\n background-color: ${colours.lightOrange};\r\n }\r\n`;\r\n\r\ntype PositionProps = {\r\n hasPosition: boolean;\r\n};\r\n\r\nconst Position = styled.div`\r\n display: flex;\r\n visibility: ${props => (props.hasPosition ? \"visible\" : \"hidden\")};\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: ${colours.grey3};\r\n height: 40px;\r\n width: 30px;\r\n border-radius: 5px;\r\n margin: 2px;\r\n`;\r\n\r\nexport default { Configuration, Axle, Position, AxleType };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { Configuration, Axle, Position } from \"360\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype PositionPreviewProps = {\r\n position?: Position;\r\n};\r\n\r\nconst PositionPreview = (props: PositionPreviewProps) => {\r\n const { position } = props;\r\n\r\n return ;\r\n};\r\n\r\ntype AxlePreviewProps = {\r\n axle?: Axle;\r\n};\r\n\r\nconst AxlePreview = (props: AxlePreviewProps) => {\r\n const { axle } = props;\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n {props.axle && (\r\n \r\n {t(props.axle.axleType.description)}\r\n \r\n )}\r\n {[1, 2, 3, 4, 5].map((i) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\ntype ConfigurationPreviewProps = {\r\n configuration: Configuration;\r\n};\r\n\r\nconst ConfigurationPreview = (props: ConfigurationPreviewProps) => {\r\n const { configuration } = props;\r\n\r\n return (\r\n \r\n {[1, 2, 3, 4, 5].map((i) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default ConfigurationPreview;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport S from \"./styles\";\r\nimport { Configuration, Axle, VehicleType } from \"360\";\r\nimport ConfigurationPreview from \"./configuration-preview/ConfigurationPreview\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n faChevronRight,\r\n faChevronLeft,\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApi, isSuccess } from \"../../../../api/Api\";\r\nimport Spinner from \"../../../spinner/Spinner\";\r\nimport { faExclamationTriangle } from \"@fortawesome/pro-solid-svg-icons\";\r\n\r\ntype Props = {\r\n onChoose: (configuration: Configuration) => void;\r\n onFail: (errors?: string[]) => void;\r\n};\r\n\r\n// any axle with 4 positions can be considered twinned.\r\nconst axleIsTwinned = (a: Axle): boolean =>\r\n Object.keys(a.positions).length === 4;\r\n\r\nconst getTwinnedFilter = (twinned: boolean) => (c: Configuration) =>\r\n Object.values(c.axles).filter(axleIsTwinned).length > 0 === twinned; // eslint-disable-line no-mixed-operators\r\n\r\nconst axleIsDrive = (a: Axle) => a.axleType.id === 2 || a.axleType.id === 9;\r\n\r\nconst getDriveAxleCountFilter =\r\n (driveAxleCount: number) => (c: Configuration) =>\r\n Object.values(c.axles).filter(axleIsDrive).length === driveAxleCount;\r\n\r\nconst getAxleCountFilter = (axleCount: number) => (c: Configuration) =>\r\n Object.keys(c.axles).length === axleCount;\r\n\r\nconst filterConfigurations = (\r\n configurations: Configuration[],\r\n axleCount: number,\r\n driveAxleCount: number,\r\n twinned: boolean | null\r\n) => {\r\n var axleCountFilter = getAxleCountFilter(axleCount);\r\n var driveAxleCountFilter = getDriveAxleCountFilter(driveAxleCount);\r\n var twinnedFilter = twinned !== null ? getTwinnedFilter(twinned) : () => true;\r\n\r\n return configurations\r\n .filter(axleCountFilter)\r\n .filter(driveAxleCountFilter)\r\n .filter(twinnedFilter);\r\n};\r\n\r\nconst ConfigurationChooser = (props: Props) => {\r\n const { onChoose, onFail } = props;\r\n\r\n const [vehicleType, setVehicleType] = useState(\"POWERED\");\r\n const [axleCount, setAxleCount] = useState(null);\r\n const [driveAxleCount, setDriveAxleCount] = useState(null);\r\n const [axlesTwinned, setAxlesTwinned] = useState(null);\r\n const [configurations, setConfigurations] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [configurationIndex, setConfigurationIndex] = useState(0);\r\n\r\n const api = useApi();\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const response = await api.get(\r\n \"api/configurations\",\r\n \"1.1\"\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) return setConfigurations(response.data);\r\n } catch {}\r\n\r\n onFail();\r\n })();\r\n }, [api, onFail]);\r\n\r\n const enoughDataForConfigurationSelection =\r\n vehicleType !== null &&\r\n axleCount !== null &&\r\n ((vehicleType === \"POWERED\" && driveAxleCount !== null) ||\r\n (vehicleType === \"OTHER\" && axlesTwinned !== null));\r\n\r\n const filteredConfigurations = enoughDataForConfigurationSelection\r\n ? filterConfigurations(\r\n configurations,\r\n axleCount!,\r\n driveAxleCount !== null ? driveAxleCount : 0,\r\n axlesTwinned\r\n )\r\n : [];\r\n\r\n const handleContinueClick = () => {\r\n if (filteredConfigurations.length === 0) return;\r\n\r\n onChoose(filteredConfigurations[configurationIndex]);\r\n };\r\n\r\n const handlePreviousConfigurationClick = () => {\r\n if (configurationIndex <= 0) return;\r\n\r\n setConfigurationIndex(configurationIndex - 1);\r\n };\r\n\r\n const handleNextConfigurationClick = () => {\r\n if (configurationIndex >= filteredConfigurations.length - 1) return;\r\n\r\n setConfigurationIndex(configurationIndex + 1);\r\n };\r\n\r\n if (loading) return ;\r\n\r\n return (\r\n \r\n {t(\"Does the vehicle have a powered/driven axle?\")}\r\n \r\n {\r\n if (axleCount && axleCount < 2) setAxleCount(null);\r\n\r\n setAxlesTwinned(null);\r\n setVehicleType(\"POWERED\");\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n {t(\"Yes\")}\r\n \r\n {\r\n setDriveAxleCount(null);\r\n setVehicleType(\"OTHER\");\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n {t(\"No\")}\r\n \r\n \r\n {vehicleType !== null && {t(\"Number of axles\")}}\r\n {vehicleType !== null && (\r\n \r\n {vehicleType === \"OTHER\" && (\r\n {\r\n setAxleCount(1);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n 1\r\n \r\n )}\r\n {\r\n setAxleCount(2);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n 2\r\n \r\n {\r\n setAxleCount(3);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n 3\r\n \r\n {\r\n setAxleCount(4);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n 4\r\n \r\n {\r\n setAxleCount(5);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n 5\r\n \r\n \r\n )}\r\n {vehicleType === \"POWERED\" && (\r\n {t(\"Number of drive axles\")}\r\n )}\r\n {vehicleType === \"POWERED\" && (\r\n \r\n {\r\n setDriveAxleCount(1);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n 1\r\n \r\n {\r\n setDriveAxleCount(2);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n 2\r\n \r\n \r\n )}\r\n {vehicleType === \"OTHER\" && {t(\"Axles twinned\")}}\r\n {vehicleType === \"OTHER\" && (\r\n \r\n {\r\n setAxlesTwinned(true);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n {t(\"Yes\")}\r\n \r\n {\r\n setAxlesTwinned(false);\r\n setConfigurationIndex(0);\r\n }}\r\n >\r\n {t(\"No\")}\r\n \r\n \r\n )}\r\n {enoughDataForConfigurationSelection &&\r\n filteredConfigurations.length > 0 && (\r\n \r\n 0 ? \"ORANGE\" : \"GREY\"}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {enoughDataForConfigurationSelection &&\r\n filteredConfigurations.length === 0 && }\r\n {enoughDataForConfigurationSelection &&\r\n filteredConfigurations.length > 0 && (\r\n \r\n {t(\"Continue\")}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst NoConfigurationsFound = () => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\r\n \"No configurations match your selected criteria. Please check your criteria and contact us if a matching configuration cannot be found.\"\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ConfigurationChooser;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Configuration from \"./configuration/Configuration\";\r\nimport ConfigurationChooser from \"./configuration-chooser/ConfigurationChooser\";\r\nimport { Configuration as Config } from \"360\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { useApi, isSuccess, isNoContent } from \"../../../api/Api\";\r\n\r\ntype Props = {\r\n initialValue: number[] | null;\r\n onComplete: (positionsWithWork: number[]) => void;\r\n onBackClick: () => void;\r\n onCancel: () => void;\r\n onFail: () => void;\r\n reference: string;\r\n};\r\n\r\nconst WorkRequired = (props: Props) => {\r\n const {\r\n onCancel,\r\n onComplete,\r\n onBackClick,\r\n onFail,\r\n reference,\r\n initialValue,\r\n } = props;\r\n const [configuration, setConfiguration] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const api = useApi();\r\n\r\n const workAlreadySubmitted = initialValue !== null && initialValue.length > 0;\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const response = await (!workAlreadySubmitted\r\n ? api.get(\r\n `api/breakdowns/${reference}/configuration/default`,\r\n \"1.1\"\r\n )\r\n : api.get(\r\n `api/breakdowns/${reference}/configuration`,\r\n \"1.1\"\r\n ));\r\n setLoading(false);\r\n\r\n if (!isSuccess(response)) {\r\n // if we were just attempting to load a default configuration, we can continue\r\n // and allow the user to select a configuration.\r\n if (!workAlreadySubmitted) return;\r\n\r\n // if we were attempting to load the breakdown configuration, we cannot recover\r\n // from this.\r\n return onFail();\r\n }\r\n\r\n if (!workAlreadySubmitted && response.data !== null) {\r\n // we have successfully retrieved a default configuration for the breakdown.\r\n // we need to submit this as our breakdown's configuration.\r\n setLoading(true);\r\n const submitResponse = await api.post(\r\n `api/breakdowns/${reference}/configuration`,\r\n \"1.0\",\r\n { id: response.data.id }\r\n );\r\n setLoading(false);\r\n\r\n if (isNoContent(submitResponse))\r\n return setConfiguration(response.data);\r\n\r\n // if the submission failed, we can continue and allow the user to select\r\n // a configuration.\r\n return setConfiguration(null);\r\n }\r\n\r\n return setConfiguration(response.data);\r\n } catch {\r\n return onFail();\r\n }\r\n })();\r\n }, [reference, workAlreadySubmitted, onFail, api]);\r\n\r\n const handleChooseConfiguration = async (config: Config) => {\r\n try {\r\n setLoading(true);\r\n const response = await api.post(\r\n `api/breakdowns/${reference}/configuration`,\r\n \"1.0\",\r\n { id: config.id }\r\n );\r\n setLoading(false);\r\n\r\n if (isNoContent(response)) return setConfiguration(config);\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n if (loading) return ;\r\n\r\n if (configuration === null)\r\n return (\r\n \r\n );\r\n\r\n return (\r\n setConfiguration(null)}\r\n />\r\n );\r\n};\r\n\r\nexport default WorkRequired;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport colours from \"../../../utils/colours\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n max-width: 16rem;\r\n\r\n & > * {\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nexport const Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nexport const WarningIcon = styled(FontAwesomeIcon)`\r\n font-size: 48px;\r\n color: ${colours.yellow};\r\n align-self: center;\r\n`;\r\n","import React from \"react\";\r\nimport { Container, WarningIcon, Button } from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { faExclamationTriangle } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useApi, Response, Api } from \"../../../api/Api\";\r\n\r\ninterface Props {\r\n onComplete: () => void;\r\n onReturnToBreakdown: () => void;\r\n reference: string;\r\n canSave: boolean;\r\n}\r\n\r\nconst cancelBreakdown = async (\r\n api: Api,\r\n reference: string\r\n): Promise> => api.delete(`api/breakdowns/${reference}`, \"1.0\");\r\n\r\nconst SaveOrCancel = (props: Props) => {\r\n const { canSave, onComplete, onReturnToBreakdown, reference } = props;\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n const handleCancel = async () => {\r\n // if we fail to cancel the breakdown at this stage we can allow the user to continue\r\n // because the breakdown will be cleaned up later.\r\n try {\r\n await cancelBreakdown(api, reference);\r\n } catch {}\r\n\r\n return onComplete();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\r\n \"If you cancel the breakdown, all progress will be lost and the breakdown will not be received by our agents.\"\r\n )}\r\n \r\n {canSave && (\r\n \r\n {t(\r\n \"If you save the breakdown for later, you will have 24 hours to provide the remaining details of the breakdown and submit it to our agents.\"\r\n )}\r\n \r\n )}\r\n \r\n {canSave && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SaveOrCancel;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport _Input from \"../../input/Input\";\r\nimport colours from \"../../../utils/colours\";\r\n\r\nconst Contacts = styled.div`\r\n & > * {\r\n margin-bottom: 5px;\r\n }\r\n\r\n max-width: 16rem;\r\n`;\r\n\r\nconst Header = styled.p``;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16rem;\r\n`;\r\n\r\nconst Contact = styled(_Button)`\r\n width: 16rem;\r\n background-color: ${colours.grey3};\r\n word-break: break-all;\r\n\r\n &:hover {\r\n background-color: ${colours.extraLightRed};\r\n }\r\n`;\r\n\r\nexport default {\r\n Contacts,\r\n Header,\r\n Button,\r\n Input,\r\n Contact,\r\n};\r\n","import React, { useState } from \"react\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApi, Api, isNoContent } from \"../../../api/Api\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\n\r\nfunction addContact(api: Api, reference: string, contact: string) {\r\n return api.post(`api/breakdowns/${reference}/contacts`, \"1.0\", { contact });\r\n}\r\n\r\nfunction removeContact(api: Api, reference: string, contact: string) {\r\n return api.delete(`api/breakdowns/${reference}/contacts/${contact}`, \"1.0\");\r\n}\r\n\r\nfunction isValidContact(contact: string) {\r\n const ats = contact.match(/@/g);\r\n return (\r\n ats !== null &&\r\n ats.length === 1 &&\r\n contact[0] !== \"@\" &&\r\n contact[contact.length - 1] !== \"@\"\r\n );\r\n}\r\n\r\ntype Props = {\r\n reference: string;\r\n initialValue: string[] | null;\r\n onComplete: (contacts: string[]) => void;\r\n onBackClick: () => void;\r\n onCancel: () => void;\r\n onFail: () => void;\r\n};\r\n\r\nfunction Contacts(props: Props) {\r\n const { reference, initialValue, onComplete, onBackClick, onCancel, onFail } =\r\n props;\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [contacts, setContacts] = useState(initialValue || []);\r\n const [contact, setContact] = useState(\"\");\r\n const [errors, setErrors] = useState([]);\r\n const api = useApi();\r\n const { t } = useTranslation();\r\n\r\n const handleContactChange = (e: React.ChangeEvent) =>\r\n setContact(e.target.value);\r\n\r\n const handleAddClick = async () => {\r\n try {\r\n setErrors([]);\r\n\r\n if (contact === \"\") {\r\n return;\r\n }\r\n\r\n if (!isValidContact(contact)) {\r\n return setErrors([\"Must be a valid email address.\"]);\r\n }\r\n\r\n setLoading(true);\r\n const response = await addContact(api, reference, contact);\r\n setLoading(false);\r\n if (isNoContent(response)) {\r\n setContact(\"\");\r\n return setContacts([...contacts, contact]);\r\n }\r\n } catch {}\r\n return onFail();\r\n };\r\n\r\n const handleRemoveClick = async (contact: string) => {\r\n try {\r\n setLoading(true);\r\n const response = await removeContact(api, reference, contact);\r\n setLoading(false);\r\n if (isNoContent(response)) {\r\n const updated = contacts.filter((x) => x !== contact);\r\n return setContacts(updated);\r\n }\r\n } catch {}\r\n return onFail();\r\n };\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n const sorted = contacts.sort((a, b) => a.localeCompare(b));\r\n\r\n return (\r\n \r\n {t(\"Email contacts\")}\r\n

\r\n {t(\r\n \"Please add any email addresses to which you would like job updates to be sent.\"\r\n )}\r\n

\r\n \r\n {t(\"Add\")}\r\n {sorted.map((c, i) => (\r\n handleRemoveClick(c)}>\r\n {c}\r\n \r\n ))}\r\n onComplete(contacts)}>\r\n {t(contacts.length > 0 ? \"Continue\" : \"Skip\")}\r\n \r\n {t(\"Back\")}\r\n {t(\"Save for later or cancel\")}\r\n
\r\n );\r\n}\r\n\r\nexport default Contacts;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport * as Components from \"./\";\r\nimport GeneralErrors from \"../general-errors/GeneralErrors\";\r\nimport Spinner from \"../spinner/Spinner\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Api, Response, useApi, mapSuccess, isSuccess } from \"../../api/Api\";\r\nimport {\r\n BreakdownSummary,\r\n BreakdownVehicle,\r\n Customer,\r\n SubmissionResult,\r\n ContactCaller,\r\n LocationType,\r\n Location,\r\n TimeSlot,\r\n} from \"360\";\r\nimport { useUserContext } from \"../../contexts/UserContext\";\r\n\r\ntype ActiveComponent =\r\n | \"HEALTH-SAFETY-WARNING\"\r\n | \"VEHICLE\"\r\n | \"CUSTOMER\"\r\n | \"PURCHASE-ORDER-DEFECT-NUMBER\"\r\n | \"MILEAGE\"\r\n | \"CONTACT-CALLER\"\r\n | \"LOCATION-TYPE\"\r\n | \"LOCATION\"\r\n | \"AVAILABILITY\"\r\n | \"WORK-REQUIRED\"\r\n | \"ADDITIONAL-INFORMATION\"\r\n | \"CONTACTS\"\r\n | \"SUMMARY\"\r\n | \"CONFIRMATION\";\r\n\r\ntype Props = {\r\n onComplete: () => void;\r\n onFail: () => void;\r\n reference: string | null;\r\n};\r\n\r\ninterface BreakdownInProgress extends BreakdownSummary {\r\n positionIdsWithWork: number[] | null;\r\n}\r\n\r\nconst getBreakdownInProgress = async (\r\n api: Api,\r\n reference: string\r\n): Promise> => {\r\n const response = await api.get(`api/breakdowns/${reference}`, \"1.1\");\r\n\r\n return mapSuccess(response, (data) => ({\r\n ...data.summary,\r\n availability: data.summary.availability.map((a: any) => ({\r\n from: new Date(a.from),\r\n to: new Date(a.to),\r\n })),\r\n positionIdsWithWork: data.summary.workRequired.map(\r\n (wr: any) => wr.position.id\r\n ),\r\n }));\r\n};\r\n\r\nconst getFirstComponentForResumedBreakdown = (\r\n breakdown: BreakdownInProgress,\r\n enableContacts: boolean\r\n): ActiveComponent => {\r\n if (\r\n (enableContacts && breakdown.contacts && breakdown.contacts.length > 0) ||\r\n (!enableContacts && breakdown.additionalInformation)\r\n ) {\r\n return \"SUMMARY\";\r\n }\r\n\r\n if (enableContacts && breakdown.additionalInformation) {\r\n return \"CONTACTS\";\r\n }\r\n\r\n if (\r\n breakdown.positionIdsWithWork &&\r\n breakdown.positionIdsWithWork.length > 0\r\n ) {\r\n return \"ADDITIONAL-INFORMATION\";\r\n }\r\n\r\n if (\r\n (breakdown.availability && breakdown.availability.length > 0) ||\r\n (breakdown.location &&\r\n breakdown.locationType &&\r\n breakdown.locationType.id === 1)\r\n ) {\r\n return \"WORK-REQUIRED\";\r\n }\r\n\r\n if (\r\n breakdown.location &&\r\n breakdown.locationType &&\r\n breakdown.locationType.id !== 1\r\n ) {\r\n return \"AVAILABILITY\";\r\n }\r\n\r\n if (breakdown.locationType) {\r\n return \"LOCATION\";\r\n }\r\n\r\n if (breakdown.contactCaller) {\r\n return \"LOCATION-TYPE\";\r\n }\r\n\r\n if (breakdown.mileage) {\r\n return \"CONTACT-CALLER\";\r\n }\r\n\r\n if (breakdown.purchaseOrderDefectNumber) {\r\n return \"MILEAGE\";\r\n }\r\n\r\n return \"PURCHASE-ORDER-DEFECT-NUMBER\";\r\n};\r\n\r\nconst Breakdown = (props: Props) => {\r\n const { reference, onComplete, onFail } = props;\r\n const [criticalError, setCriticalError] = useState(false);\r\n const [reachedSummary, setReachedSummary] = useState(false);\r\n const [activeComponent, setActiveComponent] = useState(\r\n \"HEALTH-SAFETY-WARNING\"\r\n );\r\n const [submissionResult, setSubmissionResult] =\r\n useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n const user = useUserContext();\r\n const [showCancelPrompt, setShowCancelPrompt] = useState(false);\r\n const [breakdownInProgress, setBreakdownInProgress] =\r\n useState(null);\r\n\r\n const breakdownIsRoadside = breakdownInProgress?.locationType?.id === 1;\r\n const canSaveForLater =\r\n breakdownInProgress?.vehicle !== null &&\r\n breakdownInProgress?.customer !== null;\r\n const enableContacts = user.countryId === 2;\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n if (!reference) {\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n const response = await getBreakdownInProgress(api, reference);\r\n\r\n if (isSuccess(response)) {\r\n setBreakdownInProgress({ ...response.data, reference });\r\n return setLoading(false);\r\n }\r\n } catch {}\r\n\r\n setCriticalError(true);\r\n setLoading(false);\r\n })();\r\n }, [api, reference]);\r\n\r\n const handleHealthSafetyWarningComplete = async () => {\r\n try {\r\n if (reference && breakdownInProgress) {\r\n return showNextComponent(\r\n getFirstComponentForResumedBreakdown(\r\n breakdownInProgress,\r\n enableContacts\r\n )\r\n );\r\n }\r\n\r\n setLoading(true);\r\n const response = await api.get(\"api/breakdowns/new\", \"1.0\");\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) {\r\n setBreakdownInProgress({\r\n reference: response.data,\r\n vehicle: null,\r\n customer: null,\r\n purchaseOrderDefectNumber: null,\r\n mileage: null,\r\n location: null,\r\n locationType: null,\r\n workRequired: null,\r\n positionIdsWithWork: null,\r\n additionalInformation: null,\r\n contactCaller: null,\r\n availability: null,\r\n contacts: null,\r\n });\r\n showNextComponent(\"VEHICLE\");\r\n return;\r\n }\r\n } catch {}\r\n\r\n return setCriticalError(true);\r\n };\r\n\r\n const showNextComponent = (nextComponent: ActiveComponent) =>\r\n setActiveComponent(reachedSummary ? \"SUMMARY\" : nextComponent);\r\n\r\n const handleCancel = () => setShowCancelPrompt(true);\r\n\r\n if (loading) return ;\r\n\r\n if (criticalError)\r\n return (\r\n \r\n );\r\n\r\n if (activeComponent === \"HEALTH-SAFETY-WARNING\")\r\n return (\r\n \r\n );\r\n\r\n if (breakdownInProgress === null)\r\n throw new Error(\r\n \"invalid component state. breakdown in progress is null after the health and safety stage.\"\r\n );\r\n\r\n const handleVehicleComplete = (\r\n vehicle: BreakdownVehicle,\r\n customer: Customer | null\r\n ) => {\r\n setBreakdownInProgress({\r\n ...breakdownInProgress,\r\n vehicle,\r\n customer: customer || breakdownInProgress.customer,\r\n });\r\n\r\n // if the customer couldn't be automatically determined, we must get the user\r\n // to select it. this is irrespective of whether we have come from the summary screen.\r\n if (customer === null) {\r\n return setActiveComponent(\"CUSTOMER\");\r\n }\r\n\r\n showNextComponent(\"PURCHASE-ORDER-DEFECT-NUMBER\");\r\n };\r\n\r\n const handleCustomerComplete = (customer: Customer) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, customer });\r\n showNextComponent(\"PURCHASE-ORDER-DEFECT-NUMBER\");\r\n };\r\n\r\n const handlePurchaseOrderDefectNumberComplete = (\r\n purchaseOrderDefectNumber: string\r\n ) => {\r\n setBreakdownInProgress({\r\n ...breakdownInProgress,\r\n purchaseOrderDefectNumber,\r\n });\r\n showNextComponent(\"MILEAGE\");\r\n };\r\n\r\n const handleMileageComplete = (mileage: number | null) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, mileage });\r\n showNextComponent(\"CONTACT-CALLER\");\r\n };\r\n\r\n const handleContactCallerComplete = (contactCaller: ContactCaller) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, contactCaller });\r\n showNextComponent(\"LOCATION-TYPE\");\r\n };\r\n\r\n const handleLocationTypeComplete = (locationType: LocationType) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, locationType });\r\n showNextComponent(\"LOCATION\");\r\n };\r\n\r\n const handleLocationComplete = (location: Location) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, location });\r\n showNextComponent(breakdownIsRoadside ? \"WORK-REQUIRED\" : \"AVAILABILITY\");\r\n };\r\n\r\n const handleAvailabilityComplete = (availability: TimeSlot[]) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, availability });\r\n showNextComponent(\"WORK-REQUIRED\");\r\n };\r\n\r\n const handleWorkRequiredComplete = (positionIdsWithWork: number[]) => {\r\n setBreakdownInProgress({\r\n ...breakdownInProgress,\r\n positionIdsWithWork,\r\n });\r\n showNextComponent(\"ADDITIONAL-INFORMATION\");\r\n };\r\n\r\n const handleAdditionalInformationComplete = (\r\n additionalInformation: string\r\n ) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, additionalInformation });\r\n const next = enableContacts ? \"CONTACTS\" : \"SUMMARY\";\r\n showNextComponent(next);\r\n };\r\n\r\n const handleContactsComplete = (contacts: string[]) => {\r\n setBreakdownInProgress({ ...breakdownInProgress, contacts });\r\n setReachedSummary(true);\r\n showNextComponent(\"SUMMARY\");\r\n };\r\n\r\n const handleSummaryComplete = (result: SubmissionResult) => {\r\n setSubmissionResult(result);\r\n setActiveComponent(\"CONFIRMATION\");\r\n };\r\n\r\n if (showCancelPrompt)\r\n return (\r\n setShowCancelPrompt(false)}\r\n canSave={canSaveForLater}\r\n reference={breakdownInProgress.reference}\r\n />\r\n );\r\n\r\n if (activeComponent === \"VEHICLE\")\r\n return (\r\n setCriticalError(true)}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"CUSTOMER\")\r\n return (\r\n showNextComponent(\"VEHICLE\")}\r\n onFail={() => setCriticalError(true)}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"PURCHASE-ORDER-DEFECT-NUMBER\")\r\n return (\r\n setCriticalError(true)}\r\n onBackClick={() => showNextComponent(\"VEHICLE\")}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"MILEAGE\")\r\n return (\r\n showNextComponent(\"PURCHASE-ORDER-DEFECT-NUMBER\")}\r\n onFail={() => setCriticalError(true)}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"CONTACT-CALLER\")\r\n return (\r\n showNextComponent(\"MILEAGE\")}\r\n onFail={() => setCriticalError(true)}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"LOCATION\")\r\n return (\r\n showNextComponent(\"LOCATION-TYPE\")}\r\n onFail={() => setCriticalError(true)}\r\n useAutomaticLocation={breakdownIsRoadside}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"LOCATION-TYPE\")\r\n return (\r\n showNextComponent(\"CONTACT-CALLER\")}\r\n onFail={() => setCriticalError(true)}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"AVAILABILITY\")\r\n return (\r\n setCriticalError(true)}\r\n reference={breakdownInProgress.reference}\r\n onComplete={handleAvailabilityComplete}\r\n onBackClick={() => showNextComponent(\"LOCATION\")}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"WORK-REQUIRED\")\r\n return (\r\n \r\n showNextComponent(breakdownIsRoadside ? \"LOCATION\" : \"AVAILABILITY\")\r\n }\r\n onCancel={handleCancel}\r\n onFail={() => setCriticalError(true)}\r\n />\r\n );\r\n\r\n if (activeComponent === \"ADDITIONAL-INFORMATION\")\r\n return (\r\n showNextComponent(\"WORK-REQUIRED\")}\r\n onCancel={handleCancel}\r\n onFail={() => setCriticalError(true)}\r\n />\r\n );\r\n\r\n if (activeComponent === \"CONTACTS\") {\r\n return (\r\n showNextComponent(\"ADDITIONAL-INFORMATION\")}\r\n onCancel={handleCancel}\r\n onFail={() => setCriticalError(true)}\r\n />\r\n );\r\n }\r\n\r\n if (activeComponent === \"SUMMARY\")\r\n return (\r\n setActiveComponent(\"CONTACT-CALLER\")}\r\n onEditDriverDetails={() => setActiveComponent(\"CONTACT-CALLER\")}\r\n onEditMileage={() => setActiveComponent(\"MILEAGE\")}\r\n onEditLocation={() => setActiveComponent(\"LOCATION\")}\r\n onEditCustomer={() => setActiveComponent(\"CUSTOMER\")}\r\n onEditVehicle={() => setActiveComponent(\"VEHICLE\")}\r\n onEditWorkRequired={() => setActiveComponent(\"WORK-REQUIRED\")}\r\n onEditAvailability={() => setActiveComponent(\"AVAILABILITY\")}\r\n onEditLocationType={() => setActiveComponent(\"LOCATION-TYPE\")}\r\n onEditPurchaseOrderDefectNumber={() =>\r\n setActiveComponent(\"PURCHASE-ORDER-DEFECT-NUMBER\")\r\n }\r\n onEditAdditionalInformation={() =>\r\n setActiveComponent(\"ADDITIONAL-INFORMATION\")\r\n }\r\n onEditContacts={() => setActiveComponent(\"CONTACTS\")}\r\n reference={breakdownInProgress.reference}\r\n onComplete={handleSummaryComplete}\r\n onFail={() => setCriticalError(true)}\r\n onCancel={handleCancel}\r\n />\r\n );\r\n\r\n if (activeComponent === \"CONFIRMATION\") {\r\n if (submissionResult === null) {\r\n throw new Error(\r\n \"attempted to display confirmation with no submission result\"\r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n throw new Error(`unhandled active component: ${activeComponent}`);\r\n};\r\n\r\nexport default Breakdown;\r\n","import styled from \"styled-components\";\r\nimport screens from \"../../utils/screens\";\r\nimport _Button from \"../button/Button\";\r\n\r\nexport const BreakdownsInProgress = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n padding: 5px;\r\n\r\n & > *:not(:last-child) {\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nexport const Heading = styled.div`\r\n font-weight: bold;\r\n margin: 5px;\r\n`;\r\n\r\nexport const Breakdown = styled.li`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n margin-bottom: 5px;\r\n padding: 5px;\r\n border: 1px solid black;\r\n border-radius: 5px;\r\n\r\n @media screen and ${screens.small} {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nexport const BreakdownContent = styled.div`\r\n & > * {\r\n margin-bottom: 5px;\r\n }\r\n\r\n @media screen and ${screens.small} {\r\n margin-right: 5px;\r\n flex-grow: 1;\r\n\r\n & > *:last-child {\r\n margin-bottom: 0px;\r\n }\r\n }\r\n`;\r\n\r\nexport const BreakdownButtons = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n\r\n & > *:not(:last-child) {\r\n margin-right: 5px;\r\n }\r\n\r\n @media screen and ${screens.small} {\r\n flex-direction: column;\r\n justify-content: center;\r\n\r\n & > *:not(:last-child) {\r\n margin-right: 0px;\r\n margin-bottom: 5px;\r\n }\r\n }\r\n`;\r\n\r\nexport const BreakdownRow = styled.div`\r\n display: flex;\r\n`;\r\n\r\nexport const BreakdownButton = styled(_Button)`\r\n width: 8rem;\r\n`;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport {\r\n Api,\r\n Response,\r\n mapSuccess,\r\n useApi,\r\n isSuccess,\r\n isNoContent,\r\n} from \"../../api/Api\";\r\nimport Spinner from \"../spinner/Spinner\";\r\nimport GeneralErrors from \"../general-errors/GeneralErrors\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport * as S from \"./styles\";\r\nimport { BreakdownInProgress } from \"360\";\r\n\r\nconst getBreakdownsInProgress = async (\r\n api: Api\r\n): Promise> => {\r\n const response = await api.get(`api/breakdowns/in-progress`, \"1.0\");\r\n\r\n return mapSuccess(response, (breakdowns) =>\r\n breakdowns.map((breakdown) => ({\r\n ...breakdown,\r\n created: new Date(breakdown.created),\r\n expires: new Date(breakdown.expires),\r\n }))\r\n );\r\n};\r\n\r\nconst cancelBreakdown = async (\r\n api: Api,\r\n reference: string\r\n): Promise> => api.delete(`api/breakdowns/${reference}`, \"1.0\");\r\n\r\ninterface BreakdownProps {\r\n breakdown: BreakdownInProgress;\r\n onContinue: (reference: string) => void;\r\n onCancel: (reference: string) => void;\r\n}\r\n\r\nconst Breakdown = (props: BreakdownProps) => {\r\n const { breakdown, onContinue, onCancel } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n

{t(\"Vehicle / unit number\")}

\r\n

{breakdown.vehicle}

\r\n

{t(\"Customer\")}

\r\n

{breakdown.customer}

\r\n

{t(\"Expires\")}

\r\n

{t(\"DisplayDate\", { date: breakdown.expires })}

\r\n
\r\n \r\n onContinue(breakdown.reference)}>\r\n {t(\"Continue\")}\r\n \r\n onCancel(breakdown.reference)}>\r\n {t(\"Cancel\")}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\ninterface BreakdownListProps {\r\n breakdowns: BreakdownInProgress[];\r\n onContinue: (reference: string) => void;\r\n onCancel: (reference: string) => void;\r\n}\r\n\r\nconst BreakdownList = (props: BreakdownListProps) => {\r\n const { breakdowns, onContinue, onCancel } = props;\r\n\r\n return (\r\n
    \r\n {breakdowns.map((breakdown) => (\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\ninterface Props {\r\n onContinue: (reference: string) => void;\r\n}\r\n\r\nconst BreakdownsInProgress = (props: Props) => {\r\n const { onContinue } = props;\r\n const [loading, setLoading] = useState(true);\r\n const [breakdowns, setBreakdowns] = useState([]);\r\n const [error, setError] = useState(null);\r\n const api = useApi();\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n const response = await getBreakdownsInProgress(api);\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) {\r\n return setBreakdowns(response.data);\r\n }\r\n } catch {}\r\n\r\n setError(\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\"\r\n )\r\n );\r\n })();\r\n }, [api, t]);\r\n\r\n const handleCancel = async (reference: string) => {\r\n try {\r\n setLoading(true);\r\n const response = await cancelBreakdown(api, reference);\r\n setLoading(false);\r\n\r\n if (isNoContent(response)) {\r\n return setBreakdowns(\r\n breakdowns.filter((breakdown) => breakdown.reference !== reference)\r\n );\r\n }\r\n } catch {}\r\n\r\n setError(\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\"\r\n )\r\n );\r\n };\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (error) {\r\n return setError(null)} />;\r\n }\r\n\r\n if (breakdowns.length === 0) {\r\n return
{t(\"You have no breakdowns in progress.\")}
;\r\n }\r\n\r\n return (\r\n \r\n {t(\"Breakdowns in progress\")}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default BreakdownsInProgress;\r\n","import styled from \"styled-components\";\r\n\r\nconst JobsContent = styled.div`\r\n max-width: 700px;\r\n height: 100%;\r\n width: 100%;\r\n padding-top: 10px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n`;\r\n\r\nconst Title = styled.h3`\r\n font-weight: bold;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst JobResults = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nexport default { JobsContent, Title, JobResults };\r\n","import styled from \"styled-components\";\r\n\r\nconst JobListing = styled.div`\r\n margin: 5px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-evenly;\r\n border-radius: 5px;\r\n border: 2px solid gray;\r\n padding: 5px;\r\n`;\r\n\r\nconst JobDetails = styled.div`\r\n width: 120px;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n @media screen and (min-width: 600px) {\r\n flex-direction: row;\r\n width: 255px;\r\n }\r\n`;\r\n\r\nconst IconContainer = styled.div`\r\n width: 30px;\r\n text-align: center;\r\n float: left;\r\n`;\r\n\r\nconst DetailsContainer = styled.div`\r\n margin-bottom: 3px;\r\n width: 120px;\r\n\r\n @media screen and (min-width: 600px) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nconst Icons = styled.div`\r\n width: 90px;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n`;\r\n\r\nconst ButtonContainer = styled.div`\r\n margin-left: 3px;\r\n`;\r\n\r\nexport default {\r\n JobListing,\r\n JobDetails,\r\n IconContainer,\r\n DetailsContainer,\r\n Icons,\r\n ButtonContainer\r\n};\r\n","import styled from \"styled-components\";\r\n\r\ntype LocationProps = { height: number; width: number };\r\n\r\nconst JobLocation = styled.div`\r\n background-color: lightgray;\r\n border-radius: 5px;\r\n padding: 5px;\r\n display: inline-block;\r\n text-align: center;\r\n vertical-align: center;\r\n\r\n width: ${props => props.width}px;\r\n height: ${props => props.height}px;\r\n\r\n & svg {\r\n padding-top: 5px;\r\n font-size: ${props => props.width - 10}px;\r\n }\r\n`;\r\n\r\nexport default { JobLocation };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n faRoad,\r\n faWarehouse,\r\n faWrench,\r\n faQuestion\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { JobLocationType as LocationType } from \"360\";\r\n\r\ntype Props = {\r\n locationType: LocationType | null;\r\n height: number;\r\n width: number;\r\n};\r\n\r\nconst JobLocationType = (props: Props) => {\r\n const { height, width, locationType } = props;\r\n\r\n let icon = faQuestion;\r\n\r\n switch (locationType) {\r\n case \"Roadside\":\r\n icon = faRoad;\r\n break;\r\n case \"At site/yard\":\r\n icon = faWarehouse;\r\n break;\r\n case \"Servicing dealer\":\r\n icon = faWrench;\r\n break;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default JobLocationType;\r\n","import styled from \"styled-components\";\r\n\r\ntype LocationProps = { height: number; width: number };\r\n\r\nconst JobStatusIcon = styled.div`\r\n background-color: lightgray;\r\n border-radius: 5px;\r\n padding: 5px;\r\n display: inline-block;\r\n text-align: center;\r\n vertical-align: center;\r\n margin-bottom: 3px;\r\n\r\n @media screen and (min-width: 600px) {\r\n margin-bottom: 0px;\r\n margin-right: 3px;\r\n }\r\n\r\n width: ${props => props.width}px;\r\n height: ${props => props.height}px;\r\n\r\n & svg {\r\n padding-top: 5px;\r\n font-size: ${props => props.width - 10}px;\r\n }\r\n`;\r\n\r\nexport default { JobStatusIcon };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n faQuestion,\r\n faHandHoldingBox,\r\n faFlagCheckered,\r\n faLocationArrow,\r\n faThumbsUp\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\n\r\ntype Props = {\r\n jobStatus: string;\r\n};\r\n\r\nconst GetStatusIcon = (status: string) => {\r\n switch (status) {\r\n case \"Allocated\":\r\n return faHandHoldingBox;\r\n case \"EnRoute\":\r\n return faLocationArrow;\r\n case \"OnScene\":\r\n return faFlagCheckered;\r\n case \"Completed\":\r\n return faThumbsUp;\r\n default:\r\n return faQuestion;\r\n }\r\n};\r\n\r\nconst JobStatusIcon = (props: Props) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default JobStatusIcon;\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobLocationType from \"../../job-location-type/job-location-type-icon/JobLocationTypeIcon\";\r\nimport Button from \"../../button/Button\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faTruck, faClipboardList } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { JobLocationType as LocationType, JobStatus } from \"360\";\r\nimport JobStatusIcon from \"../../job-status/JobStatusIcon\";\r\n\r\ntype Props = {\r\n id: number;\r\n registration: string;\r\n locationType: LocationType | null;\r\n jobStatus: JobStatus | null;\r\n onViewJob: (id: number) => void;\r\n};\r\n\r\nconst JobResult = (props: Props) => {\r\n const { id, registration, locationType, onViewJob, jobStatus } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {registration}\r\n \r\n \r\n \r\n \r\n \r\n {id}\r\n \r\n \r\n\r\n \r\n {jobStatus !== 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\nexport default JobResult;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../button/Button\";\r\n\r\nconst JobDetails = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n text-align: center;\r\n max-width: 700px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n`;\r\n\r\nconst Title = styled.h3`\r\n font-weight: bold;\r\n margin-top: 5px;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst HeaderDetails = styled.span``;\r\n\r\nconst IconContainer = styled.span`\r\n width: 10px;\r\n`;\r\n\r\nconst Spacer = styled.hr`\r\n border: 1px solid #b0afb1;\r\n margin-top: 5px;\r\n margin-bottom: 5px;\r\n margin-right: 10px;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst Map = styled.div`\r\n width: 100%;\r\n height: 300px;\r\n background-color: gray;\r\n`;\r\n\r\nconst SectionTitle = styled.div`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DateDetail = styled.div`\r\n margin-bottom: 3px;\r\n text-align: left;\r\n\r\n & div {\r\n text-align: right;\r\n width: 100%;\r\n }\r\n padding: 10px;\r\n`;\r\n\r\nconst HeaderContainer = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst DetailColumn = styled.div`\r\n min-width: 50%;\r\n`;\r\n\r\nconst DetailItem = styled.div`\r\n text-align: left;\r\n padding-left: 5px;\r\n margin-bottom: 3px;\r\n\r\n & svg {\r\n width: 30px !important;\r\n }\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n justify-content: space-between;\r\n`;\r\n\r\nconst Detail = styled.span``;\r\n\r\nconst DetailContent = styled.span``;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n margin: 5px 0px;\r\n`;\r\n\r\nconst NoItems = styled.div`\r\n width: 100%;\r\n text-align: center;\r\n font-style: italic;\r\n`;\r\n\r\nexport default {\r\n JobDetails,\r\n Title,\r\n HeaderDetails,\r\n Spacer,\r\n IconContainer,\r\n Map,\r\n SectionTitle,\r\n DateDetail,\r\n HeaderContainer,\r\n DetailColumn,\r\n DetailItem,\r\n Detail,\r\n DetailContainer,\r\n DetailContent,\r\n Button,\r\n NoItems,\r\n};\r\n","import styled from \"styled-components\";\r\n\r\nconst TyreDetails = styled.div`\r\n width: 100%;\r\n\r\n & svg {\r\n margin-right: 5px;\r\n }\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n margin-bottom: 3px;\r\n margin-top: 3px;\r\n`;\r\n\r\nconst DetailBlock = styled.span`\r\n text-align: right;\r\n`;\r\n\r\nexport default {\r\n TyreDetails,\r\n DetailContainer,\r\n Detail,\r\n DetailContent,\r\n Title,\r\n DetailBlock\r\n};\r\n","import React from \"react\";\r\nimport Tyre from \"../WorkRequested\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobSubCategory from \"../job-sub-category/JobSubCategory\";\r\n\r\ntype Props = {\r\n tyre: Tyre;\r\n jobDetailsEditClicked?: () => void;\r\n};\r\n\r\nconst TyreDetails = (props: Props) => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\"Position\")}\r\n {props.tyre.position}\r\n \r\n \r\n {t(\"Size\")}\r\n {props.tyre.size}\r\n \r\n {props.tyre.removalReason != null && (\r\n \r\n {t(\"Removal reason\")}\r\n {t(props.tyre.removalReason)}\r\n \r\n )}\r\n {props.tyre.make != null && (\r\n \r\n {t(\"Make\")}\r\n {props.tyre.make}\r\n \r\n )}\r\n {props.tyre.pattern != null && (\r\n \r\n {t(\"Pattern\")}\r\n {props.tyre.pattern}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TyreDetails;\r\n","import styled from \"styled-components\";\r\n\r\nconst JobHistory = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n margin-bottom: 3px;\r\n margin-top: 3px;\r\n`;\r\n\r\nconst DetailBlock = styled.span`\r\n text-align: right;\r\n`;\r\n\r\nexport default {\r\n JobHistory,\r\n DetailContainer,\r\n Detail,\r\n DetailContent,\r\n Title,\r\n DetailBlock\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobCategory from \"../job-category/JobCategory\";\r\nimport { faClock } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobSubCategory from \"../job-sub-category/JobSubCategory\";\r\n\r\ntype Props = {\r\n allocated: Date | null;\r\n serviceProvider: string | null;\r\n depot: string | null;\r\n eta: Date | null;\r\n onScene: Date | null;\r\n enRoute: Date | null;\r\n completed: Date | null;\r\n};\r\n\r\nconst JobHistory = (props: Props) => {\r\n const {\r\n serviceProvider,\r\n depot,\r\n allocated,\r\n eta,\r\n enRoute,\r\n onScene,\r\n completed,\r\n } = props;\r\n\r\n const { t } = useTranslation();\r\n\r\n const displayDate = (date: Date | null) => {\r\n if (date !== null) return t(\"DisplayDate\", { date: date });\r\n\r\n return \"N/A\";\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\"Time Allocated\")}\r\n {displayDate(allocated)}\r\n \r\n \r\n {t(\"Attending SP\")}\r\n {serviceProvider}\r\n \r\n \r\n {t(\"Attending depot\")}\r\n {depot}\r\n \r\n \r\n {t(\"ETA\")}\r\n {displayDate(eta)}\r\n \r\n \r\n {t(\"En Route\")}\r\n {displayDate(enRoute)}\r\n \r\n \r\n {t(\"On Scene Time\")}\r\n {displayDate(onScene)}\r\n \r\n \r\n {t(\"Completed\")}\r\n {displayDate(completed)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default JobHistory;\r\n","import styled from \"styled-components\";\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nexport default {\r\n DetailContainer,\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobCategory from \"../job-category/JobCategory\";\r\nimport { faInfo } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobSubCategory from \"../job-sub-category/JobSubCategory\";\r\n\r\ntype Props = {\r\n additionalInformation: string | null;\r\n};\r\n\r\nconst AdditionalInformation = (props: Props) => {\r\n const { additionalInformation } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {additionalInformation}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default AdditionalInformation;\r\n","import styled from \"styled-components\";\r\n\r\nconst HusbandryDetails = styled.div`\r\n width: 100%;\r\n\r\n & svg {\r\n margin-right: 5px;\r\n }\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n margin-bottom: 3px;\r\n margin-top: 3px;\r\n`;\r\n\r\nconst DetailBlock = styled.span`\r\n text-align: right;\r\n`;\r\n\r\nexport default {\r\n HusbandryDetails,\r\n DetailContainer,\r\n Detail,\r\n DetailContent,\r\n Title,\r\n DetailBlock\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobSubCategory from \"../job-sub-category/JobSubCategory\";\r\nimport Husbandry from \"../Husbandry\";\r\n\r\ntype Props = {\r\n husbandry: Husbandry;\r\n jobDetailsEditClicked?: () => void;\r\n};\r\n\r\nconst HusbandryDetails = (props: Props) => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\"Position\")}\r\n {props.husbandry.position}\r\n \r\n \r\n {t(\"Size\")}\r\n {props.husbandry.size}\r\n \r\n {props.husbandry.description != null && (\r\n \r\n {t(\"Description\")}\r\n {t(props.husbandry.description)}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default HusbandryDetails;\r\n","import styled from \"styled-components\";\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 10px;\r\n`;\r\n\r\nexport default {\r\n DetailContainer,\r\n Detail,\r\n DetailContent,\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobCategory from \"../job-category/JobCategory\";\r\nimport { faWrench } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobSubCategory from \"../job-sub-category/JobSubCategory\";\r\n\r\ntype Props = {\r\n wheelsRemoved: boolean | null;\r\n torqueSetting: string | null;\r\n wrenchNumber: string | null;\r\n retorqued: boolean | null;\r\n reasonNotRetorqued: string | null;\r\n tagNumber: string | null;\r\n};\r\n\r\nfunction notNullOrEmpty(s: string | null) {\r\n return s !== null && s.length > 0;\r\n}\r\n\r\nconst ContactInformation = (props: Props) => {\r\n const {\r\n wheelsRemoved,\r\n torqueSetting,\r\n wrenchNumber,\r\n retorqued,\r\n reasonNotRetorqued,\r\n tagNumber,\r\n } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {wheelsRemoved !== null && (\r\n \r\n {t(\"Wheel(s) Removed?\")}\r\n {t(wheelsRemoved ? \"Yes\" : \"No\")}\r\n \r\n )}\r\n {notNullOrEmpty(torqueSetting) && (\r\n \r\n {t(\"Torque Setting\")}\r\n {torqueSetting}\r\n \r\n )}\r\n {notNullOrEmpty(wrenchNumber) && (\r\n \r\n {t(\"Wrench Number\")}\r\n {wrenchNumber}\r\n \r\n )}\r\n {retorqued !== null && (\r\n \r\n {t(\"Retorque Carried Out?\")}\r\n {t(retorqued ? \"Yes\" : \"No\")}\r\n \r\n )}\r\n {notNullOrEmpty(reasonNotRetorqued) && (\r\n \r\n {t(\"Info Left With Customer\")}\r\n {reasonNotRetorqued}\r\n \r\n )}\r\n {notNullOrEmpty(tagNumber) && (\r\n \r\n {t(\"Tag Number\")}\r\n {tagNumber}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ContactInformation;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport S from \"./styles\";\r\nimport TyreDetails from \"./tyre-details/TyreDetails\";\r\nimport Job from \"./Job\";\r\nimport ContactInformation from \"./contact-information/ContactInformation\";\r\nimport JobHistory from \"./job-history/JobHistory\";\r\nimport LocationDetails from \"./location-details/LocationDetails\";\r\nimport AdditionalInformation from \"./additional-information/AdditionalInformation\";\r\nimport JobOverview from \"./job-overview/JobOverview\";\r\nimport JobCategory from \"./job-category/JobCategory\";\r\nimport { faTire, faImage } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Availability from \"./availability/Availability\";\r\nimport { useApi, isSuccess, mapSuccess } from \"../../api/Api\";\r\nimport Spinner from \"../spinner/Spinner\";\r\nimport GeneralErrors from \"../general-errors/GeneralErrors\";\r\nimport ImageGallery from \"../image-gallery/ImageGallery\";\r\nimport HusbandryDetails from \"./husbandry-details/HusbandryDetails\";\r\nimport WheelSecurity from \"./wheel-security/WheelSecurity\";\r\n\r\ntype Props = {\r\n jobId: number;\r\n onBackClick: () => void;\r\n};\r\n\r\nconst JobDetails = (props: Props) => {\r\n const { onBackClick, jobId } = props;\r\n const [job, setJob] = useState(null);\r\n const [key, setKey] = useState(null);\r\n const { t } = useTranslation();\r\n const [loading, setLoading] = useState(true);\r\n const [errors, setErrors] = useState([]);\r\n const api = useApi();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const response = mapSuccess(\r\n await api.get(`api/jobs/${jobId}`, \"1.0\"),\r\n (r) => ({\r\n key: r.key,\r\n job: {\r\n ...r.job,\r\n jobDate: new Date(r.job.jobDate),\r\n timeAllocated:\r\n r.job.timeAllocated === null\r\n ? null\r\n : new Date(r.job.timeAllocated),\r\n estimatedTimeOfArrival:\r\n r.job.estimatedTimeOfArrival === null\r\n ? null\r\n : new Date(r.job.estimatedTimeOfArrival),\r\n onSceneTime:\r\n r.job.onSceneTime === null ? null : new Date(r.job.onSceneTime),\r\n enRoute: r.job.enRoute === null ? null : new Date(r.job.enRoute),\r\n completed:\r\n r.job.completed === null ? null : new Date(r.job.completed),\r\n availability: r.job.availability.map((a: any) => ({\r\n from: new Date(a.from),\r\n to: new Date(a.to),\r\n })),\r\n },\r\n }),\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) {\r\n setJob(response.data.job);\r\n setKey(response.data.key);\r\n return;\r\n }\r\n } catch {}\r\n\r\n setErrors([\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\",\r\n ),\r\n ]);\r\n })();\r\n }, [jobId, t, api]);\r\n\r\n const handleSummaryPdfClick = async () => {\r\n try {\r\n setLoading(true);\r\n const response = await api.getBlob(\r\n `api/jobs/${jobId}/summary-pdf`,\r\n \"1.0\",\r\n );\r\n setLoading(false);\r\n if (isSuccess(response)) {\r\n const filename = `job-summary-${jobId}.pdf`;\r\n const file = new File([response.data], filename, {\r\n type: \"application/pdf\",\r\n });\r\n const url = URL.createObjectURL(file);\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n link.download = filename;\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n return;\r\n }\r\n } catch {}\r\n setErrors([\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\",\r\n ),\r\n ]);\r\n };\r\n\r\n if (job === null) return ;\r\n\r\n const images = job.photos.map((item) => ({\r\n src: `api/jobs/${job.id}/photos/${item.id}?v=1&key=${key}`,\r\n position: item.position,\r\n }));\r\n\r\n if (loading) return ;\r\n if (errors.length > 0)\r\n return setErrors([])} />;\r\n\r\n return (\r\n \r\n {t(\"Job Details\")}\r\n \r\n \r\n {job.tyres !== undefined ? (\r\n \r\n {job.tyres.map((item) => (\r\n \r\n ))}\r\n \r\n ) : (\r\n {t(\"No Tyres Requested\")}\r\n )}\r\n {job.husbandries !== undefined ? (\r\n \r\n {job.husbandries.map((item) => (\r\n \r\n ))}\r\n \r\n ) : (\r\n {t(\"No Husbandries\")}\r\n )}\r\n {job.countryId !== 2 && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {job.statusId === 4 && (\r\n \r\n {t(\"Get summary PDF\")}\r\n \r\n )}\r\n {t(\"Back\")}\r\n \r\n );\r\n};\r\n\r\nexport default JobDetails;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport S from \"./styles\";\r\nimport JobResult from \"./job-result/JobResult\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApi, isSuccess } from \"../../api/Api\";\r\nimport GeneralErrors from \"../general-errors/GeneralErrors\";\r\nimport Spinner from \"../spinner/Spinner\";\r\nimport { JobDetails as JD } from \"360\";\r\nimport JobDetails from \"../job-details/JobDetails\";\r\n\r\nconst Results = (props: { jobs: JD[]; onViewJob: (id: number) => void }) => (\r\n \r\n {props.jobs.map((job) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nconst NoRecentJobs = () => {\r\n const { t } = useTranslation();\r\n\r\n return
{t(\"You have no recent jobs.\")}
;\r\n};\r\n\r\nconst RecentJobs = () => {\r\n const [loading, setLoading] = useState(true);\r\n const [jobs, setJobs] = useState([]);\r\n const [errors, setErrors] = useState([]);\r\n const [viewingJobId, setViewingJobId] = useState(null);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n const response = await api.get(`api/jobs`, \"1.0\");\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) return setJobs(response.data);\r\n } catch {}\r\n\r\n setErrors([\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\"\r\n ),\r\n ]);\r\n })();\r\n }, [t, api]);\r\n\r\n if (loading) return ;\r\n\r\n if (errors.length > 0)\r\n return setErrors([])} />;\r\n\r\n if (viewingJobId)\r\n return (\r\n setViewingJobId(null)}\r\n />\r\n );\r\n\r\n return (\r\n \r\n {t(\"Recent jobs\")}\r\n {jobs.length > 0 && }\r\n {jobs.length === 0 && }\r\n \r\n );\r\n};\r\n\r\nexport default RecentJobs;\r\n","import styled from \"styled-components\";\r\n\r\nconst SearchContent = styled.div`\r\n height: 100%;\r\n padding-top: 10px;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n`;\r\n\r\nconst Title = styled.h3`\r\n font-weight: bold;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst FieldContainer = styled.div`\r\n display: flex;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst SearchFields = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n max-width: 16rem;\r\n\r\n @media screen and (min-width: 600px) {\r\n max-width: none;\r\n flex-direction: row;\r\n\r\n div {\r\n margin-right: 5px;\r\n }\r\n }\r\n\r\n & input {\r\n width: 16rem;\r\n }\r\n`;\r\n\r\nconst Search = styled.div`\r\n align-items: center;\r\n width: 100%;\r\n text-align: center;\r\n margin-top: 5px;\r\n cursor: pointer;\r\n\r\n & button {\r\n width: 100%;\r\n\r\n @media screen and (min-width: 600px) {\r\n margin-top: 13px;\r\n }\r\n }\r\n`;\r\n\r\nconst SearchResults = styled.ul`\r\n & > li {\r\n margin: 5px;\r\n }\r\n`;\r\n\r\nconst SearchLabel = styled.div`\r\n margin-bottom: 3px;\r\n margin-top: 2px;\r\n`;\r\n\r\nexport default {\r\n SearchContent,\r\n SearchResults,\r\n FieldContainer,\r\n Search,\r\n SearchFields,\r\n Title,\r\n SearchLabel\r\n};\r\n","import styled from \"styled-components\";\r\n\r\nconst IconContainer = styled.div`\r\n width: 30px !important;\r\n text-align: center;\r\n`;\r\n\r\nconst JobListing = styled.li`\r\n border-radius: 5px;\r\n border: 1px solid black;\r\n padding: 5px;\r\n display: flex;\r\n align-items: center;\r\n\r\n & > button,\r\n & > :nth-child(2) {\r\n margin-left: 5px;\r\n }\r\n\r\n @media screen and (min-width: 600px) {\r\n min-width: 500px;\r\n }\r\n`;\r\n\r\nconst JobDetails = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n\r\n @media screen and (min-width: 600px) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst JobDate = styled.div``;\r\n\r\nconst JobFlagContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n @media screen and (min-width: 600px) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nexport default {\r\n JobListing,\r\n JobDetails,\r\n IconContainer,\r\n DetailContainer,\r\n JobDate,\r\n JobFlagContainer\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobLocationType from \"../../job-location-type/job-location-type-icon/JobLocationTypeIcon\";\r\nimport Button from \"../../button/Button\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n faTruck,\r\n faClipboardList,\r\n faCalendarAlt\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { JobLocationType as LocationType, JobStatus } from \"360\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobStatusIcon from \"../../job-status/JobStatusIcon\";\r\n\r\ntype Props = {\r\n registration: string;\r\n id: number;\r\n locationType: LocationType | null;\r\n jobStatus: JobStatus | null;\r\n date: Date;\r\n onViewJob: (id: number) => void;\r\n};\r\n\r\nconst JobResult = (props: Props) => {\r\n const { registration, id, locationType, date, onViewJob } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {registration}\r\n \r\n \r\n \r\n \r\n \r\n {id}\r\n \r\n \r\n \r\n \r\n \r\n {t(\"DisplayDate\", { date: date })}\r\n \r\n \r\n\r\n \r\n {props.jobStatus !== null && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default JobResult;\r\n","import React, { useState } from \"react\";\r\nimport S from \"./styles\";\r\nimport Input from \"../input/Input\";\r\nimport VR from \"../../utils/ValidationResult\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobResult from \"./job-result/JobResult\";\r\nimport Button from \"../button/Button\";\r\nimport Spinner from \"../spinner/Spinner\";\r\nimport GeneralErrors from \"../general-errors/GeneralErrors\";\r\nimport { useApi, mapSuccess, Response, isSuccess } from \"../../api/Api\";\r\nimport { JobDetails as JD, JobLocationType, JobStatus } from \"360\";\r\nimport JobDetails from \"../job-details/JobDetails\";\r\n\r\ntype SR = {\r\n id: number;\r\n registration: string;\r\n locationType: JobLocationType | null;\r\n jobStatus: JobStatus | null;\r\n date: string;\r\n};\r\n\r\nconst SearchJobs = () => {\r\n const [vr, setVr] = useState(VR.empty);\r\n const { t } = useTranslation();\r\n const [registration, setRegistration] = useState(\"\");\r\n const [jobId, setJobId] = useState(null);\r\n const [jobs, setJobs] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n const [errors, setErrors] = useState([]);\r\n const [viewingJobId, setViewingJobId] = useState(null);\r\n const api = useApi();\r\n\r\n const validate = (): VR => {\r\n const result = VR.empty;\r\n\r\n if (registration && registration.length < 3)\r\n result.add(\r\n \"registration\",\r\n t(\"Minimum length is {{len}} characters.\", { len: 3 })\r\n );\r\n\r\n if (registration && registration.length > 20)\r\n result.add(\r\n \"registration\",\r\n t(\"Maximum length is {{len}} characters.\", { len: 20 })\r\n );\r\n\r\n if (!registration && !jobId) {\r\n result.add(\"registration\", t(\"You must complete one field.\"));\r\n result.add(\"jobId\", t(\"You must complete one field.\"));\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const searchById = async (id: number): Promise> => {\r\n var response: Response = await api.get(\"api/jobs/search\", \"1.0\", {\r\n jobId: id,\r\n });\r\n\r\n return mapSuccess(response, (x) =>\r\n x.map((f) => ({\r\n id: f.id,\r\n registration: f.registration,\r\n locationType: f.locationType,\r\n jobStatus: f.jobStatus,\r\n date: new Date(f.date),\r\n }))\r\n );\r\n };\r\n\r\n const searchByRegistration = async (\r\n registration: string\r\n ): Promise> => {\r\n var response: Response = await api.get(\"api/jobs/search\", \"1.0\", {\r\n registration,\r\n });\r\n\r\n return mapSuccess(response, (x) =>\r\n x.map((f) => ({\r\n id: f.id,\r\n registration: f.registration,\r\n locationType: f.locationType,\r\n jobStatus: f.jobStatus,\r\n date: new Date(f.date),\r\n }))\r\n );\r\n };\r\n\r\n const handleSearchClick = async () => {\r\n const vr = validate();\r\n setVr(vr);\r\n\r\n if (!vr.ok) return;\r\n\r\n setLoading(true);\r\n try {\r\n const response = await (jobId !== null\r\n ? searchById(jobId)\r\n : searchByRegistration(registration));\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) return setJobs(response.data);\r\n } catch {}\r\n\r\n setErrors([\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\"\r\n ),\r\n ]);\r\n };\r\n\r\n const handleRegistrationChange = (e: React.ChangeEvent) => {\r\n setRegistration(e.target.value);\r\n setJobId(null);\r\n };\r\n\r\n const handleJobIdChange = (e: React.ChangeEvent) => {\r\n if (e.target.value === \"\") return setJobId(null);\r\n\r\n const parsed = parseInt(e.target.value);\r\n\r\n if (!isNaN(parsed)) {\r\n setJobId(parsed);\r\n setRegistration(\"\");\r\n }\r\n };\r\n\r\n if (loading) return ;\r\n if (errors.length > 0)\r\n return setErrors([])} />;\r\n\r\n if (viewingJobId)\r\n return (\r\n setViewingJobId(null)}\r\n />\r\n );\r\n\r\n return (\r\n \r\n {t(\"Job Search\")}\r\n \r\n \r\n
\r\n {t(\"Vehicle / unit number\")}\r\n \r\n
\r\n
\r\n {t(\"TSU Case Number\")}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {jobs !== null && (\r\n
{t(\"{{length}} jobs found.\", { length: jobs.length })}
\r\n )}\r\n {jobs !== null && (\r\n \r\n {jobs.map((job) => (\r\n \r\n ))}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default SearchJobs;\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../../../utils/colours\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nconst NotificationIcon = styled.div`\r\n position: relative;\r\n padding: 2px;\r\n`;\r\n\r\nconst Count = styled.div`\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n background-color: ${colours.lightRed};\r\n color: ${colours.white};\r\n border-radius: 50%;\r\n padding: 0.25em;\r\n font-size: 66%;\r\n height: 14px;\r\n width: 14px;\r\n line-height: 14px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconWrapper = styled.span`\r\n cursor: pointer;\r\n`;\r\n\r\nconst Icon = styled(FontAwesomeIcon)`\r\n font-size: 30px;\r\n`;\r\n\r\nexport default { NotificationIcon, Count, Icon, IconWrapper };\r\n","import React, { useState } from \"react\";\r\nimport { faBell } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport S from \"./styles\";\r\nimport { useApi, isSuccess } from \"../../../../api/Api\";\r\nimport useInterval from \"../../../../utils/Interval\";\r\n\r\ntype Props = {\r\n lastViewedNotificationId: number | null;\r\n onClick: () => void;\r\n};\r\n\r\nconst NotificationIcon = (props: Props) => {\r\n const { lastViewedNotificationId, onClick } = props;\r\n const [notificationCount, setNotificationCount] = useState(0);\r\n const api = useApi();\r\n\r\n const handleIconClick = () => {\r\n setNotificationCount(0);\r\n onClick();\r\n };\r\n\r\n useInterval(\r\n async () => {\r\n try {\r\n const response = await api.get(\r\n \"api/notifications/count\",\r\n \"1.0\",\r\n { lastViewedNotificationId }\r\n );\r\n\r\n if (isSuccess(response)) setNotificationCount(response.data);\r\n } catch {\r\n // if we can't retrieve the notification count, just clear it out for the moment\r\n setNotificationCount(0);\r\n }\r\n },\r\n 1e3 * 60,\r\n true\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {notificationCount > 0 && {notificationCount}}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default NotificationIcon;\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport Icon from \"../icon/Icon\";\r\nimport NotificationIcon from \"./notification-icon/NotificationIcon\";\r\nimport { faPhone, faHome, faSignOut } from \"@fortawesome/pro-solid-svg-icons\";\r\n\r\ntype Props = {\r\n onPhoneClick: () => void;\r\n onHomeClick: () => void;\r\n onNotificationClick: () => void;\r\n onLogoutClick: () => void;\r\n lastViewedNotificationId: number | null;\r\n userTypeId: number;\r\n};\r\n\r\nconst LoggedInSubMenu = (props: Props) => {\r\n const {\r\n onPhoneClick,\r\n onHomeClick,\r\n onNotificationClick,\r\n onLogoutClick,\r\n lastViewedNotificationId\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {props.userTypeId !== 2 && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoggedInSubMenu;\r\n","import React from \"react\";\r\nimport MainMenu from \"./main-menu/MainMenu\";\r\nimport LoggedInSubMenu from \"./sub-menu/LoggedInSubMenu\";\r\nimport S from \"./styles\";\r\n\r\ntype Props = {\r\n onPhoneClick: () => void;\r\n onHomeClick: () => void;\r\n onNotificationClick: () => void;\r\n onLogoutClick: () => void;\r\n lastViewedNotificationId: number | null;\r\n userTypeId: number;\r\n};\r\n\r\nconst Menu = (props: Props) => {\r\n const {\r\n onPhoneClick,\r\n onHomeClick,\r\n onNotificationClick,\r\n onLogoutClick,\r\n lastViewedNotificationId,\r\n userTypeId\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Menu;\r\n","import styled from \"styled-components\";\r\nimport colours from \"../../../utils/colours\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport _Button from \"../../button/Button\";\r\n\r\nconst Documents = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Document = styled.div`\r\n width: 16rem;\r\n padding: 5px 0px;\r\n flex-grow: 1;\r\n border-bottom: 1px solid ${colours.grey3};\r\n\r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n`;\r\n\r\nconst Header = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nconst FileDetails = styled.div`\r\n flex-grow: 1;\r\n\r\n & > * {\r\n padding: 2px 0px;\r\n }\r\n`;\r\n\r\nconst FileDate = styled.p`\r\n font-size: 0.75;\r\n padding: 2px 0px;\r\n`;\r\n\r\nconst Icon = styled(FontAwesomeIcon)`\r\n font-size: 36px;\r\n color: ${colours.grey2};\r\n margin-left: 2px;\r\n\r\n &:hover {\r\n color: ${colours.grey1};\r\n }\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst NoDocumentsFound = styled.div`\r\n text-align: center;\r\n font-style: italic;\r\n width: 100%;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nexport default {\r\n Documents,\r\n Document,\r\n Header,\r\n FileDetails,\r\n FileDate,\r\n Icon,\r\n Button,\r\n NoDocumentsFound\r\n};\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport * as M from \"360\";\r\nimport { faFileDownload } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport S from \"./styles\";\r\n\r\ntype DocumentWithUrl = M.Document & { url: string };\r\n\r\nconst Documents = ({ documents }: { documents: DocumentWithUrl[] }) => {\r\n return (\r\n \r\n {documents\r\n .sort((a, b) => a.filename.localeCompare(b.filename))\r\n .map(document => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nconst Document = (document: DocumentWithUrl) => {\r\n const { id, filename, documentType, effective, expiry, url } = document;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n

{filename}

\r\n

{documentType}

\r\n
\r\n \r\n \r\n \r\n
\r\n {effective && (\r\n {t(\"DOCUMENT_EFFECTIVE\", { effective })}\r\n )}\r\n {expiry && {t(\"DOCUMENT_EXPIRY\", { expiry })}}\r\n
\r\n );\r\n};\r\n\r\nexport default Documents;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport * as M from \"360\";\r\nimport { useApi, mapSuccess, isSuccess } from \"../../../api/Api\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport GeneralErrors from \"../../general-errors/GeneralErrors\";\r\nimport Documents from \"./Documents\";\r\nimport S from \"./styles\";\r\n\r\ntype DocumentsResponse = {\r\n key: string;\r\n documents: M.Document[];\r\n};\r\n\r\nconst getSupplierDocumentUrl = (id: string, key: string) =>\r\n `api/documents/supplier/${id}?v=1&key=${key}`;\r\n\r\nconst SupplierDocuments = ({ onBackClick }: { onBackClick: () => void }) => {\r\n const [documents, setDocuments] = useState(null);\r\n const [errors, setErrors] = useState([]);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n const response = await api.get(\"api/documents/supplier\", \"1.0\");\r\n const mapped = mapSuccess(\r\n response,\r\n (data): DocumentsResponse => ({\r\n ...data,\r\n documents: data.documents.map((document: any) => ({\r\n ...document,\r\n effective:\r\n document.effective !== null\r\n ? new Date(document.effective)\r\n : null,\r\n expiry:\r\n document.expiry !== null ? new Date(document.expiry) : null,\r\n })),\r\n })\r\n );\r\n\r\n if (isSuccess(mapped)) {\r\n setDocuments(mapped.data);\r\n return;\r\n }\r\n } catch {}\r\n\r\n setErrors([\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\"\r\n ),\r\n ]);\r\n })();\r\n }, [t, api]);\r\n\r\n if (errors.length > 0)\r\n return ;\r\n\r\n if (documents === null) return ;\r\n\r\n const documentsWithUrls = documents.documents.map((d) => ({\r\n ...d,\r\n url: getSupplierDocumentUrl(d.id, documents.key),\r\n }));\r\n\r\n return (\r\n
\r\n \r\n {t(\"Back\")}\r\n
\r\n );\r\n};\r\n\r\nexport default SupplierDocuments;\r\n","import styled from \"styled-components\";\r\nimport _Select from \"../../select/Select\";\r\nimport _Button from \"../../button/Button\";\r\n\r\nconst AllocatedJob = styled.div`\r\n width: 100%;\r\n height: 100%;\r\n max-width: 700px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n text-align: center;\r\n padding-top: 5px;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst Select = styled(_Select)`\r\n min-width: 16rem;\r\n margin-top: 5px;\r\n`;\r\n\r\nconst Filters = styled.div`\r\n text-align: center;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst UserJobsCheckBox = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n margin-top: 5px;\r\n\r\n & span {\r\n margin-left: 3px;\r\n }\r\n}\r\n`;\r\n\r\nexport default {\r\n AllocatedJob,\r\n Button,\r\n Title,\r\n Select,\r\n Filters,\r\n UserJobsCheckBox\r\n};\r\n","import styled from \"styled-components\";\r\nimport colors from \"../../../../utils/colours\";\r\n\r\ntype Props = {\r\n loneWorkerStatus: boolean;\r\n};\r\n\r\nconst IconContainer = styled.div`\r\n width: 30px !important;\r\n text-align: center;\r\n`;\r\n\r\nconst JobListing = styled.li`\r\n background-color: ${props =>\r\n props.loneWorkerStatus ? colors.darkRed : colors.white};\r\n\r\n border-radius: 5px;\r\n border: 1px solid black;\r\n padding: 5px;\r\n display: flex;\r\n align-items: center;\r\n\r\n margin: auto;\r\n margin-bottom: 3px;\r\n width: 95%;\r\n\r\n & > button,\r\n & > :nth-child(2) {\r\n margin-left: 5px;\r\n }\r\n\r\n @media screen and (min-width: 600px) {\r\n min-width: 500px;\r\n }\r\n`;\r\n\r\nconst JobDetails = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n flex-wrap: wrap;\r\n\r\n @media screen and (min-width: 600px) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n display: flex;\r\n min-width: 175px;\r\n padding-bottom: 2px;\r\n`;\r\n\r\nconst JobDetailsContainer = styled.div`\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n\r\nconst JobDate = styled.div``;\r\n\r\ntype LocationProps = { height: number; width: number };\r\n\r\nconst JobStatusIcon = styled.div`\r\n background-color: lightgray;\r\n border-radius: 5px;\r\n padding: 5px;\r\n display: inline-block;\r\n text-align: center;\r\n vertical-align: center;\r\n margin-bottom: 3px;\r\n\r\n @media screen and (min-width: 600px) {\r\n margin-bottom: 0px;\r\n margin-right: 3px;\r\n }\r\n\r\n width: ${props => props.width}px;\r\n height: ${props => props.height}px;\r\n\r\n & svg {\r\n padding-top: 5px;\r\n font-size: ${props => props.width - 10}px;\r\n }\r\n`;\r\n\r\nconst JobFlagContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n @media screen and (min-width: 600px) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nexport default {\r\n JobListing,\r\n JobDetails,\r\n IconContainer,\r\n DetailContainer,\r\n JobDate,\r\n JobDetailsContainer,\r\n JobStatusIcon,\r\n JobFlagContainer\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n faClipboardList,\r\n faTruck,\r\n faUser,\r\n faHome,\r\n faHourglassEnd,\r\n faWarehouse\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\nimport Button from \"../../../button/Button\";\r\nimport JobLocationType from \"../../../job-location-type/job-location-type-icon/JobLocationTypeIcon\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { JobDetail } from \"360\";\r\nimport JobStatusIcon from \"../../../job-status/JobStatusIcon\";\r\n\r\nconst convertLocationType = (locationTypeId: number) => {\r\n switch (locationTypeId) {\r\n case 1:\r\n return \"At site/yard\";\r\n case 2:\r\n return \"Roadside\";\r\n case 6:\r\n return \"Servicing dealer\";\r\n default:\r\n return \"Other\";\r\n }\r\n};\r\n\r\ntype Props = {\r\n jobDetail: JobDetail;\r\n onClicked: (jobId: number) => void;\r\n loneWorkerStatus: boolean;\r\n};\r\n\r\nconst AllocatedJob = (props: Props) => {\r\n const { jobDetail, onClicked, loneWorkerStatus } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {jobDetail.vehicleRegistration}\r\n \r\n \r\n \r\n \r\n \r\n {jobDetail.jobId}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {jobDetail.estimatedTimeOfArrival\r\n ? t(\"DisplayDate\", {\r\n date: jobDetail.estimatedTimeOfArrival\r\n })\r\n : \"N/A\"}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {jobDetail.customer}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {jobDetail.endUser}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {jobDetail.serviceProviderDepot}\r\n \r\n \r\n \r\n \r\n {jobDetail.jobStatus !== null && (\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AllocatedJob;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport S from \"./styles\";\r\nimport AllocatedJob from \"./AllocatedJob/AllocatedJob\";\r\nimport { useApi, isSuccess, mapSuccess } from \"../../../api/Api\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport CheckBox from \"../../check-box/CheckBox\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { JobDetail } from \"360\";\r\n\r\ntype Props = {\r\n onContinue: (jobId: number) => void;\r\n onFail: () => void;\r\n userId: number;\r\n};\r\n\r\nconst AllocatedJobs = (props: Props) => {\r\n const { onContinue, onFail, userId } = props;\r\n const [loading, setLoading] = useState(true);\r\n const [jobs, setJobs] = useState([]);\r\n const [userJobsFilter, setUserJobsFilter] = useState(false);\r\n const [customerFilter, setCustomerFilter] = useState(null);\r\n const [depotFilter, setDepotFilter] = useState(null);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const response = await api.get(\"api/allocated-jobs\", \"1.0\");\r\n const mapped = mapSuccess(response, (r): JobDetail[] =>\r\n r.map((job: any) => ({\r\n ...job,\r\n estimatedTimeOfArrival: new Date(job.estimatedTimeOfArrival),\r\n }))\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(mapped)) {\r\n if (mapped.data.length > 0) setJobs(mapped.data);\r\n return;\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n })();\r\n }, [onFail, api]);\r\n\r\n const handleCustomerChange = (e: React.ChangeEvent) =>\r\n setCustomerFilter(e.target.value || null);\r\n\r\n const handleDepotChange = (e: React.ChangeEvent) =>\r\n setDepotFilter(e.target.value || null);\r\n\r\n if (loading) return ;\r\n\r\n const filteredJobs = jobs.filter(\r\n (j) =>\r\n (customerFilter === null || j.customer === customerFilter) &&\r\n (depotFilter === null || j.serviceProviderDepot === depotFilter) &&\r\n (!userJobsFilter || j.allocatedFitter === userId)\r\n );\r\n const orderedJobs = filteredJobs.sort((a, b) =>\r\n a.estimatedTimeOfArrival > b.estimatedTimeOfArrival\r\n ? 1\r\n : a.estimatedTimeOfArrival < b.estimatedTimeOfArrival\r\n ? -1\r\n : 0\r\n );\r\n const depots = [...new Set(jobs.map((j) => j.serviceProviderDepot))];\r\n const customers = [...new Set(jobs.map((j) => j.customer))];\r\n\r\n return (\r\n \r\n {t(\"Allocated jobs\")}\r\n \r\n \r\n \r\n {depots.map((d) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n {customers.map((c) => (\r\n \r\n ))}\r\n \r\n \r\n setUserJobsFilter(!userJobsFilter)}\r\n />\r\n {t(\"Your jobs only\")}\r\n \r\n \r\n {orderedJobs.map((j) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default AllocatedJobs;\r\n","import styles from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\n\r\nconst Home = styles.div`\r\n display: flex;\r\n flex-direction: column;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst Details = styles.div`\r\n padding: 5px;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Title = styles.div`\r\n font-weight: bold;\r\n text-align: center;\r\n width: 100%;\r\n`;\r\n\r\nconst Wrapper = styles.div`\r\n display: flex;\r\n width: 100%;\r\n`;\r\n\r\nconst Button = styles(_Button)`\r\n width: 16rem;\r\n margin-top: 3px;\r\n`;\r\n\r\nexport default { Home, Details, Title, Wrapper, Button };\r\n","import styled from \"styled-components\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport colours from \"../../../../utils/colours\";\r\nimport colors from \"../../../../utils/colours\";\r\n\r\ntype Props = {\r\n alert?: boolean;\r\n};\r\n\r\nconst Button = styled.button`\r\n cursor: pointer;\r\n display: flex;\r\n width: 16rem;\r\n align-items: center;\r\n padding: 10px 10px;\r\n margin: 2px;\r\n\r\n background-color: ${props =>\r\n !props.alert ? colors.lightOrange : colours.darkRed};\r\n border: none;\r\n padding: 5px;\r\n border-radius: 5px;\r\n\r\n & > span {\r\n padding-left: 15px;\r\n }\r\n\r\n &:disabled {\r\n display: none;\r\n }\r\n`;\r\n\r\nconst Text = styled.p`\r\n padding-top: 5px;\r\n padding-left: 15px;\r\n width: 100%;\r\n`;\r\n\r\nconst Icon = styled(FontAwesomeIcon)`\r\n font-size: 60px;\r\n`;\r\n\r\nexport default { Button, Text, Icon };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\n\r\ntype Props = {\r\n icon: IconProp;\r\n label: string;\r\n status?: number;\r\n onClick: () => void;\r\n};\r\n\r\nconst Button = (props: Props) => {\r\n const { onClick, label, icon } = props;\r\n return (\r\n \r\n \r\n {label}\r\n \r\n );\r\n};\r\n\r\nexport default Button;\r\n","import styled from \"styled-components\";\r\nimport Button from \"../../../button/Button\";\r\n\r\nconst JobOverview = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n margin-bottom: 3px;\r\n margin-top: 3px;\r\n`;\r\n\r\nconst ButtonContainer = styled.div`\r\n width: 100%;\r\n text-align: right;\r\n`;\r\n\r\nconst EditButton = styled(Button)``;\r\n\r\nexport default {\r\n JobOverview,\r\n DetailContainer,\r\n Detail,\r\n DetailContent,\r\n Title,\r\n EditButton,\r\n ButtonContainer\r\n};\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport JobCategory from \"../../../job-details/job-category/JobCategory\";\r\nimport { faClipboardList } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport JobSubCategory from \"../../../job-details/job-sub-category/JobSubCategory\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n tsuNumber: number;\r\n eta: Date | null;\r\n customer?: string;\r\n endUser?: string;\r\n\r\n locationType: string;\r\n vehicleReg: string;\r\n attachedVehicleReg?: string;\r\n};\r\n\r\nconst JobOverview = (props: Props) => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {t(\"TSU number\")}\r\n {props.tsuNumber}\r\n \r\n \r\n \r\n\r\n \r\n \r\n {t(\"Vehicle\")}\r\n {props.vehicleReg}\r\n \r\n \r\n {t(\"Attached Vehicle\")}\r\n {props.attachedVehicleReg !== null ? (\r\n {props.attachedVehicleReg}\r\n ) : (\r\n N/A\r\n )}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {t(\"Customer\")}\r\n {props.customer}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {t(\"End User\")}\r\n {props.endUser !== null ? (\r\n {props.endUser}\r\n ) : (\r\n N/A\r\n )}\r\n \r\n \r\n \r\n\r\n {props.eta !== null ? (\r\n \r\n \r\n \r\n {t(\"ETA\")}\r\n \r\n {t(\"DisplayDate\", { date: props.eta })}\r\n \r\n \r\n \r\n \r\n ) : (\r\n
\r\n )}\r\n\r\n \r\n \r\n \r\n {t(\"Location type\")}\r\n {t(props.locationType)}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default JobOverview;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\n\r\nconst JobDetails = styled.div`\r\n width: 97%;\r\n height: 100%;\r\n max-width: 700px;\r\n\r\n @media screen and (min-width: 500px) {\r\n min-width: 500px;\r\n }\r\n\r\n @media screen and (min-width: 700px) {\r\n min-width: 700px;\r\n }\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n margin-bottom: 3px;\r\n text-align: center;\r\n`;\r\n\r\nconst DetailOverview = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nconst DetailContainer = styled.div`\r\n width: 100%;\r\n text-align: left;\r\n display: flex;\r\n justify-content: space-between;\r\n`;\r\n\r\nconst AdditionalInfo = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n width: 100%;\r\n text-align: right;\r\n`;\r\n\r\nconst Detail = styled.span`\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst DetailContent = styled.span`\r\n margin-bottom: 5px;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst MapContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n width: 100%;\r\n\r\n & .map {\r\n min-height: 16rem;\r\n min-width: 16rem;\r\n border-radius: 5px;\r\n height: 300px;\r\n width: 100%;\r\n }\r\n`;\r\n\r\nconst DetailTitle = styled.div`\r\n font-weight: bold;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n min-width: 16rem;\r\n`;\r\n\r\nconst Footer = styled.div`\r\n text-align: center;\r\n margin-top: 5px;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst WorkInstruction = styled.div`\r\n & img {\r\n max-width: 100%;\r\n }\r\n`;\r\n\r\nconst WorkImage = styled.div`\r\n width: 160px;\r\n height: 160px;\r\n box-sizing: border-box;\r\n display: inline-block;\r\n max-height: 160px;\r\n max-width: 160px;\r\n\r\n & div {\r\n width: 100%;\r\n text-align: center;\r\n }\r\n`;\r\n\r\nconst NoItems = styled.div`\r\n width: 100%;\r\n text-align: center;\r\n font-style: italic;\r\n`;\r\n\r\nconst JobWrapper = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nexport default {\r\n JobDetails,\r\n Title,\r\n DetailContent,\r\n Detail,\r\n DetailContainer,\r\n DetailOverview,\r\n MapContainer,\r\n DetailTitle,\r\n Button,\r\n Footer,\r\n WorkInstruction,\r\n WorkImage,\r\n NoItems,\r\n JobWrapper,\r\n AdditionalInfo\r\n};\r\n","import React, { useState, useEffect } from \"react\";\r\nimport S from \"./styles\";\r\nimport JobCategory from \"../../job-details/job-category/JobCategory\";\r\nimport {\r\n faClipboardList,\r\n faPhone,\r\n faTire,\r\n faTireFlat,\r\n faClock,\r\n faMapMarkedAlt,\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\nimport JobSubCategory from \"../../job-details/job-sub-category/JobSubCategory\";\r\nimport JobDetail from \"../job-details/JobDetail\";\r\nimport { useApi, isSuccess, Response, mapSuccess } from \"../../../api/Api\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { GoogleMap, Marker } from \"@react-google-maps/api\";\r\nimport Thumbnail from \"../../image-gallery/thumbnail/Thumbnail\";\r\nimport FullImageViewer from \"../../modal/image-viewer/ImageViewer\";\r\nimport WorkInstruction from \"./WorkInstruction\";\r\n\r\ntype Props = {\r\n onReturn: () => void;\r\n jobNumber: number;\r\n};\r\n\r\ntype MapProps = {\r\n latitude: number;\r\n longitude: number;\r\n};\r\n\r\nconst Map = (props: MapProps) => {\r\n const { latitude, longitude } = props;\r\n const position = { lat: latitude, lng: longitude };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst markup = (html: string) => {\r\n return { __html: html };\r\n};\r\n\r\nconst JobDetails = (props: Props) => {\r\n const [job, setJob] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const { t } = useTranslation();\r\n const [fullImageSource, setFullImageSource] = useState(null);\r\n const [workInstructionComponents, setWorkInstructionComponents] = useState<\r\n JSX.Element[]\r\n >();\r\n\r\n const api = useApi();\r\n\r\n const getWorkInstructionComponents = () => {\r\n if (\r\n workInstructionComponents === undefined &&\r\n job?.workInstructions !== undefined\r\n )\r\n return buildWorkInstructionComponents(job?.workInstructions);\r\n\r\n return workInstructionComponents;\r\n };\r\n\r\n const buildTextBlock = (text: string, idKey: number) => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n const buildWorkInstruction = (html: string) => {\r\n var components: JSX.Element[] = [];\r\n var images: string[] = [];\r\n var textBlock: string = \"\";\r\n var blockId: number = 0;\r\n\r\n var openTag = html.search(/\") + 2;\r\n images.push(html.substring(openTag, closeTag));\r\n\r\n textBlock =\r\n textBlock +\r\n html.substring(0, openTag) +\r\n \" [Image \" +\r\n images.length +\r\n \"]\";\r\n html = html.substring(closeTag);\r\n openTag = html.search(/ {\r\n components.push(buildImageBlock(element, index + 1));\r\n });\r\n return components;\r\n };\r\n\r\n const buildImageBlock = (html: string, index: number) => {\r\n var srcTag = html.search(/src/i);\r\n var srcEnd = html.search(/.png/i);\r\n\r\n var source = html.substring(srcTag + 5, srcEnd + 4);\r\n\r\n return (\r\n \r\n {\r\n handleWorkImageClicked(source);\r\n }}\r\n />\r\n
{t(\"Image {{index}}\", { index: index })}
\r\n
\r\n );\r\n };\r\n\r\n const buildWorkInstructionComponents = (wi: WorkInstruction[]) => {\r\n var components = wi.map((wi) => {\r\n return (\r\n \r\n {wi.title}\r\n {buildWorkInstruction(wi.htmlMarkUp)}\r\n \r\n );\r\n });\r\n setWorkInstructionComponents(components);\r\n return components;\r\n };\r\n\r\n const handleWorkImageClicked = (source: string | null) => {\r\n setFullImageSource(source);\r\n };\r\n\r\n useEffect(() => {\r\n (async () => {\r\n const getJobDetails = async (\r\n jobId: number\r\n ): Promise> => {\r\n var response = await api.get(`api/allocated-jobs/${jobId}`, \"1.0\");\r\n return mapSuccess(response, (data) => ({\r\n ...data,\r\n jobDate: new Date(data.jobDate),\r\n estimatedTimeOfArrival:\r\n data.estimatedTimeOfArrival !== null\r\n ? new Date(data.estimatedTimeOfArrival)\r\n : null,\r\n enRoute: data.enRoute !== null ? new Date(data.enRoute) : null,\r\n onScene: data.onScene !== null ? new Date(data.onScene) : null,\r\n completed: data.completed !== null ? new Date(data.completed) : null,\r\n returnedHome:\r\n data.returnedHome !== null ? new Date(data.returnedHome) : null,\r\n }));\r\n };\r\n\r\n try {\r\n setLoading(true);\r\n const response = await getJobDetails(props.jobNumber);\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) {\r\n setJob(response.data);\r\n return;\r\n }\r\n } catch {}\r\n })();\r\n }, [props.jobNumber, api]);\r\n\r\n if (job === null || loading) return ;\r\n\r\n return (\r\n \r\n {fullImageSource !== null && (\r\n {\r\n setFullImageSource(null);\r\n }}\r\n >\r\n )}\r\n \r\n {t(\"Job Details\")}\r\n \r\n \r\n \r\n \r\n {t(\"TSU number\")}\r\n {job.jobId}\r\n \r\n \r\n {t(\"Vehicle Registration\")}\r\n {job.vehicleRegistration}\r\n \r\n \r\n {t(\"Job Date\")}\r\n \r\n {t(\"DisplayDate\", { date: new Date(job.jobDate) })}\r\n \r\n \r\n \r\n {t(\"Additional Information\")}\r\n \r\n \r\n {job.additionalInformation}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {t(\"Caller Name\")}\r\n {job.callerName}\r\n \r\n \r\n {t(\"Caller Number\")}\r\n {job.contactNumber}\r\n \r\n \r\n {t(\"Driver Name\")}\r\n {job.driverName}\r\n \r\n \r\n {t(\"Driver Number\")}\r\n {job.driverNumber}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {job.location !== null && {t(\"Location\")}}\r\n {job.location !== null && (\r\n {job.location}\r\n )}\r\n \r\n \r\n {job.latitude !== null && job.longitude !== null && (\r\n {t(\"Coordinates\")}\r\n )}\r\n \r\n \r\n {job.latitude !== null && job.longitude !== null && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n\r\n \r\n {job.allocatedTyres.length < 1 ? (\r\n {t(\"No tires requested\")}\r\n ) : (\r\n job.allocatedTyres.map((tyre, index) => {\r\n return (\r\n \r\n \r\n \r\n {t(\"Position\")}\r\n {tyre.position}\r\n \r\n \r\n {t(\"Tyre Size\")}\r\n {tyre.tyreSize}\r\n \r\n \r\n {t(\"Make\")}\r\n {tyre.make}\r\n \r\n \r\n {t(\"Pattern\")}\r\n {tyre.pattern}\r\n \r\n \r\n {t(\"Removal Reason\")}\r\n {t(tyre.removalReason)}\r\n \r\n \r\n \r\n );\r\n })\r\n )}\r\n \r\n\r\n \r\n {job.allocatedHusbandries.length < 1 ? (\r\n {t(\"No husbandry requested\")}\r\n ) : (\r\n job.allocatedHusbandries.map((tyre, index) => {\r\n return (\r\n \r\n \r\n \r\n {t(\"Position\")}\r\n {tyre.position}\r\n \r\n \r\n {t(\"Tyre Size\")}\r\n {tyre.tyreSize}\r\n \r\n \r\n {t(\"Husbandry\")}\r\n \r\n {t(tyre.requestedHusbandry)}\r\n \r\n \r\n \r\n \r\n );\r\n })\r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {t(\"ETA\")}\r\n \r\n {job.estimatedTimeOfArrival ? (\r\n t(\"DisplayDate\", {\r\n date: new Date(job.estimatedTimeOfArrival),\r\n })\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {t(\"En Route\")}\r\n \r\n {job.enRoute ? (\r\n t(\"DisplayDate\", { date: new Date(job.enRoute) })\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {t(\"Arrived\")}\r\n \r\n {job.onScene ? (\r\n t(\"DisplayDate\", { date: new Date(job.onScene) })\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {t(\"Work Complete\")}\r\n \r\n {job.completed ? (\r\n t(\"DisplayDate\", { date: new Date(job.completed) })\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {t(\"Returned Home\")}\r\n \r\n {job.returnedHome ? (\r\n t(\"DisplayDate\", { date: new Date(job.returnedHome) })\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {getWorkInstructionComponents()}\r\n \r\n \r\n {t(\"Return to job\")}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default JobDetails;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport _Input from \"../../input/Input\";\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n margin-bottom: 3px;\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n`;\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n text-align: center;\r\n width: 100%;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst EnRoute = styled.div`\r\n display: flex;\r\n align-items: center;\r\n flex-direction: column;\r\n`;\r\n\r\nexport default { Button, Input, Title, EnRoute };\r\n","import styled from \"styled-components\";\r\nimport _Input from \"../input/Input\";\r\n\r\nconst Date = styled(_Input)`\r\n width: 10rem;\r\n border-radius: 5px 0px 0px 5px;\r\n text-align: center;\r\n`;\r\n\r\nconst Time = styled(_Input)`\r\n width: 6rem;\r\n border-radius: 0px 5px 5px 0px;\r\n border-text-align: center;\r\n border-left-width: 0px;\r\n text-align: center;\r\n`;\r\n\r\nconst DateTime = styled.div`\r\n width: 16rem;\r\n margin-bottom: 3px;\r\n`;\r\n\r\nconst Error = styled.div`\r\n color: red;\r\n margin-top: 3px;\r\n`;\r\n\r\nconst InputWrapper = styled.div`\r\n height: 30px;\r\n display: flex;\r\n`;\r\n\r\nexport default {\r\n DateTime,\r\n Date,\r\n Time,\r\n Error,\r\n InputWrapper\r\n};\r\n","import React, { useState } from \"react\";\r\nimport S from \"./styles\";\r\n\r\ntype Props = {\r\n onChange: (value: Date) => void;\r\n value: Date | null;\r\n errors?: string[];\r\n};\r\n\r\nconst padValue = (value: number) => {\r\n if (value < 10) return \"0\" + value.toString();\r\n return value;\r\n};\r\n\r\nconst DateTimeInput = (props: Props) => {\r\n const setUpDate = () => {\r\n if (props.value === null) return \"\";\r\n return (\r\n props.value.getFullYear() +\r\n \"-\" +\r\n padValue(props.value.getMonth() + 1) +\r\n \"-\" +\r\n padValue(props.value.getDate())\r\n );\r\n };\r\n\r\n const setUpTime = () => {\r\n if (props.value === null) return \"\";\r\n\r\n return (\r\n padValue(props.value.getHours()) +\r\n \":\" +\r\n padValue(props.value.getMinutes())\r\n );\r\n };\r\n\r\n const [date, setDate] = useState(setUpDate());\r\n const [time, setTime] = useState(setUpTime());\r\n\r\n const handleDateChange = (value: string) => {\r\n setDate(value);\r\n handleOnChange(value, time);\r\n };\r\n\r\n const handleTimeChange = (value: string) => {\r\n setTime(value);\r\n handleOnChange(date, value);\r\n };\r\n\r\n const handleOnChange = (date: string, time: string) => {\r\n var datetime = date + \" \" + time;\r\n\r\n if (date === \"\" || time === \"\") {\r\n datetime = \"\";\r\n }\r\n\r\n props.onChange(new Date(datetime));\r\n };\r\n\r\n var error: string[] = props.errors !== undefined ? [\"\", \"\"] : [];\r\n\r\n return (\r\n \r\n \r\n {\r\n handleDateChange(e.target.value);\r\n }}\r\n value={date}\r\n errors={error}\r\n >\r\n\r\n {\r\n handleTimeChange(e.target.value);\r\n }}\r\n value={time}\r\n errors={error}\r\n >\r\n \r\n {error.length > 0 && {props.errors![0]}}\r\n \r\n );\r\n};\r\n\r\nexport default DateTimeInput;\r\n","import React, { useState } from \"react\";\r\nimport S from \"./styles\";\r\nimport { useApi, isNoContent, isFailure } from \"../../../api/Api\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport DateTimeInput from \"../../date-time-input/DateTimeInput\";\r\nimport VR from \"../../../utils/ValidationResult\";\r\nimport formatISO from \"date-fns/formatISO\";\r\n\r\ntype Props = {\r\n onContinue: (enRouteTime: Date) => void;\r\n onReturn: () => void;\r\n onFail: (errors?: string[]) => void;\r\n jobNumber: number;\r\n};\r\n\r\nconst isValidDate = (date: Date) => {\r\n return date instanceof Date && !isNaN(date.getTime());\r\n};\r\n\r\nconst EnRoute = (props: Props) => {\r\n const { onContinue, onFail } = props;\r\n const [loading, setLoading] = useState(false);\r\n const [enRouteTime, setEnRouteTime] = useState(new Date());\r\n const { t } = useTranslation();\r\n const [vr, setVr] = useState(VR.empty);\r\n\r\n const api = useApi();\r\n const submitEnRouteTime = (jobNumber: number, time: Date) =>\r\n api.post(`api/allocated-jobs/${jobNumber}/en-route`, \"1.0\", {\r\n time: formatISO(time),\r\n });\r\n const validate = (): VR => {\r\n const result = VR.empty;\r\n\r\n if (!isValidDate(enRouteTime))\r\n result.add(\"enRouteDate\", t(\"You must enter a date and a time\"));\r\n\r\n if (enRouteTime > new Date())\r\n result.add(\"enRouteDate\", t(\"Date must not be in the future.\"));\r\n\r\n return result;\r\n };\r\n\r\n const handleDateChange = (value: Date) => {\r\n setEnRouteTime(value);\r\n };\r\n\r\n const handleContinue = async () => {\r\n const vr = validate();\r\n setVr(vr);\r\n if (!vr.ok) return;\r\n\r\n setLoading(true);\r\n try {\r\n const response = await submitEnRouteTime(props.jobNumber, enRouteTime);\r\n setLoading(false);\r\n\r\n if (isFailure(response)) {\r\n return onFail(response.errors);\r\n }\r\n\r\n if (isNoContent(response)) {\r\n return onContinue(enRouteTime);\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n if (loading) return ;\r\n\r\n return (\r\n \r\n {t(\"En Route Time\")}\r\n\r\n \r\n\r\n {t(\"Continue\")}\r\n {t(\"Return to job\")}\r\n \r\n );\r\n};\r\n\r\nexport default EnRoute;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport _Input from \"../../input/Input\";\r\n\r\nconst JobTakeover = styled.div`\r\n display: flex;\r\n align-items: center;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n margin-bottom: 3px;\r\n`;\r\n\r\nconst TextContent = styled.span`\r\n text-align: center;\r\n width: 100%;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst TextWarning = styled(TextContent)`\r\n font-weight: bold;\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst Date = styled(_Input)`\r\n float: left;\r\n width: 10rem;\r\n border-radius: 5px 0px 0px 5px;\r\n text-align: center;\r\n`;\r\n\r\nconst Time = styled(_Input)`\r\n float: right;\r\n width: 6rem;\r\n border-radius: 0px 5px 5px 0px;\r\n border-text-align: center;\r\n border-left-width: 0px;\r\n text-align: center;\r\n`;\r\n\r\nconst DateTime = styled.div`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nexport default {\r\n JobTakeover,\r\n Button,\r\n Input,\r\n TextContent,\r\n TextWarning,\r\n DateTime,\r\n Date,\r\n Time\r\n};\r\n","import React, { useState } from \"react\";\r\nimport S from \"./styles\";\r\nimport { useApi, isNoContent, isFailure } from \"../../../api/Api\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport DateTimeInput from \"../../date-time-input/DateTimeInput\";\r\nimport VR from \"../../../utils/ValidationResult\";\r\n\r\ntype Props = {\r\n jobId: number;\r\n onContinue: (eta: Date) => void;\r\n onReturn: () => void;\r\n onFail: (errors?: string[]) => void;\r\n eta: Date | null;\r\n};\r\n\r\nconst isValidDate = (date: Date | null) => {\r\n if (date === null) return false;\r\n return date instanceof Date && !isNaN(date.getTime());\r\n};\r\n\r\nconst JobTakeover = (props: Props) => {\r\n const [loading, setLoading] = useState(false);\r\n const { t } = useTranslation();\r\n const [vr, setVr] = useState(VR.empty);\r\n const [takeOverDate, setTakeOverDate] = useState(null);\r\n const api = useApi();\r\n const takeOverJob = (jobId: number, etaDate: Date) =>\r\n api.post(`api/allocated-jobs/${jobId}/taken-over`, \"1.0\", {\r\n time: etaDate,\r\n });\r\n\r\n const validate = (): VR => {\r\n const result = VR.empty;\r\n\r\n if (takeOverDate !== null && takeOverDate < new Date())\r\n result.add(\"takeOverDate\", t(\"Date must be in the future.\"));\r\n\r\n if (!isValidDate(takeOverDate))\r\n result.add(\"takeOverDate\", t(\"You must enter a date and time.\"));\r\n\r\n return result;\r\n };\r\n\r\n const handleDateChange = (value: Date) => {\r\n setTakeOverDate(value);\r\n };\r\n\r\n const onConfirmTakeover = async (jobId: number) => {\r\n const vr = validate();\r\n setVr(vr);\r\n if (!vr.ok) return;\r\n\r\n try {\r\n setLoading(true);\r\n const response = await takeOverJob(jobId, new Date(takeOverDate!));\r\n setLoading(false);\r\n\r\n if (isFailure(response)) {\r\n return props.onFail(response.errors);\r\n }\r\n\r\n if (isNoContent(response)) {\r\n return props.onContinue(new Date(takeOverDate!));\r\n }\r\n } catch {}\r\n\r\n props.onFail();\r\n };\r\n\r\n if (loading) return ;\r\n\r\n return (\r\n \r\n \r\n {t(\"Please enter an ETA in order to take responsibility of the job.\")}\r\n \r\n\r\n \r\n\r\n {\r\n onConfirmTakeover(props.jobId);\r\n }}\r\n >\r\n {t(\"Confirm\")}\r\n \r\n {t(\"Return to job\")}\r\n \r\n );\r\n};\r\n\r\nexport default JobTakeover;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport _Input from \"../../input/Input\";\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n margin-bottom: 3px;\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n`;\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n text-align: center;\r\n width: 100%;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst OnScene = styled.div`\r\n display: flex;\r\n align-items: center;\r\n flex-direction: column;\r\n`;\r\n\r\nexport default { Button, Input, Title, OnScene };\r\n","import React, { useState } from \"react\";\r\nimport { useApi, isNoContent, isFailure } from \"../../../api/Api\";\r\nimport S from \"./styles\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport DateTimeInput from \"../../date-time-input/DateTimeInput\";\r\nimport VR from \"../../../utils/ValidationResult\";\r\nimport formatISO from \"date-fns/formatISO\";\r\n\r\ntype Props = {\r\n onContinue: (onSceneTime: Date) => void;\r\n jobNumber: number;\r\n onReturn: () => void;\r\n onFail: (errors?: string[]) => void;\r\n};\r\n\r\nconst isValidDate = (date: Date) => {\r\n return date instanceof Date && !isNaN(date.getTime());\r\n};\r\n\r\nconst OnScene = (props: Props) => {\r\n const [arrivedTime, setArrivedTime] = useState(new Date());\r\n const { onContinue, onFail } = props;\r\n const [loading, setLoading] = useState(false);\r\n const { t } = useTranslation();\r\n const [vr, setVr] = useState(VR.empty);\r\n const api = useApi();\r\n\r\n const submitOnSceneTime = (jobNumber: number, time: Date) =>\r\n api.post(`api/allocated-jobs/${jobNumber}/on-scene`, \"1.0\", {\r\n time: formatISO(time),\r\n });\r\n\r\n const handleChange = (value: Date) => {\r\n setArrivedTime(value); //change this\r\n };\r\n\r\n const validate = (): VR => {\r\n const result = VR.empty;\r\n\r\n if (!isValidDate(arrivedTime))\r\n result.add(\"arrivedTime\", t(\"You must enter a date and time\"));\r\n\r\n if (arrivedTime > new Date())\r\n result.add(\"arrivedTime\", t(\"Date must not be in the future.\"));\r\n\r\n return result;\r\n };\r\n\r\n const handleContinue = async () => {\r\n const vr = validate();\r\n setVr(vr);\r\n if (!vr.ok) return;\r\n\r\n try {\r\n setLoading(true);\r\n const response = await submitOnSceneTime(\r\n props.jobNumber,\r\n new Date(arrivedTime)\r\n );\r\n setLoading(false);\r\n\r\n if (isFailure(response)) {\r\n return onFail(response.errors);\r\n }\r\n\r\n if (isNoContent(response)) {\r\n return onContinue(new Date(arrivedTime));\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n };\r\n\r\n if (loading) return ;\r\n\r\n return (\r\n \r\n {t(\"Time Arrived\")}\r\n \r\n {t(\"Continue\")}\r\n {t(\"Return to job\")}\r\n \r\n );\r\n};\r\n\r\nexport default OnScene;\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport _Input from \"../../input/Input\";\r\nimport _TextArea from \"../../textarea/TextArea\";\r\n\r\nconst WorkComplete = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n & p,\r\n input,\r\n select,\r\n button,\r\n label {\r\n display: block;\r\n margin: 3px 0;\r\n }\r\n`;\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst TextContent = styled.span`\r\n text-align: center;\r\n width: 100%;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst TextWarning = styled(TextContent)`\r\n font-weight: bold;\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst TextArea = styled(_TextArea)`\r\n width: 16rem;\r\n height: 20rem;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n text-align: center;\r\n width: 100%;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst MissingPhotosWarning = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 16rem;\r\n\r\n & > ul,\r\n & > p {\r\n list-style: inside;\r\n margin: 5px 0px;\r\n }\r\n`;\r\n\r\nconst Heading = styled.p`\r\n width: 16rem;\r\n`;\r\n\r\nexport default {\r\n WorkComplete,\r\n Button,\r\n TextContent,\r\n TextWarning,\r\n Title,\r\n Input,\r\n MissingPhotosWarning,\r\n TextArea,\r\n Heading,\r\n};\r\n","import styled from \"styled-components\";\r\nimport _Button from \"../../button/Button\";\r\nimport _Input from \"../../input/Input\";\r\nimport _Select from \"../../select/Select\";\r\n\r\nconst Button = styled(_Button)`\r\n width: 16rem;\r\n`;\r\n\r\nconst Input = styled(_Input)`\r\n width: 16rem;\r\n margin-bottom: 5px;\r\n`;\r\nconst Title = styled.div`\r\n font-weight: bold;\r\n text-align: center;\r\n width: 100%;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst Select = styled(_Select)`\r\n width: 16rem;\r\n`;\r\n\r\nconst WheelSecurity = styled.div`\r\n & > * {\r\n display: block;\r\n margin-bottom: 5px;\r\n max-width: 16rem;\r\n }\r\n`;\r\n\r\nexport default { Button, Input, Title, Select, WheelSecurity };\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport S from \"./styles\";\r\nimport Creatable from \"react-select/creatable\";\r\nimport { useApi, isSuccess } from \"../../../api/Api\";\r\nimport colours from \"../../../utils/colours\";\r\nimport VR from \"../../../utils/ValidationResult\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { WheelSecurityModel } from \"360\";\r\n\r\ntype Props = {\r\n onContinue: (wheelSecurity: WheelSecurityModel) => void;\r\n onReturn: () => void;\r\n onFail: (errors?: string[]) => void;\r\n};\r\n\r\ntype NotRetorquedReason = {\r\n id: number | null;\r\n reason: string;\r\n};\r\n\r\nconst getNewOptionData = (\r\n inputValue: string,\r\n _: React.ReactNode\r\n): NotRetorquedReason => ({ reason: inputValue, id: null });\r\n\r\nconst isNotRetorquedReason = (\r\n o: NotRetorquedReason | readonly NotRetorquedReason[] | undefined | null\r\n): o is NotRetorquedReason =>\r\n o !== undefined && o !== null && !Array.isArray(o);\r\n\r\nconst getOptionValue = (option: NotRetorquedReason) => option.reason;\r\n\r\nconst WheelSecurity = (props: Props) => {\r\n const { onContinue, onReturn, onFail } = props;\r\n const [loading, setLoading] = useState(true);\r\n const [notRetorquedReasons, setNotRetorquedReasons] = useState<\r\n NotRetorquedReason[]\r\n >([]);\r\n const [wheelsRemoved, setWheelsRemoved] = useState(null);\r\n const [retorqued, setRetorqued] = useState(null);\r\n const [reasonNotRetorqued, setNotRetorquedReason] =\r\n useState(null);\r\n const [vr, setVr] = useState(VR.empty);\r\n const [wrenchNumber, setWrenchNumber] = useState(null);\r\n const [torqueSetting, setTorqueSetting] = useState(null);\r\n const [tagNumber, setTagNumber] = useState(null);\r\n\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n const getOptionLabel = (option: NotRetorquedReason) => t(option.reason);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n setLoading(true);\r\n const response = await api.get(\r\n \"api/not-retorqued-reasons\",\r\n \"1.0\"\r\n );\r\n setLoading(false);\r\n\r\n if (isSuccess(response)) return setNotRetorquedReasons(response.data);\r\n\r\n onFail();\r\n })();\r\n }, [onFail, api]);\r\n\r\n const handleContinue = async () => {\r\n const vr = validate();\r\n setVr(vr);\r\n if (!vr.ok) return;\r\n\r\n setLoading(true);\r\n\r\n const model: WheelSecurityModel = {\r\n wheelsRemoved: wheelsRemoved!,\r\n wrenchNumber,\r\n torqueSetting,\r\n tagNumber,\r\n retorqued: retorqued!,\r\n reasonNotRetorqued:\r\n reasonNotRetorqued && reasonNotRetorqued.id === null\r\n ? reasonNotRetorqued.reason\r\n : null,\r\n reasonNotRetorquedId: reasonNotRetorqued ? reasonNotRetorqued.id : null,\r\n };\r\n onContinue(model);\r\n setLoading(false);\r\n };\r\n\r\n const handleChange = (\r\n option:\r\n | NotRetorquedReason\r\n | readonly NotRetorquedReason[]\r\n | undefined\r\n | null\r\n ) => {\r\n if (isNotRetorquedReason(option) || option === null) {\r\n setNotRetorquedReason(option);\r\n setTagNumber(null);\r\n }\r\n };\r\n\r\n const handleCreate = (notRetorquedReason: string) => {\r\n setNotRetorquedReason({ reason: notRetorquedReason, id: null });\r\n };\r\n\r\n const onWheelRemovedChanged = (e: React.ChangeEvent) => {\r\n if (e.target.value === \"Yes\") setWheelsRemoved(true);\r\n else if (e.target.value === \"No\") {\r\n setWheelsRemoved(false);\r\n setTorqueSetting(null);\r\n setWrenchNumber(null);\r\n setRetorqued(null);\r\n setNotRetorquedReason(null);\r\n setTagNumber(null);\r\n } else {\r\n setWheelsRemoved(null);\r\n setTorqueSetting(null);\r\n setWrenchNumber(null);\r\n setRetorqued(null);\r\n setNotRetorquedReason(null);\r\n setTagNumber(null);\r\n }\r\n };\r\n\r\n const onRetorqueChanged = (e: React.ChangeEvent) => {\r\n if (e.target.value === \"Yes\") {\r\n setRetorqued(true);\r\n setNotRetorquedReason(null);\r\n setTagNumber(null);\r\n } else if (e.target.value === \"No\") setRetorqued(false);\r\n else {\r\n setRetorqued(null);\r\n setNotRetorquedReason(null);\r\n setTagNumber(null);\r\n }\r\n };\r\n\r\n const onTorqueSettingChanged = (e: React.ChangeEvent) => {\r\n setTorqueSetting(e.target.value);\r\n };\r\n\r\n const onWrenchNumberChange = (e: React.ChangeEvent) => {\r\n setWrenchNumber(e.target.value);\r\n };\r\n\r\n const onTagNumberChange = (e: React.ChangeEvent) => {\r\n setTagNumber(e.target.value);\r\n };\r\n\r\n const validate = () => {\r\n const vr = VR.empty;\r\n\r\n if (wheelsRemoved === null) {\r\n vr.add(\"wheelRemoved\", t(\"Field is required.\"));\r\n }\r\n\r\n if (wheelsRemoved === true && !torqueSetting) {\r\n vr.add(\"torqueSetting\", t(\"Field is required.\"));\r\n }\r\n\r\n if (wheelsRemoved === true && !wrenchNumber) {\r\n vr.add(\"wrenchNumber\", t(\"Field is required.\"));\r\n }\r\n\r\n if (wheelsRemoved === true && retorqued == null) {\r\n vr.add(\"retorque\", t(\"Field is required.\"));\r\n }\r\n\r\n if (wheelsRemoved === true && !retorqued && !reasonNotRetorqued?.reason) {\r\n vr.add(\"NotCompleteReason\", t(\"Field is required\"));\r\n }\r\n\r\n if (\r\n wheelsRemoved === true &&\r\n !retorqued &&\r\n reasonNotRetorqued?.id === 1 &&\r\n !tagNumber\r\n ) {\r\n vr.add(\"torqueTag\", t(\"Field is required.\"));\r\n }\r\n\r\n return vr;\r\n };\r\n\r\n var errors = vr.getErrors(\"NotCompleteReason\") || [];\r\n\r\n if (loading) return ;\r\n\r\n return (\r\n \r\n {t(\"Wheel Security\")}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {wheelsRemoved === true && (\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {retorqued === false && wheelsRemoved === true && (\r\n \r\n \r\n ({\r\n ...provided,\r\n width: \"16rem\",\r\n borderColor:\r\n errors.length > 0 ? colours.lightRed : colours.black,\r\n background:\r\n errors.length > 0 ? colours.extraLightRed : colours.white,\r\n }),\r\n valueContainer: (provided, _) => ({\r\n ...provided,\r\n padding: \"2px 5px\",\r\n }),\r\n }}\r\n />\r\n\r\n {reasonNotRetorqued?.id === 1 && (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n {t(\"Continue\")}\r\n {t(\"Return to job\")}\r\n \r\n );\r\n};\r\n\r\nexport default WheelSecurity;\r\n","import styled from \"styled-components\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport colors from \"../../../../utils/colours\";\r\nimport _button from \"../../../button/Button\";\r\n\r\nconst ContactTSU = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n max-width: 16rem;\r\n align-items: center;\r\n`;\r\n\r\nconst Header = styled.div`\r\n font-weight: bold;\r\n margin-top: 5px;\r\n`;\r\n\r\nconst Detail = styled.div`\r\n margin-top: 3px;\r\n padding: 10px;\r\n`;\r\n\r\nconst Icon = styled(FontAwesomeIcon)`\r\n color: ${colors.lightGreen};\r\n`;\r\n\r\nconst PhoneIcon = styled(FontAwesomeIcon)`\r\n margin-right: 3px;\r\n`;\r\n\r\nconst Button = styled(_button)`\r\n margin: 3px;\r\n width: 16rem;\r\n`;\r\n\r\nexport default { ContactTSU, Header, Icon, PhoneIcon, Detail, Button };\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { faThumbsUp, faPhone } from \"@fortawesome/pro-solid-svg-icons\";\r\n\r\ntype Props = {\r\n onContinue: () => void;\r\n phoneNumber: string;\r\n};\r\n\r\nconst ContactTSU = (props: Props) => {\r\n return (\r\n \r\n \r\n Job Completed Successfully\r\n \r\n Please contact TSU to provide the final details of the job.\r\n \r\n \r\n \r\n {props.phoneNumber}\r\n \r\n Return To Menu\r\n \r\n );\r\n};\r\n\r\nexport default ContactTSU;\r\n","import React from \"react\";\r\nimport S from \"./styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n positions: string[];\r\n onContinue: () => void;\r\n onReturnToPhotos: () => void;\r\n};\r\n\r\nconst PositionsMissingPhotos = (props: Props) => {\r\n const { positions, onContinue, onReturnToPhotos } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n

\r\n {t(\r\n \"This customer requires that a photo be taken for each position that requires work.\"\r\n )}\r\n

\r\n

\r\n {t(\r\n \"The following positions could not be matched to a photo. Please ensure that a photo has been provided before continuing.\"\r\n )}\r\n

\r\n
    \r\n {positions.map(x => (\r\n
  • {x}
  • \r\n ))}\r\n
\r\n {t(\"Return to photos\")}\r\n {t(\"Continue\")}\r\n
\r\n );\r\n};\r\n\r\nexport default PositionsMissingPhotos;\r\n","import React, { useState } from \"react\";\r\nimport { Api, useApi, isSuccess, Response } from \"../../../api/Api\";\r\nimport { ValueType, OptionsType } from \"react-select\";\r\nimport Creatable from \"react-select/creatable\";\r\nimport ValidationResult from \"../../../utils/ValidationResult\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport colours from \"../../../utils/colours\";\r\nimport FieldErrors from \"../../field-errors/FieldErrors\";\r\nimport S from \"./styles\";\r\n\r\nconst getPatterns = (\r\n api: Api,\r\n size: string,\r\n make: string\r\n): Promise> =>\r\n api.get(\"api/tyre-patterns\", \"1.0\", { size, make });\r\n\r\ntype Option = { value: string };\r\n\r\nconst isOption = (\r\n o: Option | readonly Option[] | undefined | null\r\n): o is Option => o !== undefined && o !== null && !Array.isArray(o);\r\n\r\nconst isValidNewOption = (\r\n inputValue: string,\r\n _: ValueType
\r\n );\r\n }\r\n }\r\n\r\n if (loading) return ;\r\n if (errors.length > 0)\r\n return setErrors([])} />;\r\n\r\n return editingPositionId === null ? (\r\n \r\n {positions}\r\n {currentJob.configId === null && (\r\n \r\n {t(\"Change configuration\")}\r\n \r\n )}\r\n\r\n {t(\"Return to Menu\")}\r\n \r\n ) : (\r\n {\r\n setEditingPositionId(null);\r\n setEditingPositionDescription(\"\");\r\n }}\r\n onFail={onFail}\r\n >
\r\n );\r\n};\r\n\r\nexport default Configuration;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport Configuration from \"../configuration/Configuration\";\r\nimport { Configuration as Config } from \"360\";\r\nimport { useApi, isSuccess } from \"../../../api/Api\";\r\nimport Job from \"../../job-details/Job\";\r\nimport ConfigurationChooser from \"../../breakdown/work-required/configuration-chooser/ConfigurationChooser\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\n\r\ntype Props = {\r\n onContinue: () => void;\r\n onFail: (errors?: string[]) => void;\r\n jobId: number;\r\n job: Job;\r\n};\r\n\r\nconst Camera = (props: Props) => {\r\n const [loading, setLoading] = useState(true);\r\n const [showConfigChooser, setShowConfigChooser] = useState(false);\r\n const [selectedConfig, setSelectedConfig] = useState();\r\n const { onFail, onContinue, jobId, job } = props;\r\n const api = useApi();\r\n\r\n const onChangeConfig = () => {\r\n setShowConfigChooser(true);\r\n setSelectedConfig(undefined);\r\n };\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n let response;\r\n //If the job already has a config set go get that config,\r\n //else get a config based on other details present in the job.\r\n if (job.configId !== null) {\r\n response = await api.get(\r\n `api/configurations/${job.configId}`,\r\n \"1.1\"\r\n );\r\n } else {\r\n response = await api.get(\r\n `api/allocated-jobs/${jobId}/default-config`,\r\n \"1.1\"\r\n );\r\n }\r\n\r\n if (isSuccess(response)) {\r\n if (response.data !== null) {\r\n setLoading(false);\r\n return setSelectedConfig(response.data);\r\n }\r\n\r\n setLoading(false);\r\n return setShowConfigChooser(true);\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n })();\r\n }, [api, jobId, job.configId, onFail]);\r\n\r\n if (loading) return ;\r\n\r\n if (selectedConfig !== undefined) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (showConfigChooser) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n return ;\r\n};\r\n\r\nexport default Camera;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport * as M from \"360\";\r\nimport { useApi, isSuccess } from \"../../../api/Api\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport GeneralErrors from \"../../general-errors/GeneralErrors\";\r\nimport Documents from \"./Documents\";\r\nimport S from \"./styles\";\r\n\r\ntype DocumentsResponse = {\r\n key: string;\r\n documents: M.Document[];\r\n};\r\n\r\nconst getCustomerDocumentUrl = (id: string, key: string) =>\r\n `api/documents/customer/${id}?v=1&key=${key}`;\r\n\r\ntype Props = {\r\n customerId: number;\r\n onBackClick: () => void;\r\n};\r\n\r\nconst CustomerDocuments = ({ customerId, onBackClick }: Props) => {\r\n const [documents, setDocuments] = useState(null);\r\n const [errors, setErrors] = useState([]);\r\n const { t } = useTranslation();\r\n const api = useApi();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n var response = await api.get(\r\n `api/documents/customer?customerId=${customerId}`,\r\n \"1.0\"\r\n );\r\n\r\n if (isSuccess(response)) {\r\n setDocuments(response.data);\r\n return;\r\n }\r\n } catch {}\r\n\r\n setErrors([\r\n t(\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\"\r\n ),\r\n ]);\r\n })();\r\n }, [t, customerId, api]);\r\n\r\n if (errors.length > 0)\r\n return ;\r\n\r\n if (documents === null) return ;\r\n\r\n const documentsWithUrls = documents.documents.map((d) => ({\r\n ...d,\r\n url: getCustomerDocumentUrl(d.id, documents.key),\r\n }));\r\n\r\n return (\r\n
\r\n {documentsWithUrls.length > 0 ? (\r\n \r\n ) : (\r\n No documents found\r\n )}\r\n {t(\"Return to job\")}\r\n
\r\n );\r\n};\r\n\r\nexport default CustomerDocuments;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport S from \"./styles\";\r\nimport Button from \"./button/Button\";\r\nimport {\r\n faLocationArrow,\r\n faFlagCheckered,\r\n faThumbsUp,\r\n faHome,\r\n faCamera,\r\n faTimes,\r\n faClipboardList,\r\n faClipboardListCheck,\r\n faFile,\r\n} from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useApi, Api, Response, isSuccess, mapSuccess } from \"../../../api/Api\";\r\nimport Job from \"../../job-details/Job\";\r\nimport Spinner from \"../../spinner/Spinner\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport JobOverview from \"./job-overview/JobOverview\";\r\nimport JobDetails from \"../job-details/JobDetails\";\r\nimport EnRoute from \"../en-route/EnRoute\";\r\nimport JobTakeover from \"../job-takeover/JobTakeover\";\r\nimport OnScene from \"../on-scene/OnScene\";\r\nimport WorkComplete from \"../work-complete/WorkComplete\";\r\nimport JobCancelled from \"../job-cancelled/JobCancelled\";\r\nimport ReturnedHome from \"../returned-home/ReturnedHome\";\r\nimport Camera from \"../camera/Camera\";\r\nimport CustomerDocuments from \"../documents/CustomerDocuments\";\r\nimport GeneralErrors from \"../../general-errors/GeneralErrors\";\r\n\r\ntype JobResponse = {\r\n key: string;\r\n job: Job;\r\n};\r\n\r\ntype JobStatus = {\r\n enRoute: number;\r\n arrived: number;\r\n workComplete: number;\r\n returnedHome: number;\r\n cancelled: number;\r\n};\r\n\r\ntype Props = {\r\n jobNumber: number;\r\n phoneNumber: string;\r\n userId: number;\r\n onBackClicked: () => void;\r\n};\r\n\r\ntype ActiveComponent =\r\n | \"JOB-MANAGEMENT\"\r\n | \"JOB-DETAILS\"\r\n | \"EN-ROUTE\"\r\n | \"ON-SCENE\"\r\n | \"WORK-COMPLETE\"\r\n | \"JOB-CANCELLED\"\r\n | \"RETURNED-HOME\"\r\n | \"CAMERA\"\r\n | \"TAKEOVER\"\r\n | \"CUSTOMER-DOCUMENTS\";\r\n\r\nconst getJob = async (\r\n api: Api,\r\n jobNumber: number\r\n): Promise> => {\r\n const response: Response = await api.get(`api/jobs/${jobNumber}`, \"1.0\");\r\n return mapSuccess(response, (r) => ({\r\n key: r.key,\r\n job: {\r\n ...r.job,\r\n jobDate: new Date(r.job.jobDate),\r\n timeAllocated:\r\n r.job.timeAllocated !== null ? new Date(r.job.timeAllocated) : null,\r\n estimatedTimeOfArrival:\r\n r.job.estimatedTimeOfArrival !== null\r\n ? new Date(r.job.estimatedTimeOfArrival)\r\n : null,\r\n onSceneTime:\r\n r.job.onSceneTime !== null ? new Date(r.job.onSceneTime) : null,\r\n enRoute: r.job.enRoute !== null ? new Date(r.job.enRoute) : null,\r\n completed: r.job.completed !== null ? new Date(r.job.completed) : null,\r\n },\r\n }));\r\n};\r\n\r\nconst getStatus = (api: Api, jobId: number): Promise> =>\r\n api.get(`api/allocated-jobs/${jobId}/job-status`, \"1.0\");\r\n\r\nconst JobManagement = ({\r\n jobNumber,\r\n onBackClicked,\r\n phoneNumber,\r\n userId,\r\n}: Props) => {\r\n const [job, setJob] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const [jobStatus, setJobStatus] = useState(null);\r\n const [errors, setErrors] = useState([]);\r\n\r\n const { t } = useTranslation();\r\n const [activeComponent, setActiveComponent] =\r\n useState(\"JOB-MANAGEMENT\");\r\n\r\n const api = useApi();\r\n\r\n const handleJobDetailsClicked = () => setActiveComponent(\"JOB-DETAILS\");\r\n const handleEnRouteClicked = () => setActiveComponent(\"EN-ROUTE\");\r\n const handleTakeoverClicked = () => setActiveComponent(\"TAKEOVER\");\r\n const handleArrivedClicked = () => setActiveComponent(\"ON-SCENE\");\r\n const handleWorkCompleteClicked = () => setActiveComponent(\"WORK-COMPLETE\");\r\n const handleJobCancelledClicked = () => setActiveComponent(\"JOB-CANCELLED\");\r\n const handleReturnedHomeClicked = () => setActiveComponent(\"RETURNED-HOME\");\r\n const handleCameraClicked = () => setActiveComponent(\"CAMERA\");\r\n const handleCustomerDocumentsClick = () =>\r\n setActiveComponent(\"CUSTOMER-DOCUMENTS\");\r\n\r\n const onFail = async (errors?: string[]) => {\r\n await reloadJob();\r\n\r\n const errorsToDisplay =\r\n errors !== undefined && errors.length > 0\r\n ? errors\r\n : [\r\n \"A serious error has been encountered. Please contact us for assistance.\",\r\n ];\r\n setErrors(errorsToDisplay);\r\n };\r\n\r\n const setJobManagementActive = () => {\r\n setActiveComponent(\"JOB-MANAGEMENT\");\r\n };\r\n\r\n const reloadJob = async () => {\r\n try {\r\n setLoading(true);\r\n const [job, status] = await Promise.all<\r\n Response,\r\n Response\r\n >([getJob(api, jobNumber), getStatus(api, jobNumber)]);\r\n\r\n if (isSuccess(job) && isSuccess(status)) {\r\n setJobStatus(status.data);\r\n setJob(job.data.job);\r\n setJobManagementActive();\r\n return setLoading(false);\r\n }\r\n } catch {}\r\n\r\n onFail();\r\n setLoading(false);\r\n };\r\n\r\n useEffect(() => {\r\n (async () => {\r\n try {\r\n setLoading(true);\r\n const [job, status] = await Promise.all<\r\n Response,\r\n Response\r\n >([getJob(api, jobNumber), getStatus(api, jobNumber)]);\r\n\r\n if (isSuccess(job) && isSuccess(status)) {\r\n setJobStatus(status.data);\r\n setJob(job.data.job);\r\n return setLoading(false);\r\n }\r\n } catch {}\r\n\r\n setErrors([\r\n \"A serious error has been encountered. Please contact us for assistance.\",\r\n ]);\r\n setLoading(false);\r\n })();\r\n }, [jobNumber, api]);\r\n\r\n if (loading) return ;\r\n\r\n if (job === null || jobStatus === null) {\r\n throw new Error(\r\n \"component has incorrect state: job or job status is null.\"\r\n );\r\n }\r\n\r\n const jobIsAllocatedToDifferentFitter =\r\n job && job.assignedFitterId && job.assignedFitterId !== userId;\r\n const canTakeOverJob =\r\n job && jobIsAllocatedToDifferentFitter && job.completed === null;\r\n const canSubmitEnRoute =\r\n job &&\r\n !jobIsAllocatedToDifferentFitter &&\r\n job.enRoute === null &&\r\n job.onSceneTime == null &&\r\n job.completed === null;\r\n const canSubmitOnScene =\r\n job &&\r\n !jobIsAllocatedToDifferentFitter &&\r\n job.enRoute !== null &&\r\n job.onSceneTime === null &&\r\n job.completed === null;\r\n const canSubmitCompletion =\r\n job &&\r\n !jobIsAllocatedToDifferentFitter &&\r\n job.enRoute !== null &&\r\n job.onSceneTime !== null &&\r\n job.completed === null;\r\n const canSubmitReturnedHome =\r\n job &&\r\n !jobIsAllocatedToDifferentFitter &&\r\n job.enRoute !== null &&\r\n job.onSceneTime !== null &&\r\n job.completed !== null;\r\n\r\n let component = ;\r\n\r\n switch (activeComponent) {\r\n case \"JOB-MANAGEMENT\":\r\n component = (\r\n
\r\n {t(\"Job Management\")}\r\n \r\n
\r\n \r\n \r\n \r\n {canTakeOverJob && (\r\n \r\n )}\r\n {canSubmitEnRoute && (\r\n \r\n )}\r\n {canSubmitOnScene && (\r\n \r\n )}\r\n {canSubmitCompletion && (\r\n \r\n )}\r\n {canSubmitReturnedHome && (\r\n \r\n )}\r\n {!jobIsAllocatedToDifferentFitter && (\r\n \r\n )}\r\n \r\n {t(\"Return to jobs\")}\r\n \r\n
\r\n );\r\n break;\r\n\r\n case \"JOB-DETAILS\":\r\n component = (\r\n {\r\n setJobManagementActive();\r\n }}\r\n jobNumber={jobNumber}\r\n >\r\n );\r\n break;\r\n\r\n case \"EN-ROUTE\":\r\n component = (\r\n await reloadJob()}\r\n jobNumber={jobNumber}\r\n onReturn={setJobManagementActive}\r\n onFail={onFail}\r\n >\r\n );\r\n break;\r\n\r\n case \"TAKEOVER\":\r\n component = (\r\n await reloadJob()}\r\n jobId={jobNumber}\r\n eta={job.estimatedTimeOfArrival}\r\n onReturn={setJobManagementActive}\r\n onFail={onFail}\r\n >\r\n );\r\n break;\r\n\r\n case \"ON-SCENE\":\r\n component = (\r\n await reloadJob()}\r\n jobNumber={jobNumber}\r\n onReturn={setJobManagementActive}\r\n onFail={onFail}\r\n >\r\n );\r\n break;\r\n\r\n case \"WORK-COMPLETE\":\r\n component = (\r\n await reloadJob()}\r\n jobId={jobNumber}\r\n confirmationRequired={job.tyres}\r\n husbandriesNeedingConfirmation={job.husbandries.map((h) => ({\r\n id: h.id,\r\n position: h.position,\r\n failureDescription: \"\",\r\n }))}\r\n phoneNumber={phoneNumber}\r\n countryId={job.countryId}\r\n onReturn={setJobManagementActive}\r\n onReturnToPhotos={handleCameraClicked}\r\n onFail={onFail}\r\n />\r\n );\r\n break;\r\n\r\n case \"JOB-CANCELLED\":\r\n component = (\r\n {\r\n onBackClicked();\r\n }}\r\n jobId={jobNumber}\r\n onReturn={setJobManagementActive}\r\n onFail={onFail}\r\n >\r\n );\r\n break;\r\n\r\n case \"RETURNED-HOME\":\r\n component = (\r\n {\r\n var updatedStatus = jobStatus;\r\n updatedStatus.returnedHome = 5;\r\n updatedStatus.enRoute = 5;\r\n updatedStatus.arrived = 5;\r\n updatedStatus.workComplete = 5;\r\n updatedStatus.cancelled = 5;\r\n setJobManagementActive();\r\n }}\r\n jobId={jobNumber}\r\n onReturn={setJobManagementActive}\r\n onFail={onFail}\r\n >\r\n );\r\n break;\r\n\r\n case \"CAMERA\":\r\n component = (\r\n {\r\n setJobManagementActive();\r\n }}\r\n job={job}\r\n jobId={jobNumber}\r\n onFail={onFail}\r\n >\r\n );\r\n break;\r\n\r\n case \"CUSTOMER-DOCUMENTS\":\r\n component = (\r\n setJobManagementActive()}\r\n customerId={job.customerId}\r\n />\r\n );\r\n break;\r\n\r\n default:\r\n onFail();\r\n break;\r\n }\r\n\r\n if (errors.length > 0)\r\n return (\r\n t(e))}\r\n onClose={() => {\r\n setErrors([]);\r\n }}\r\n />\r\n );\r\n\r\n return {component};\r\n};\r\n\r\nexport default JobManagement;\r\n","import React, { useState } from \"react\";\r\nimport Home from \"../home/Home\";\r\nimport Notifications from \"../notifications/Notifications\";\r\nimport PhoneUs from \"../phone-us/PhoneUs\";\r\nimport Breakdown from \"../breakdown/Breakdown\";\r\nimport BreakdownsInProgress from \"../breakdowns-in-progress/BreakdownsInProgress\";\r\nimport RecentJobs from \"../todays-jobs/RecentJobs\";\r\nimport SearchJobs from \"../search-jobs/SearchJobs\";\r\nimport LoggedInMenu from \"../menu/LoggedInMenu\";\r\nimport S from \"./styles\";\r\nimport SupplierDocuments from \"../tech/documents/SupplierDocuments\";\r\nimport AllocatedJobs from \"../tech/allocated-jobs/AllocatedJobs\";\r\nimport JobManagement from \"../tech/job-management/JobManagement\";\r\nimport { useUserContext } from \"../../contexts/UserContext\";\r\nimport { useApi } from \"../../api/Api\";\r\n\r\ntype Props = {\r\n onLogout: () => void;\r\n};\r\n\r\ntype ActiveComponent =\r\n | \"HOME\"\r\n | \"PHONE-US\"\r\n | \"NOTIFICATIONS\"\r\n | \"LOG-BREAKDOWN\"\r\n | \"BREAKDOWNS-IN-PROGRESS\"\r\n | \"RECENT-JOBS\"\r\n | \"SEARCH-JOBS\"\r\n | \"JOB-DETAILS\"\r\n | \"SUPPLIER-DOCUMENTS\"\r\n | \"ALLOCATED-JOBS\"\r\n | \"JOB-MANAGEMENT\";\r\n\r\nconst LoggedInContent = (props: Props) => {\r\n const { onLogout } = props;\r\n const [activeComponent, setActiveComponent] = useState(\r\n \"HOME\"\r\n );\r\n const [currentReference, setCurrentReference] = useState(null);\r\n const [currentJobId, setCurrentJobId] = useState(null);\r\n const [lastViewedNotificationId, setLastViewedNotificationId] = useState<\r\n number | null\r\n >(null);\r\n const user = useUserContext();\r\n const api = useApi();\r\n\r\n const handleLogoutClick = async () => {\r\n try {\r\n await api.post(\"api/auth/revoke\", \"1.1\");\r\n } catch {\r\n // if refresh token revocation fails, just log the user out.\r\n }\r\n onLogout();\r\n };\r\n\r\n const handlePhoneClick = () => setActiveComponent(\"PHONE-US\");\r\n const handleHomeClick = () => setActiveComponent(\"HOME\");\r\n const handleNotificationsClick = () => setActiveComponent(\"NOTIFICATIONS\");\r\n const handleBreakdownClick = () => {\r\n setCurrentReference(null);\r\n setActiveComponent(\"LOG-BREAKDOWN\");\r\n };\r\n const handleBreakdownsInProgressClick = () =>\r\n setActiveComponent(\"BREAKDOWNS-IN-PROGRESS\");\r\n const handleTodaysJobsClick = () => setActiveComponent(\"RECENT-JOBS\");\r\n const handleSearchClick = () => setActiveComponent(\"SEARCH-JOBS\");\r\n const handleAllocatedJobsClick = () => setActiveComponent(\"ALLOCATED-JOBS\");\r\n const handleSupplierDocumentsClick = () =>\r\n setActiveComponent(\"SUPPLIER-DOCUMENTS\");\r\n\r\n const handleBreakdownContinue = (reference: string) => {\r\n setCurrentReference(reference);\r\n setActiveComponent(\"LOG-BREAKDOWN\");\r\n };\r\n\r\n let component = null;\r\n\r\n switch (activeComponent) {\r\n case \"NOTIFICATIONS\":\r\n component = (\r\n \r\n );\r\n break;\r\n case \"PHONE-US\":\r\n component = ;\r\n break;\r\n case \"LOG-BREAKDOWN\":\r\n component = (\r\n setActiveComponent(\"HOME\")}\r\n onFail={() => setActiveComponent(\"PHONE-US\")}\r\n />\r\n );\r\n break;\r\n case \"BREAKDOWNS-IN-PROGRESS\":\r\n component = ;\r\n break;\r\n case \"RECENT-JOBS\":\r\n component = ;\r\n break;\r\n case \"SEARCH-JOBS\":\r\n component = ;\r\n break;\r\n case \"HOME\":\r\n component = (\r\n \r\n );\r\n break;\r\n case \"SUPPLIER-DOCUMENTS\":\r\n component = (\r\n setActiveComponent(\"HOME\")} />\r\n );\r\n break;\r\n\r\n case \"JOB-MANAGEMENT\":\r\n currentJobId !== null\r\n ? (component = (\r\n setActiveComponent(\"ALLOCATED-JOBS\")}\r\n >\r\n ))\r\n : setActiveComponent(\"PHONE-US\");\r\n break;\r\n\r\n case \"ALLOCATED-JOBS\":\r\n component = (\r\n {\r\n setCurrentJobId(jobId);\r\n setActiveComponent(\"JOB-MANAGEMENT\");\r\n }}\r\n onFail={() => setActiveComponent(\"PHONE-US\")}\r\n userId={user.id}\r\n />\r\n );\r\n break;\r\n\r\n default:\r\n throw new Error(`unhandled active component: ${activeComponent}`);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {component}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoggedInContent;\r\n","import { createGlobalStyle } from \"styled-components\";\r\nimport openSans from \"./OpenSans-Regular.ttf\";\r\n\r\nconst GlobalStyle = createGlobalStyle`\r\n @font-face {\r\n font-family: \"Open Sans\";\r\n src: url(${openSans});\r\n }\r\n\r\n body {\r\n font-family: \"Open Sans\";\r\n font-size: 16px;\r\n overflow-x: hidden;\r\n\r\n & * {\r\n font-family: \"Open Sans\";\r\n font-size: 16px;\r\n }\r\n }\r\n\r\n #root {\r\n height: 100vh;\r\n }\r\n`;\r\n\r\nexport default GlobalStyle;\r\n","import styled from \"styled-components\";\r\n\r\nconst App = styled.div`\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n`;\r\n\r\nexport default { App };\r\n","const resources = {\r\n en: {\r\n translation: {\r\n Username: \"Username\",\r\n Password: \"Password\",\r\n Country: \"Country\",\r\n \"Sign in\": \"Sign in\",\r\n Cancel: \"Cancel\",\r\n Search: \"Search\",\r\n \"Having trouble signing in?\": \"Having trouble signing in?\",\r\n \"Please contact us for assistance.\": \"Please contact us for assistance.\",\r\n \"You must provide a username.\": \"You must provide a username.\",\r\n \"You must provide a password.\": \"You must provide a password.\",\r\n \"You must select a country.\": \"You must select a country.\",\r\n \"Log breakdown\": \"Log breakdown\",\r\n \"Recent jobs\": \"Recent jobs\",\r\n \"Search jobs\": \"Search jobs\",\r\n \"Job Search\": \"Job Search\",\r\n \"User guide\": \"User guide\",\r\n \"Call us\": \"Call us\",\r\n \"If you require assistance, please click the button to phone us.\":\r\n \"If you require assistance, please click the button to phone us.\",\r\n \"If you require assistance, please select your country to phone us.\":\r\n \"Please select your country to contact us.\",\r\n \"Purchase Order/Defect Number\": \"Purchase Order/Defect Number\",\r\n \"Additional Information\": \"Additional Information\",\r\n \"Maximum length is {{len}} characters.\":\r\n \"Maximum length is {{len}} characters.\",\r\n \"Minimum length is {{len}} characters.\":\r\n \"Minimum length is {{len}} characters.\",\r\n \"Your depot is required for this contract.\":\r\n \"Your depot is required for this contract.\",\r\n Mileage: \"Mileage\",\r\n \"Missing search query.\": \"Missing search query.\",\r\n \"TSU Case Number\": \"TSU Case Number\",\r\n \"{{length}} jobs found.\": \"{{length}} jobs found.\",\r\n Notifications: \"Notifications\",\r\n \"Your full name\": \"Your full name\",\r\n \"Your telephone number\": \"Your telephone number\",\r\n \"Who is with the vehicle?\": \"Who is with the vehicle?\",\r\n You: \"You\",\r\n \"Someone else\": \"Someone else\",\r\n \"Their full name\": \"Their full name\",\r\n \"Their telephone number\": \"Their telephone number\",\r\n Continue: \"Continue\",\r\n Skip: \"Skip\",\r\n \"Vehicle / unit number\": \"Vehicle / unit number\",\r\n \"This vehicle is suspended. By continuing, you accept any costs associated with this work.\":\r\n \"This vehicle is suspended. By continuing, you accept any costs associated with this work.\",\r\n \"Getting your current location...\": \"Getting your current location...\",\r\n \"Your location could not be automatically retrieved at this time.\":\r\n \"Your location could not be automatically retrieved at this time.\",\r\n \"Please ensure that location services are enabled and permissions have been granted.\":\r\n \"Please ensure that location services are enabled and permissions have been granted.\",\r\n Retry: \"Retry\",\r\n \"Enter location\": \"Enter location\",\r\n \"Is this location correct?\": \"Is this location correct?\",\r\n Yes: \"Yes\",\r\n \"No - enter location\": \"No - enter location\",\r\n Location: \"Location\",\r\n \"Caller Details\": \"Caller Details\",\r\n \"Caller Name\": \"Caller Name\",\r\n \"Caller No\": \"Caller No\",\r\n \"Contact No\": \"Contact No\",\r\n \"End User\": \"End User\",\r\n \"Job History\": \"Job History\",\r\n \"Time Allocated\": \"Time Allocated\",\r\n \"Chosen Time\": \"Chosen Time\",\r\n \"Attending SP\": \"Attending SP\",\r\n \"Attending depot\": \"Attending depot\",\r\n ETA: \"ETA\",\r\n \"On Scene Time\": \"On Scene Time\",\r\n \"Tire Details\": \"Tire Details\",\r\n Size: \"Size\",\r\n \"Wheel Position\": \"Wheel Position\",\r\n \"Husbandry Requests\": \"Husbandry Requests\",\r\n Images: \"Images\",\r\n \"has been logged and we will advise your ETA shortly.\":\r\n \"has been logged and we will advise your ETA shortly.\",\r\n \"Please check your notifications for updates.\":\r\n \"Please check your notifications for updates.\",\r\n \"Job Number\": \"Job Number\",\r\n \"Field is required.\": \"Field is required.\",\r\n \"Replacement tire\": \"Replacement tire\",\r\n \"Other work\": \"Other work\",\r\n Damage: \"Damage\",\r\n Other: \"Other\",\r\n \"Specify damage\": \"Specify damage\",\r\n \"Specify reason\": \"Specify reason\",\r\n \"Specify work\": \"Specify work\",\r\n \"Work required\": \"Work required\",\r\n \"Removal reason\": \"Removal reason\",\r\n \"Tire size\": \"Tire size\",\r\n \"Change configuration\": \"Change configuration\",\r\n \"There is existing work on this position.\":\r\n \"There is existing work on this position.\",\r\n \"Add work\": \"Add work\",\r\n \"Change existing work\": \"Change existing work\",\r\n \"Remove existing work\": \"Remove existing work\",\r\n \"Return to configuration\": \"Return to configuration\",\r\n \"Vehicle type\": \"Vehicle type\",\r\n \"Number of axles\": \"Number of axles\",\r\n \"Number of drive axles\": \"Number of drive axles\",\r\n \"Axles twinned\": \"Axles twinned\",\r\n \"Is the vehicle powered?\": \"Is the vehicle powered?\",\r\n No: \"No\",\r\n DisplayDate: \"{{date, P p}}\",\r\n \"Does the vehicle have a powered/driven axle?\":\r\n \"Does the vehicle have a powered/driven axle?\",\r\n \"If you are submitting multiple jobs at the same location, please note this above.\":\r\n \"If you are submitting multiple jobs at the same location, please note this above.\",\r\n \"Attached vehicle\": \"Attached vehicle\",\r\n Customer: \"Customer\",\r\n \"Please ensure you are in a safe location before you continue.\":\r\n \"Please ensure you are in a safe location before you continue.\",\r\n Errors: \"Errors\",\r\n Error: \"Error\",\r\n \"A serious error has been encountered whilst processing your breakdown. Please contact us for further assistance.\":\r\n \"A serious error has been encountered whilst processing your breakdown. Please contact us for further assistance.\",\r\n \"Mileage is required for this contract. You may continue if this is unavailable.\":\r\n \"Mileage is required for this contract. You may continue if this is unavailable.\",\r\n \"security-auth-incorrect-details\":\r\n \"You have provided an incorrect username, password or country.\",\r\n \"security-auth-account-disabled\":\r\n \"Your account has been disabled. Please contact us for assistance.\",\r\n \"security-auth-account-locked\":\r\n \"Your account has been temporarily locked. Please try again later.\",\r\n \"security-auth-account-not-360-smart-enabled\":\r\n \"Your account does not have access to 360\\u{B0}Smart. Please contact us for assistance.\",\r\n \"breakdown-purchase-order-defect-number-failed-validation\":\r\n \"You have submitted an invalid purchase order/defect number. Please try again or contact us for assistance.\",\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\":\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\",\r\n \"Login failed. Please try again.\": \"Login failed. Please try again.\",\r\n AVAILABILITY: \"{{time, HH:mm}}\",\r\n AVAILABILITY_WITH_DATE: \"{{time, HH:mm (P)}}\",\r\n AVAILABILITY_DATE: \"{{date, P}}\",\r\n \"Breakdown summary\": \"Breakdown summary\",\r\n \"Work requested\": \"Work requested\",\r\n \"Additional information\": \"Additional information\",\r\n Availability: \"Availability\",\r\n \"Caller details\": \"Caller details\",\r\n \"Contact name\": \"Contact name\",\r\n \"Contact telephone\": \"Contact telephone\",\r\n \"Driver name\": \"Driver name\",\r\n \"Driver telephone\": \"Driver telephone\",\r\n \"Job overview\": \"Job overview\",\r\n \"TSU number\": \"TSU number\",\r\n \"Purchase order / defect number\": \"Purchase order / defect number\",\r\n \"Location type\": \"Location type\",\r\n Edit: \"Edit\",\r\n Coordinates: \"Coordinates\",\r\n Position: \"Position\",\r\n Husbandry: \"Husbandry\",\r\n \"Hide images\": \"Hide images\",\r\n \"Show images\": \"Show images\",\r\n View: \"View\",\r\n \"You have no recent jobs.\": \"You have no recent jobs.\",\r\n \"You must complete one field.\": \"You must complete one field.\",\r\n \"has been partially logged. We may be in contact shortly to confirm details.\":\r\n \"has been partially logged. We may be in contact shortly to confirm details.\",\r\n Home: \"Home\",\r\n \"You must add work to at least one position.\":\r\n \"You must add work to at least one position.\",\r\n \"Warning: You will lose existing work on positions if you change the configuration.\":\r\n \"Warning: You will lose existing work on positions if you change the configuration.\",\r\n Roadside: \"Roadside\",\r\n \"Servicing dealer\": \"Servicing dealer\",\r\n \"At site/yard\": \"At site/yard\",\r\n NOTIFICATION_NOFORMAT: \"Notification data could not be displayed.\",\r\n NOTIFICATION_ALLOCATED_V1:\r\n \"Your job has been allocated to {{serviceProvider}} and your ETA is {{eta, P p}}.\",\r\n NOTIFICATION_REVISEDETA_V1:\r\n \"Your service provider has been delayed and your new ETA is {{revisedEta, P p}}.\",\r\n NOTIFICATION_ENROUTE_V1:\r\n \"Your service provider reported that they were en route at {{enRoute, P p}}.\",\r\n NOTIFICATION_ONSCENE_V1:\r\n \"Your service provider reported that they were on scene at {{onScene, P p}}.\",\r\n NOTIFICATION_COMPLETED_V1:\r\n \"Your service provider reported that the work was completed at {{completed, P p}}.\",\r\n NOTIFICATION_REALLOCATED_V1:\r\n \"Your job has been re-allocated to {{serviceProvider}} and your ETA is {{eta, P p}}.\",\r\n \"You have no new notifications.\": \"You have no new notifications.\",\r\n \"Your depot\": \"Your depot\",\r\n \"Contact depot\": \"Contact depot\",\r\n \"You have selected position {{position}}.\":\r\n \"You have selected position {{position}}.\",\r\n \"The selected tire size does not match our history for this vehicle.\":\r\n \"The selected tire size does not match our history for this vehicle.\",\r\n Back: \"Back\",\r\n \"Search...\": \"Search...\",\r\n \"No configurations match your selected criteria. Please check your criteria and contact us if a matching configuration cannot be found.\":\r\n \"No configurations match your selected criteria. Please check your criteria and contact us if a matching configuration cannot be found.\",\r\n \"En Route\": \"En Route\",\r\n Completed: \"Completed\",\r\n Documents: \"Documents\",\r\n DOCUMENT_EFFECTIVE: \"Effective {{effective, P}}\",\r\n DOCUMENT_EXPIRY: \"Expiry {{expiry, P}}\",\r\n \"Customer documents\": \"Customer documents\",\r\n \"You are limited to only {{count}} photos.\":\r\n \"You are limited to only {{count}} photos.\",\r\n \"Image {{index}}\": \"Image {{index}}\",\r\n \"Date must not be in the future.\": \"Date must not be in the future.\",\r\n \"Return to job\": \"Return to job\",\r\n \"Husbandry requested\": \"Husbandry requested\",\r\n \"Tire(s) requested\": \"Tire(s) requested\",\r\n \"No husbandry requested\": \"No husbandry requested\",\r\n \"No tires requested\": \"No tires requested\",\r\n \"Privacy statement\": \"Privacy statement\",\r\n \"Terms of use\": \"Terms of use\",\r\n \"Please be aware that submitting high quality images may result in significant data usage. Methods for reducing image quality will vary by device so please check with your device manufacturer.\":\r\n \"Please be aware that submitting high quality images may result in significant data usage. Methods for reducing image quality will vary by device so please check with your device manufacturer.\",\r\n \"This customer requires that a photo be taken for each position that requires work.\":\r\n \"This customer requires that a photo be taken for each position that requires work.\",\r\n \"The following positions could not be matched to a photo. Please ensure that a photo has been provided before continuing.\":\r\n \"The following positions could not be matched to a photo. Please ensure that a photo has been provided before continuing.\",\r\n \"Return to photos\": \"Return to photos\",\r\n \"Coming soon.\": \"Coming soon.\",\r\n \"Your session has expired. Please log in to continue.\":\r\n \"Your session has expired. Please log in to continue.\",\r\n \"If you cancel the breakdown, all progress will be lost and the breakdown will not be received by our agents.\":\r\n \"If you cancel the breakdown, all progress will be lost and the breakdown will not be received by our agents.\",\r\n \"If you save the breakdown for later, you will have 24 hours to provide the remaining details of the breakdown and submit it to our agents.\":\r\n \"If you save the breakdown for later, you will have 24 hours to provide the remaining details of the breakdown and submit it to our agents.\",\r\n \"Cancel breakdown\": \"Cancel breakdown\",\r\n \"Save breakdown for later\": \"Save breakdown for later\",\r\n \"Return to breakdown\": \"Return to breakdown\",\r\n \"Continue breakdown\": \"Continue breakdown\",\r\n \"You have no breakdowns in progress.\":\r\n \"You have no breakdowns in progress.\",\r\n \"Breakdowns in progress\": \"Breakdowns in progress\",\r\n \"Please provide the following information for the {{position}} position.\":\r\n \"Please provide the following information for the {{position}} position.\",\r\n \"Fitted make\": \"Fitted make\",\r\n \"Fitted pattern\": \"Fitted pattern\",\r\n \"Removed make\": \"Removed make\",\r\n \"Removed pattern\": \"Removed pattern\",\r\n \"Removed tread depth\": \"Removed tread depth\",\r\n \"Save for later or cancel\": \"Save for later or cancel\",\r\n \"allocated-job-incorrect-state\":\r\n \"The job is no longer in the correct state for this action. Please try again.\",\r\n \"Blow out\": \"Blow out\",\r\n \"BO Blow Out\": \"BO Blow out\",\r\n \"Cut to cords\": \"Cut to cords\",\r\n \"CTC Cut To Cords\": \"CTC Cut To Cords\",\r\n \"Flat spot\": \"Flat spot\",\r\n \"FS Flat Spot\": \"FS Flat Spot\",\r\n \"Run flat\": \"Run flat\",\r\n \"RF Run Flat\": \"RF Run Flat\",\r\n \"Sidewall damage\": \"Sidewall damage\",\r\n \"SD Sidewall Damage\": \"SD Sidewall Damage\",\r\n \"Tread damage\": \"Tread damage\",\r\n \"TD Tread Damage\": \"TD Tread Damage\",\r\n Puncture: \"Puncture\",\r\n \"PC Puncture\": \"PC Puncture\",\r\n \"Reason for cancellation\": \"Reason for cancellation\",\r\n \"Broken down\": \"Broken down\",\r\n \"Stuck in traffic\": \"Stuck in traffic\",\r\n \"Stuck attending other job\": \"Stuck attending other job\",\r\n \"Incorrect tyre taken\": \"Incorrect tyre taken\",\r\n \"Too busy with other jobs\": \"Too busy with other jobs\",\r\n \"Tyre Size\": \"Tyre Size\",\r\n \"Your jobs only\": \"Your jobs only\",\r\n Husbandries: \"Husbandries\",\r\n Expires: \"Expires\",\r\n Description: \"Description\",\r\n \"Must be a valid email address.\": \"Must be a valid email address.\",\r\n \"Email contacts\": \"Email contacts\",\r\n Add: \"Add\",\r\n \"{{count}} contact(s)\": \"{{count}} contact(s)\",\r\n \"Please add any email addresses to which you would like job updates to be sent.\":\r\n \"Please add any email addresses to which you would like job updates to be sent.\",\r\n \"Get summary PDF\": \"Get summary PDF\",\r\n },\r\n },\r\n fr: {\r\n translation: {\r\n Username: \"Nom d'utilisateur\",\r\n Password: \"Mot de passe\",\r\n Country: \"Pays\",\r\n \"Sign in\": \"Connexion\",\r\n Cancel: \"Annuler\",\r\n Search: \"Recherche\",\r\n \"Having trouble signing in?\": \"Des problèmes de connexion?\",\r\n \"Please contact us for assistance.\":\r\n \"Veuillez communiquer avec nous pour obtenir de l'aide.\",\r\n \"You must provide a username.\": \"Vous devez entrer un nom d'utilisateur.\",\r\n \"You must provide a password.\": \"Vous devez entrer un mot de passe.\",\r\n \"You must select a country.\": \"Vous devez sélectionner un pays.\",\r\n \"Log breakdown\": \"Signaler une panne\",\r\n \"Recent jobs\": \"Emplois récentes\",\r\n \"Search jobs\": \"Rechercher une emplois\",\r\n \"Job Search\": \"Recherche d'une emplois\",\r\n \"User guide\": \"Guide de l'utilisateur\",\r\n \"Call us\": \"Appelez-nous\",\r\n \"If you require assistance, please click the button to phone us.\":\r\n \"Si vous avez besoin d'aide, veuillez cliquer sur le bouton pour nous téléphoner.\",\r\n \"If you require assistance, please select your country to phone us.\":\r\n \"Veuillez sélectionner votre pays pour nous contacter.\",\r\n \"Purchase Order/Defect Number\": \"Bon de commande / numéro de défaut\",\r\n \"Additional Information\": \"Information supplémentaire\",\r\n \"Maximum length is {{len}} characters.\":\r\n \"La longueur maximale est de {{len}} caractères\",\r\n \"Minimum length is {{len}} characters.\":\r\n \"La longueur minimale est de {{len}} caractères\",\r\n \"Your depot is required for this contract.\":\r\n \"Your depot is required for this contract.\",\r\n Mileage: \"Kilométrage\",\r\n \"Missing search query.\": \"Requête de recherche manquante.\",\r\n \"TSU Case Number\": \"Numéro de dossier TSU\",\r\n \"{{length}} jobs found.\": \"{{length}} emplois trouvés.\",\r\n Notifications: \"Notifications\",\r\n \"Your full name\": \"Votre nom complet\",\r\n \"Your telephone number\": \"Votre numéro de téléphone\",\r\n \"Who is with the vehicle?\": \"Qui est avec le véhicule?\",\r\n You: \"Vous\",\r\n \"Someone else\": \"Quelqu'un d'autre\",\r\n \"Their full name\": \"Son nom complet\",\r\n \"Their telephone number\": \"Son numéro de téléphone\",\r\n Continue: \"Continuer\",\r\n Skip: \"Sauter\",\r\n \"Vehicle / unit number\": \"Véhicule / numéro d'unité\",\r\n \"This vehicle is suspended. By continuing, you accept any costs associated with this work.\":\r\n \"Ce véhicule est suspendu. En continuant, vous acceptez les frais associés à cette emplois.\",\r\n \"Getting your current location...\":\r\n \"Obtention de votre position actuelle...\",\r\n \"Your location could not be automatically retrieved at this time.\":\r\n \"À ce moment-ci, votre emplacement actuel ne peut pas être déterminé.\",\r\n \"Please ensure that location services are enabled and permissions have been granted.\":\r\n \"Veuillez vous assurer que le service de localisation est activé et que vous avez accordé les permissions nécessaires.\",\r\n Retry: \"Réessayez\",\r\n \"Enter location\": \"Entrez votre emplacement\",\r\n \"Is this location correct?\": \"Cet emplacement est-il correct?\",\r\n Yes: \"Oui\",\r\n \"No - enter location\": \"Non - entrez l'emplacement\",\r\n Location: \"Emplacement\",\r\n \"Caller Details\": \"Détails de l'appelant\",\r\n \"Caller Name\": \"Nom de l'appelant\",\r\n \"Caller No\": \"Numero de l'appelant\",\r\n \"Contact No\": \"Numéro de contact\",\r\n \"End User\": \"Utilisateur final\",\r\n \"Job History\": \"Historique des emplois\",\r\n \"Time Allocated\": \"Temps alloué\",\r\n \"Chosen Time\": \"Heure choisie\",\r\n \"Attending SP\": \"Participer au SP\",\r\n \"Attending depot\": \"Emplacement du détaillant d'entretien\",\r\n ETA: \"Heure d'arrivée estimée\",\r\n \"On Scene Time\": \"heure d'arrivée\",\r\n \"Tire Details\": \"Détails des pneus\",\r\n Size: \"Dimensions\",\r\n \"Wheel Position\": \"Position de la roue\",\r\n \"Husbandry Requests\": \"Informations sur la réparation des pneus\",\r\n Images: \"Photos\",\r\n \"has been logged and we will advise your ETA shortly.\":\r\n \"a été enregistré et nous vous informerons sous peu de votre heure d'arrivée estimée\",\r\n \"Please check your notifications for updates.\":\r\n \"Veuillez surveiller vos notifications pour obtenir des mises à jour.\",\r\n \"Job Number\": \"Numéro de emplois\",\r\n \"Field is required.\": \"Champs requis\",\r\n \"Replacement tire\": \"Pneu de remplacement\",\r\n \"Other work\": \"Autre travail\",\r\n Damage: \"Dommage\",\r\n Other: \"Autre\",\r\n \"Specify damage\": \"Précisez les dommages\",\r\n \"Specify reason\": \"Précisez la raison\",\r\n \"Specify work\": \"Spécifiez le travail à faire\",\r\n \"Work required\": \"Travaux requis\",\r\n \"Removal reason\": \"Raison du retrait des pneus\",\r\n \"Tire size\": \"Dimension du pneu\",\r\n \"Tyre Size\": \"Dimensions\",\r\n \"Change configuration\": \"Modifier la configuration\",\r\n \"There is existing work on this position.\":\r\n \"Des réparations ont été effectuées à cette position.\",\r\n \"Add work\": \"Ajouter du travail\",\r\n \"Change existing work\": \"Modifier le travail existant\",\r\n \"Remove existing work\": \"Supprimer le travail existant\",\r\n \"Return to configuration\": \"Retourner à la configuration\",\r\n \"Vehicle type\": \"Type de véhicule\",\r\n \"Number of axles\": \"Nombre d'essieux du véhicule\",\r\n \"Number of drive axles\": \"Nombre d'essieux moteurs\",\r\n \"Axles twinned\": \"Essieux jumelés\",\r\n \"Is the vehicle powered?\":\r\n \"Le véhicule peut-il se déplacer de lui-même (véhicule à moteur)?\",\r\n No: \"Non\",\r\n DisplayDate: \"{{date, P p}}\",\r\n \"Does the vehicle have a powered/driven axle?\":\r\n \"Le véhicule a-t-il un essieu moteur ?\",\r\n \"If you are submitting multiple jobs at the same location, please note this above.\":\r\n \"Si vous soumettez plusieurs emplois pour le même endroit, veuillez le noter ci-dessus.\",\r\n \"Attached vehicle\": \"Véhicule lié au contrat\",\r\n Customer: \"Client\",\r\n \"Please ensure you are in a safe location before you continue.\":\r\n \"Veuillez vous assurer que vous êtes dans un endroit sûr avant de continuer.\",\r\n Errors: \"Erreurs\",\r\n Error: \"Erreur\",\r\n \"A serious error has been encountered whilst processing your breakdown. Please contact us for further assistance.\":\r\n \"Une erreur grave s'est produite lors du traitement de votre panne. Veuillez nous contacter pour obtenir de l'aide.\",\r\n \"Mileage is required for this contract. You may continue if this is unavailable.\":\r\n \"Le kilométrage est requis pour ce contrat. Vous pouvez continuer si cela n'est pas disponible.\",\r\n \"security-auth-incorrect-details\":\r\n \"Le nom d'utilisateur, le mot de passe ou le pays est incorrect.\",\r\n \"security-auth-account-disabled\":\r\n \"Votre compte a été désactivé. Veuillez nous contacter pour obtenir de l'aide.\",\r\n \"security-auth-account-locked\":\r\n \"Votre compte a été temporairement verrouillé. Veuillez réessayer plus tard.\",\r\n \"security-auth-account-not-360-smart-enabled\":\r\n \"Votre compte n'a pas accès à 360\\u{B0}Smart. Veuillez nous contacter pour obtenir de l'aide.\",\r\n \"breakdown-purchase-order-defect-number-failed-validation\":\r\n \"Vous avez soumis un bon de commande /numéro de défaut non valide. Veuillez réessayer ou nous contacter pour obtenir de l'aide.\",\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\":\r\n \"Échec du chargement des données requises. Veuillez recharger 360\\u{B0}Smart et réessayer.\",\r\n \"Login failed. Please try again.\":\r\n \"Échec de la connexion. Veuillez réessayer.\",\r\n AVAILABILITY: \"{{time, HH:mm}}\",\r\n AVAILABILITY_WITH_DATE: \"{{time, HH:mm (P)}}\",\r\n AVAILABILITY_DATE: \"{{date, P}}\",\r\n \"Breakdown summary\": \"Re’sume’ de la panne\",\r\n \"Work requested\": \"Travail demandé\",\r\n \"Additional information\": \"Information supplémentaire\",\r\n Availability: \"Disponibilité\",\r\n \"Caller details\": \"Détails de l'appelant\",\r\n \"Contact name\": \"Nom du contact\",\r\n \"Contact telephone\": \"Téléphone du contact\",\r\n \"Driver name\": \"Nom du conducteur\",\r\n \"Driver telephone\": \"Téléphone du conducteur\",\r\n \"Job overview\": \"Aperçu de la emplois\",\r\n \"TSU number\": \"Numéro TSU\",\r\n \"Purchase order / defect number\": \"Bon de commande / numéro de défaut\",\r\n \"Location type\": \"Type d'emplacement\",\r\n Edit: \"Éditer\",\r\n Coordinates: \"Coordonnées\",\r\n Position: \"Position\",\r\n Husbandry: \"Réparation des pneus\",\r\n \"Hide images\": \"Masquer les images\",\r\n \"Show images\": \"Afficher les images\",\r\n View: \"Vue\",\r\n \"You have no recent jobs.\":\r\n \"Vous n'avez aucune emplois récente à votre dossier.\",\r\n \"You must complete one field.\": \"Vous devez remplir une case\",\r\n \"has been partially logged. We may be in contact shortly to confirm details.\":\r\n \"a été entrée partiellement. Nous pourrions bientôt vous contacter pour obtenir plus de détails.\",\r\n Home: \"Accueil\",\r\n \"You must add work to at least one position.\":\r\n \"Vous devez ajouter une tâcje à au moins une position.\",\r\n \"Warning: You will lose existing work on positions if you change the configuration.\":\r\n \"Avertissement : si vous modifiez la configuration, vous perdrez les emplois existantes sur les positions.\",\r\n Roadside: \"Bord de la route\",\r\n \"Servicing dealer\": \"Détaillant de service\",\r\n \"At site/yard\": \"Sur place/dans la cour\",\r\n NOTIFICATION_NOFORMAT:\r\n \"Les données de notification n'ont pas pu être affichées.\",\r\n NOTIFICATION_ALLOCATED_V1:\r\n \"Votre emplois a été attribuée à {{serviceProvider}}, qui devrait arriver à {{eta, P p}}.\",\r\n NOTIFICATION_REVISEDETA_V1:\r\n \"Votre fournisseur de services a été retardé. Il devrait maintenant arriver à {{revisedEta, P p}}\",\r\n NOTIFICATION_ENROUTE_V1:\r\n \"Votre fournisseur de services a signalé qu'il est en route vers {{enRoute, P p}}.\",\r\n NOTIFICATION_ONSCENE_V1:\r\n \"Votre fournisseur de services a signalé qu'il est sur les lieux à {{onScene, P p}}.\",\r\n NOTIFICATION_COMPLETED_V1:\r\n \"Votre fournisseur de services a signalé qu'il a terminé la emplois à {{completed, P p}}.\",\r\n NOTIFICATION_REALLOCATED_V1:\r\n \"Votre emplois a été réaffectée à {{serviceProvider}}, qui devrait arriver à {{eta, P p}}.\",\r\n \"You have no new notifications.\":\r\n \"Vous n'avez aucune nouvelle notification.\",\r\n \"Your depot\": \"Votre dépôt\",\r\n \"Contact depot\": \"Contactez le dépôt\",\r\n \"You have selected position {{position}}.\":\r\n \"Vous avez sélectionné la position {{position}}.\",\r\n \"The selected tire size does not match our history for this vehicle.\":\r\n \"La dimension de pneu sélectionnée ne correspond pas à notre historique pour ce véhicule.\",\r\n Back: \"Retour\",\r\n \"Search...\": \"Chercher…\",\r\n \"No configurations match your selected criteria. Please check your criteria and contact us if a matching configuration cannot be found.\":\r\n \"La dimension de pneu sélectionnée ne correspond pas à notre historique pour ce véhicule. Si vous ne pouvez pas trouver une configuration appropriée, veuillez nous contacter.\",\r\n \"En Route\": \"En Route\",\r\n Completed: \"Terminé\",\r\n Documents: \"Documents\",\r\n DOCUMENT_EFFECTIVE: \"En vigueur {{effective, P}}\",\r\n DOCUMENT_EXPIRY: \"Expiration {{expiry, P}}\",\r\n \"Customer documents\": \"Documents clients\",\r\n \"You are limited to only {{count}} photos.\":\r\n \"Vous ne pouvez pas envoyer plus de {{count}} photos.\",\r\n \"Image {{index}}\": \"Image {{index}}\",\r\n \"Date must not be in the future.\":\r\n \"La date ne doit pas être dans le futur.\",\r\n \"Return to job\": \"Retour à la emplois\",\r\n \"Husbandry requested\": \"Réparation de pneu demandée\",\r\n \"Tire(s) requested\": \"Pneu (s) demandé (s)\",\r\n \"No husbandry requested\": \"Aucune réparation demandée\",\r\n \"No tires requested\": \"Aucun pneu demandé\",\r\n \"Privacy statement\": \"Déclaration de confidentialité\",\r\n \"Terms of use\": \"Conditions d'utilisation\",\r\n \"Please be aware that submitting high quality images may result in significant data usage. Methods for reducing image quality will vary by device so please check with your device manufacturer.\":\r\n \"Veuillez noter que la soumission d'images de haute qualité peut entraîner une utilisation importante des données. Les méthodes de réduction de la qualité d'image varient selon l'appareil, veuillez donc vérifier auprès du fabricant de votre appareil.\",\r\n \"This customer requires that a photo be taken for each position that requires work.\":\r\n \"Ce client exige qu'une photo soit prise pour chaque position nécessitant des travaux\",\r\n \"The following positions could not be matched to a photo. Please ensure that a photo has been provided before continuing.\":\r\n \"Il n'y a pas de photo associée aux positions suivantes. Veuillez vous assurer qu'une photo a été fournie avant de continuer.\",\r\n \"Return to photos\": \"Retour aux photos\",\r\n \"Coming soon.\": \"Bientôt disponible.\",\r\n \"Your session has expired. Please log in to continue.\":\r\n \"Votre session a expiré. Veuillez vous connecter pour continuer.\",\r\n \"If you cancel the breakdown, all progress will be lost and the breakdown will not be received by our agents.\":\r\n \"Si vous annulez la demande, l'information entrée sera perdue et nos agents ne recevront pas le signalement.\",\r\n \"If you save the breakdown for later, you will have 24 hours to provide the remaining details of the breakdown and submit it to our agents.\":\r\n \"Si vous enregistrez le signalement pour plus tard, vous avez 24 heures pour fournir le reste des détails de la panne et soumettre le signalement à nos agents.\",\r\n \"Cancel breakdown\": \"Annuler la panne\",\r\n \"Save breakdown for later\": \"Enregistrer le signalement pour plus tard\",\r\n \"Return to breakdown\": \"Retour au signalement\",\r\n \"Continue breakdown\": \"Poursuivre le signalement\",\r\n \"You have no breakdowns in progress.\":\r\n \"Vous n'avez aucun signalement en cours.\",\r\n \"Breakdowns in progress\": \"Signalements en cours\",\r\n \"Please provide the following information for the {{position}} position.\":\r\n \"Veuillez fournir les informations suivantes pour la position {{position}}.\",\r\n \"Fitted make\": \"Marque du pneu posé\",\r\n \"Fitted pattern\": \"Motif de bande de roulement du pneu posé\",\r\n \"Removed make\": \"Marque du pneu retiré\",\r\n \"Removed pattern\": \"Motif de bande de roulement du pneu retiré\",\r\n \"Removed tread depth\":\r\n \"Épaisseur de la bande de roulement du pneu retiré\",\r\n \"Save for later or cancel\": \"Sauvegarder pour plus tard ou annuler\",\r\n \"Allocated jobs\": \"Emplois alloués\",\r\n \"All Depots\": \"Tous les dépôts\",\r\n \"All Customers\": \"Tous les clients\",\r\n \"Job Details\": \"Détails de l'emploi\",\r\n \"Job Management\": \"Gestion des emplois\",\r\n Vehicle: \"Véhicule\",\r\n Client: \"Client\",\r\n Photos: \"Photos\",\r\n \"Job Cancelled\": \"Emploi annulé\",\r\n \"Return to jobs\": \"Retour aux emplois\",\r\n \"Vehicle Registration\": \"Enregistrement du véhicule\",\r\n \"Job Date\": \"Date de l'emploi\",\r\n \"Job Summary\": \"Résumé du travail\",\r\n \"Contact Information\": \"Coordonnées\",\r\n \"Driver Name\": \"Nom du conducteur\",\r\n \"Driver Number\": \"Numéro du conducteur\",\r\n \"Tire Size\": \"Dimensions des pneus\",\r\n Make: \"Fabrication\",\r\n Pattern: \"Dessin\",\r\n \"Removal Reason\": \"Motif du retrait\",\r\n Timing: \"Heure\",\r\n Arrived: \"Arrivé\",\r\n \"Work Complete\": \"Travail terminé\",\r\n \"Returned Home\": \"Retour à la maison\",\r\n \"Work Instructions\": \"Instructions de travail\",\r\n \"Attending Depot\": \"Prestataire de service\",\r\n STEER: \"Direction\",\r\n DRIVE: \"Entraînement\",\r\n TRAILER: \"Roulement libre\",\r\n \"Blow out\": \"Éclatement\",\r\n \"BO Blow Out\": \"Éclatement\",\r\n \"Cut to cords\": \"Cordes visibles\",\r\n \"CTC Cut To Cords\": \"Cordes visibles\",\r\n \"Flat spot\": \"Usure par aplatissement\",\r\n \"FS Flat Spot\": \"Usure par aplatissement\",\r\n \"Run flat\": \"Roulage à plat\",\r\n \"RF Run Flat\": \"Roulage à plat\",\r\n \"Sidewall damage\": \"Dégradation des flancs\",\r\n \"SD Sidewall Damage\": \"Dégradation des flancs\",\r\n \"Tread damage\": \"Dégradation de la bande de roulement\",\r\n \"TD Tread Damage\": \"Dégradation de la bande de roulement\",\r\n Puncture: \"Crevaison\",\r\n \"PC Puncture\": \"Crevaison\",\r\n \"Upload Photos\": \"Télécharger des photos\",\r\n Confirm: \"Confirmer\",\r\n ASAP: \"Dès que possible\",\r\n Submit: \"Soumettre\",\r\n \"Select Availability\": \"Sélectionner la disponibilité\",\r\n \"Available All Day\": \"Disponible toute la journée\",\r\n \"Pick Availability\": \"Choisir la disponibilité\",\r\n \"Next Day\": \"Jour suivant\",\r\n \"Previous Day\": \"Jour précédent\",\r\n Repair: \"Réparation\",\r\n \"Pressure check\": \"Contrôle de la pression\",\r\n Retorque: \"Resserrer\",\r\n \"Turn on rim\": \"Tourner sur la jante\",\r\n Rebalance: \"Rééquilibrage\",\r\n Regroove: \"Recanneler\",\r\n \"Wheel alignment\": \"Parallélisme des roues\",\r\n Mismatch: \"Asymétrie\",\r\n \"Uneven wear\": \"Usure irrégulière\",\r\n Worn: \"Usé\",\r\n \"Wrong speed/load rating\": \"Mauvaise gamme de vitesse/de charge\",\r\n \"Attached Vehicle\": \"Véhicule attaché\",\r\n Timings: \"Le Minutage\",\r\n \"Close Out Instructions\": \"Instructions de clôture\",\r\n \"Return to Menu\": \"Retourner au menu\",\r\n \"No Photos Uploaded\": \"Aucune photo téléchargée\",\r\n \"Add Photo\": \"Ajouter une photo\",\r\n \"En Route Time\": \"Temps en route\",\r\n \"Time Arrived\": \"Heure d'arrivée\",\r\n \"Failure description\": \"Description de l'échec\",\r\n \"Wheel Security\": \"Sécurité des roues\",\r\n \"Wheel(s) Removed?\": \"Roue(s) retirée(s)?\",\r\n \"Please Select ...\": \"Veuillez sélectionner ...\",\r\n \"Caller Number\": \"Numéro de l’appelant\",\r\n \"Torque Setting\": \"Réglage du couple\",\r\n \"Wrench Number\": \"Numéro de la clé\",\r\n \"Retorque Carried Out?\": \"Resserrage effectué?\",\r\n \"Info Left With Customer\": \"Renseignements donnés au client\",\r\n \"Torque Tag\": \"Étiquette de couple\",\r\n \"Written on jobsheet\": \"Écrit sur la fiche de travail\",\r\n \"Van / Car\": \"Camionnette / Voiture\",\r\n \"Tag Number\": \"Numéro d’étiquette\",\r\n LIFT: \"Essieu relevable\",\r\n \"DOT Not Visible\": \"DOT non visible\",\r\n \"Out Of Date\": \"Date dépassée\",\r\n Twinning: \"Jumelage\",\r\n \"Reason for cancellation\": \"Raison pour l'annulation\",\r\n \"Broken down\": \"En panne\",\r\n \"Stuck in traffic\": \"Coincé dans les embouteillages\",\r\n \"Stuck attending other job\": \"Coincé à un autre travail\",\r\n \"Incorrect tyre taken\": \"Mauvais pneu pris\",\r\n \"Too busy with other jobs\": \"Trop occupé avec d'autres pannes\",\r\n \"Your jobs only\": \"Vos emplois uniquement\",\r\n Husbandries: \"Réparation\",\r\n \"Get summary PDF\": \"Get summary PDF\",\r\n },\r\n },\r\n es: {\r\n translation: {\r\n Username: \"Nombre de usuario\",\r\n Password: \"Contraseña\",\r\n Country: \"País\",\r\n \"Sign in\": \"Iniciar sesión\",\r\n Cancel: \"Cancelar\",\r\n Search: \"Buscar\",\r\n \"Having trouble signing in?\": \"¿Tiene problemas para iniciar sesión?\",\r\n \"Please contact us for assistance.\":\r\n \"Póngase en contacto con nosotros para obtener ayuda.\",\r\n \"You must provide a username.\": \"Debes proporcionar un nombre de usuario\",\r\n \"You must provide a password.\": \"Debes proporcionar una contraseña\",\r\n \"You must select a country.\": \"Debe seleccionar un país.\",\r\n \"Log breakdown\": \"Iniciando una nueva solicitud de servicio\",\r\n \"Recent jobs\": \"Trabajos recientes\",\r\n \"Search jobs\": \"Buscar trabajos\",\r\n \"Job Search\": \"Búsqueda de trabajos\",\r\n \"User guide\": \"Guía de usuario\",\r\n \"Call us\": \"Llámanos\",\r\n \"If you require assistance, please click the button to phone us.\":\r\n \"Si necesita ayuda, haga clic en el botón para llamarnos por teléfono.\",\r\n \"If you require assistance, please select your country to phone us.\":\r\n \"Seleccione su país para ponerse en contacto con nosotros.\",\r\n \"Purchase Order/Defect Number\": \"Número de orden de compra/falla\",\r\n \"Additional Information\": \"Información adicional\",\r\n \"Maximum length is {{len}} characters.\":\r\n \"La longitud máxima es de {{len}} caracteres.\",\r\n \"Minimum length is {{len}} characters.\":\r\n \"La longitud mínima es de {{len}} caracteres.\",\r\n \"Your depot is required for this contract.\":\r\n \"Your depot is required for this contract.\",\r\n Mileage: \"Kilometraje\",\r\n \"Missing search query.\": \"Falta la consulta de búsqueda.\",\r\n \"TSU Case Number\":\r\n \"Número de caso de la unidad de asistencia de neumáticos\",\r\n \"{{length}} jobs found.\": \"Se han encontrado {{length}} trabajos.\",\r\n Notifications: \"Notificaciones\",\r\n \"Your full name\": \"Su nombre completo\",\r\n \"Your telephone number\": \"Su número de teléfono\",\r\n \"Who is with the vehicle?\": \"¿Quién se encuentra con el vehículo?\",\r\n You: \"Usted\",\r\n \"Someone else\": \"Otra persona\",\r\n \"Their full name\": \"Nombre completo de la persona\",\r\n \"Their telephone number\": \"Número de teléfono de la persona\",\r\n Continue: \"Continuar\",\r\n Skip: \"Omitir\",\r\n \"Vehicle / unit number\": \"Numero de vehículo/unidad\",\r\n \"This vehicle is suspended. By continuing, you accept any costs associated with this work.\":\r\n \"Este vehículo está suspendido. Si decide continuar, acepta todos los costos asociados con este trabajo.\",\r\n \"Getting your current location...\": \"Obteniendo su ubicación actual...\",\r\n \"Your location could not be automatically retrieved at this time.\":\r\n \"No se pudo recuperar automáticamente su ubicación en este momento.\",\r\n \"Please ensure that location services are enabled and permissions have been granted.\":\r\n \"Asegúrese de que los servicios de ubicación estén habilitados y de que se hayan otorgado los permisos.\",\r\n Retry: \"Volver a intentar\",\r\n \"Enter location\": \"Introducir ubicación\",\r\n \"Is this location correct?\": \"¿Es correcta esta ubicación?\",\r\n Yes: \"Sí\",\r\n \"No - enter location\": \"No; introducir ubicación\",\r\n Location: \"Ubicación\",\r\n \"Caller Details\": \"Datos de la persona que llama\",\r\n \"Caller Name\": \"Nombre de la persona que llama\",\r\n \"Caller No\": \"N.º de la persona que llama\",\r\n \"Contact No\": \"N.º de contacto\",\r\n \"End User\": \"Usuario final\",\r\n \"Job History\": \"Historial de trabajos\",\r\n \"Time Allocated\": \"Tiempo asignado\",\r\n \"Chosen Time\": \"Hora elegida\",\r\n \"Attending SP\": \"Concesionario de reparación\",\r\n ETA: \"Hora de llegada estimada\",\r\n \"On Scene Time\": \"Hora de llegada al lugar\",\r\n \"Tire Details\": \"Detalles de los neumáticos\",\r\n Size: \"Tamaño\",\r\n \"Wheel Position\": \"Posición de las ruedas\",\r\n \"Husbandry Requests\": \"Solicitudes de reparación\",\r\n Images: \"Imágenes\",\r\n \"has been logged and we will advise your ETA shortly.\":\r\n \"Su caso se ha registrado y le informaremos la hora de llegada estimada en breve\",\r\n \"Please check your notifications for updates.\":\r\n \"Revise las notificaciones para ver si hay actualizaciones\",\r\n \"Job Number\": \"Número de Trabajo\",\r\n \"Field is required.\": \"El campo es obligatorio\",\r\n \"Replacement tire\": \"Neumático de repuesto\",\r\n \"Other work\": \"Otro trabajo\",\r\n Damage: \"Daño\",\r\n Other: \"Otro\",\r\n \"Specify damage\": \"Especifique el daño\",\r\n \"Specify reason\": \"Especificar el motivo\",\r\n \"Specify work\": \"Especificar el trabajo\",\r\n \"Work required\": \"Trabajo necesario\",\r\n \"Removal reason\": \"Motivo del desmontaje\",\r\n \"Tire size\": \"Tamaño de los neumáticos\",\r\n \"Tyre Size\": \"Tamaño de los neumáticos\",\r\n \"Change configuration\": \"Cambiar la configuración\",\r\n \"There is existing work on this position.\":\r\n \"Ya hay trabajo en esta posición.\",\r\n \"Add work\": \"Agregar trabajo\",\r\n \"Change existing work\": \"Cambiar el trabajo existente\",\r\n \"Remove existing work\": \"Eliminar el trabajo existente\",\r\n \"Return to configuration\": \"Volver a la configuración\",\r\n \"Vehicle type\": \"Tipo de vehículo\",\r\n \"Number of axles\": \"Cantidad de ejes\",\r\n \"Number of drive axles\": \"Cantidad de ejes motrices\",\r\n \"Axles twinned\": \"Ejes gemelos\",\r\n \"Is the vehicle powered?\": \"¿Está el vehículo encendido?\",\r\n No: \"No\",\r\n DisplayDate: \"{{date, P p}}\",\r\n \"Does the vehicle have a powered/driven axle?\":\r\n \"¿Tiene el vehículo un eje accionado/conducido?\",\r\n \"If you are submitting multiple jobs at the same location, please note this above.\":\r\n \"Si presentará varios trabajos en el mismo lugar, indíquelo arriba.\",\r\n \"Attached vehicle\": \"Vehículo acoplado\",\r\n Customer: \"Cliente\",\r\n \"Please ensure you are in a safe location before you continue.\":\r\n \"Asegúrese de que se encuentra en un lugar seguro antes de continuar.\",\r\n Errors: \"Errores\",\r\n Error: \"Error\",\r\n \"A serious error has been encountered whilst processing your breakdown. Please contact us for further assistance.\":\r\n \"Se ha producido un error grave al procesar su avería. Póngase en contacto con nosotros para obtener más ayuda.\",\r\n \"Mileage is required for this contract. You may continue if this is unavailable.\":\r\n \"Es necesario conocer el kilometraje para este contrato. Puede continuar si esto no está disponible.\",\r\n \"security-auth-incorrect-details\":\r\n \"Ha proporcionado un nombre de usuario, una contraseña o un país incorrectos.\",\r\n \"security-auth-account-disabled\":\r\n \"Su cuenta se ha desactivado. Póngase en contacto con nosotros para obtener ayuda.\",\r\n \"security-auth-account-locked\":\r\n \"Su cuenta se ha bloqueado temporalmente. Vuelva a intentarlo más tarde.\",\r\n \"security-auth-account-not-360-smart-enabled\":\r\n \"Su cuenta no tiene acceso a 360\\u{B0}Smart. Póngase en contacto con nosotros para obtener ayuda.\",\r\n \"breakdown-purchase-order-defect-number-failed-validation\":\r\n \"Ha presentado un número de orden de compra/falla no válido. Vuelva a intentarlo o póngase en contacto con nosotros para obtener ayuda.\",\r\n \"Failed to load required data. Please reload 360\\u{B0}Smart and try again.\":\r\n \"No se han podido cargar los datos necesarios. Vuelva a cargar 360\\u{B0}Smart e inténtelo nuevamente.\",\r\n \"Login failed. Please try again.\":\r\n \"Error de inicio de sesión. Vuelva a intentarlo.\",\r\n AVAILABILITY: \"{{time, HH:mm}}\",\r\n AVAILABILITY_WITH_DATE: \"{{time, HH:mm (P)}}\",\r\n AVAILABILITY_DATE: \"{{date, P}}\",\r\n \"Breakdown summary\": \"Resumen de la avería\",\r\n \"Work requested\": \"Trabajo solicitado\",\r\n \"Additional information\": \"Información adicional\",\r\n Availability: \"Disponibilidad\",\r\n \"Caller details\": \"Datos de la persona que llama\",\r\n \"Contact name\": \"Nombre del contacto\",\r\n \"Contact telephone\": \"Teléfono de contacto\",\r\n \"Driver name\": \"Nombre del conductor\",\r\n \"Driver telephone\": \"Teléfono del conductor\",\r\n \"Job overview\": \"Descripción general del trabajo\",\r\n \"TSU number\": \"Número de la unidad de asistencia de neumáticos\",\r\n \"Purchase order / defect number\": \"Número de orden de compra/falla\",\r\n \"Location type\": \"Tipo de locación\",\r\n Edit: \"Editar\",\r\n Coordinates: \"Coordenadas\",\r\n Position: \"Posición\",\r\n Husbandry: \"Gestión\",\r\n \"Hide images\": \"Ocultar imágenes\",\r\n \"Show images\": \"Mostrar imágenes\",\r\n View: \"Ver\",\r\n \"You have no recent jobs.\": \"No tienes trabajos recientes\",\r\n \"You must complete one field.\": \"Debe completar un campo.\",\r\n \"has been partially logged. We may be in contact shortly to confirm details.\":\r\n \"Su caso se ha registrado parcialmente. Es posible que nos pongamos en contacto con usted en breve para confirmar los detalles.\",\r\n Home: \"Inicio\",\r\n \"You must add work to at least one position.\":\r\n \"Debe agregar trabajo al menos a una posición.\",\r\n \"Warning: You will lose existing work on positions if you change the configuration.\":\r\n \"Advertencia: Perderá el trabajo existente en las posiciones si cambia la configuración.\",\r\n Roadside: \"En carretera\",\r\n \"Servicing dealer\": \"Concesionario de reparación\",\r\n \"At site/yard\": \"En el sitio/depósito\",\r\n NOTIFICATION_NOFORMAT:\r\n \"No se han podido mostrar los datos de la notificación.\",\r\n NOTIFICATION_ALLOCATED_V1:\r\n \"Su trabajo se ha asignado a {{serviceProvider}} y la hora de llegada estimada es {{eta, P p}}.\",\r\n NOTIFICATION_REVISEDETA_V1:\r\n \"Su proveedor de servicios se ha demorado y la nueva hora de llegada estimada es {{revisedEta, P p}}.\",\r\n NOTIFICATION_ENROUTE_V1:\r\n \"Su proveedor de servicios informó que estaban en camino en {{enRoute, P p}}.\",\r\n NOTIFICATION_ONSCENE_V1:\r\n \"Su proveedor de servicios informó que estaban en el lugar en {{onScene, P p}}.\",\r\n NOTIFICATION_COMPLETED_V1:\r\n \"Su proveedor de servicios informó que el trabajo se completó en {{completed, P p}}.\",\r\n NOTIFICATION_REALLOCATED_V1:\r\n \"Su trabajo se ha reasignado a {{serviceProvider}} y la hora de llegada estimada es {{eta, P p}}.\",\r\n \"You have no new notifications.\": \"No tienes nueva notificaciones.\",\r\n \"Your depot\": \"Su depósito\",\r\n \"Contact depot\": \"Póngase en contacto con el depósito\",\r\n \"You have selected position {{position}}.\":\r\n \"Ha seleccionado la posición {{position}}.\",\r\n \"The selected tire size does not match our history for this vehicle.\":\r\n \"El tamaño de neumático seleccionado no coincide con nuestro historial de este vehículo.\",\r\n Back: \"Volver\",\r\n \"Search...\": \"Buscar...\",\r\n \"No configurations match your selected criteria. Please check your criteria and contact us if a matching configuration cannot be found.\":\r\n \"No hay configuraciones que coincidan con los criterios seleccionados. Revise los criterios y póngase en contacto con nosotros si no encuentra una configuración que coincida.\",\r\n \"En Route\": \"En camino\",\r\n Completed: \"Completado\",\r\n Documents: \"Documentos\",\r\n DOCUMENT_EFFECTIVE: \"En vigencia {{effective, P}}\",\r\n DOCUMENT_EXPIRY: \"Caducidad {{expiry, P}}\",\r\n \"Customer documents\": \"Documentos del cliente\",\r\n \"You are limited to only {{count}} photos.\":\r\n \"Solo puede cargar hasta {{count}} fotos.\",\r\n \"Image {{index}}\": \"Imagen {{index}}\",\r\n \"Date must not be in the future.\":\r\n \"La fecha no debe ser una fecha futura.\",\r\n \"Return to job\": \"Volver al trabajo\",\r\n \"Husbandry requested\": \"Reparación solicitada\",\r\n \"Tire(s) requested\": \"Llanta(s) solicitadas\",\r\n \"No husbandry requested\": \"No se ha solicitado una reparación\",\r\n \"No tires requested\": \"No se han solicitado neumáticos\",\r\n \"Privacy statement\": \"Declaración de privacidad\",\r\n \"Terms of use\": \"Condiciones de uso\",\r\n \"Please be aware that submitting high quality images may result in significant data usage. Methods for reducing image quality will vary by device so please check with your device manufacturer.\":\r\n \"Tenga en cuenta que el envío de imágenes de alta calidad puede demandar un uso considerable de datos. Los métodos para reducir la calidad de las imágenes varían según el dispositivo, por lo que le recomendamos que consulte al fabricante de su dispositivo.\",\r\n \"This customer requires that a photo be taken for each position that requires work.\":\r\n \"Este cliente requiere que se tome una foto de cada posición en la que se requiera trabajo.\",\r\n \"The following positions could not be matched to a photo. Please ensure that a photo has been provided before continuing.\":\r\n \"Las siguientes posiciones no coincidieron con ninguna foto. Asegúrese de que se haya proporcionado una foto antes de continuar.\",\r\n \"Return to photos\": \"Volver a las fotos\",\r\n \"Coming soon.\": \"Próximamente\",\r\n \"Your session has expired. Please log in to continue.\":\r\n \"Su sesión ha caducado. Inicie sesión para continuar.\",\r\n \"If you cancel the breakdown, all progress will be lost and the breakdown will not be received by our agents.\":\r\n \"Si cancela la avería, se perderá todo el progreso, y nuestros agentes no recibirán la avería.\",\r\n \"If you save the breakdown for later, you will have 24 hours to provide the remaining details of the breakdown and submit it to our agents.\":\r\n \"Si guarda la avería para más tarde, tendrá 24 horas para proporcionar el resto de los detalles de la avería y enviarla a nuestros agentes.\",\r\n \"Cancel breakdown\": \"Cancelar avería\",\r\n \"Save breakdown for later\": \"Guardar avería para más tarde\",\r\n \"Return to breakdown\": \"Volver a la avería\",\r\n \"Continue breakdown\": \"Continuar con la avería\",\r\n \"You have no breakdowns in progress.\": \"No tiene averías en curso.\",\r\n \"Breakdowns in progress\": \"Averías en curso\",\r\n \"Please provide the following information for the {{position}} position.\":\r\n \"Proporcione la siguiente información para la posición {{position}}.\",\r\n \"Fitted make\": \"Marca ajustada\",\r\n \"Fitted pattern\": \"Dibujo ajustado\",\r\n \"Removed make\": \"Marca eliminada\",\r\n \"Removed pattern\": \"Dibujo eliminado\",\r\n \"Removed tread depth\": \"Profundidad de la banda de rodadura eliminada\",\r\n \"Save for later or cancel\": \"Guardar para más tarde o cancelar\",\r\n STEER: \"Dirigir\",\r\n DRIVE: \"Conducir\",\r\n TRAILER: \"Rodadura libre\",\r\n \"Blow out\": \"Explosión del neumático\",\r\n \"BO Blow Out\": \"Explosión del neumático\",\r\n \"Cut to cords\": \"Cables cortados\",\r\n \"CTC Cut To Cords\": \"Cables cortados\",\r\n \"Flat spot\": \"Superficie plana\",\r\n \"FS Flat Spot\": \"Superficie plana\",\r\n \"Run flat\": \"Run flat\",\r\n \"Sidewall damage\": \"Daños en los flancos\",\r\n \"SD Sidewall Damage\": \"Daños en los flancos\",\r\n \"Tread damage\": \"Daños en las bandas de rodadura\",\r\n \"TD Tread Damage\": \"Daños en las bandas de rodadura\",\r\n Puncture: \"Pinchadura\",\r\n \"PC Puncture\": \"Pinchadura\",\r\n \"Upload Photos\": \"Cargar fotos\",\r\n Confirm: \"Confirmar\",\r\n ASAP: \"Lo antes posible\",\r\n Submit: \"Enviar\",\r\n \"Select Availability\": \"Seleccionar disponibilidad\",\r\n \"Available All Day\": \"Disponible todo el día\",\r\n \"Pick Availability\": \"Escoger disponibilidad\",\r\n \"Next Day\": \"Día siguiente\",\r\n \"Previous Day\": \"Día anterior\",\r\n Repair: \"Reparación\",\r\n \"Pressure check\": \"Control de presión\",\r\n Retorque: \"Reajuste\",\r\n \"Turn on rim\": \"Rotación de llantas\",\r\n Rebalance: \"Rebalanceo\",\r\n Regroove: \"Reesculturado\",\r\n \"Wheel alignment\": \"Alineación de ruedas\",\r\n Mismatch: \"Desajuste\",\r\n \"Uneven wear\": \"Desgaste irregular\",\r\n Worn: \"Desgastado\",\r\n \"Allocated jobs\": \"Trabajos asignados\",\r\n \"Wrong speed/load rating\": \"Rango de velocidad/carga incorrecto\",\r\n \"All Depots\": \"Todos los depósitos\",\r\n \"All Customers\": \"Todos los clientes\",\r\n \"Your jobs only\": \"Solo sus trabajos\",\r\n Vehicle: \"Vehículo\",\r\n \"Attached Vehicle\": \"Vehículo acoplado\",\r\n \"Location Type\": \"Tipo de ubicación\",\r\n \"Job Management\": \"Gestión de trabajos\",\r\n \"Job Details\": \"Detalles del trabajo\",\r\n Photos: \"Fotos\",\r\n \"Job Cancelled\": \"Trabajo cancelado\",\r\n \"Return to jobs\": \"Volver a los trabajos\",\r\n \"Vehicle Registration\": \"Matrícula del vehículo\",\r\n \"Job Date\": \"Fecha del trabajo\",\r\n \"Contact Information\": \"Información de contacto\",\r\n \"Driver Name\": \"Nombre del conductor\",\r\n \"Driver Number\": \"Número del conductor\",\r\n \"Tire Size\": \"Tamaño de los neumáticos\",\r\n Make: \"Marca\",\r\n Pattern: \"Dibujo\",\r\n \"Removal Reason\": \"Motivo del desmontaje\",\r\n Timings: \"Sincronización\",\r\n Arrived: \"Llegada\",\r\n \"Work Complete\": \"Trabajo completado\",\r\n \"Returned Home\": \"Regreso a casa\",\r\n \"Work Instructions\": \"Instrucciones de trabajo\",\r\n \"Close Out Instructions\": \"Instrucciones de cierre\",\r\n \"Return to Menu\": \"Volver al menú\",\r\n \"No Photos Uploaded\": \"No hay fotos cargadas\",\r\n \"Add Photo\": \"Agregar foto\",\r\n \"En Route Time\": \"Tiempo en camino\",\r\n \"Time Arrived\": \"Hora de llegada\",\r\n \"Failure description\": \"Descripción de la falla\",\r\n \"Attending depot\": \"Ubicación del concesionario de reparación\",\r\n \"Wheel Security\": \"Seguridad del Aro\",\r\n \"Wheel(s) Removed?\": \"¿Desinstaló los aros del eje?\",\r\n \"Please Select ...\": \"Seleccione una opción\",\r\n \"Job Summary\": \"Resumen de la Orden de Trabajo\",\r\n \"Caller Number\": \"Número de Teléfono del Cliente\",\r\n \"Torque Setting\": \"Configuración de la llave de toque\",\r\n \"Wrench Number\": \"Número de llave de torque\",\r\n \"Retorque Carried Out?\":\r\n \"¿Se hizo el segundo torque en base a la recomendación del fabricante?\",\r\n \"Info Left With Customer\": \"Información entregada al cliente\",\r\n \"Torque Tag\": \"Etiqueta del Torque\",\r\n \"Written on jobsheet\": \"Escrito en la Orden de Trabajo\",\r\n \"Van / Car\": \"Van / Automóbil\",\r\n \"Tag Number\": \"Número de Etiqueta\",\r\n LIFT: \"Eje de Elevación\",\r\n \"DOT Not Visible\": \"DOT no visible\",\r\n \"Out Of Date\": \"DOT Expirado\",\r\n Twinning: \"Emparejamiento\",\r\n Husbandries: \"Reparacióne\",\r\n Expires: \"Caduca\",\r\n Description: \"Descripción\",\r\n \"Get summary PDF\": \"Get summary PDF\",\r\n },\r\n },\r\n};\r\n\r\nexport default resources;\r\n","import i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport resources from \"./resources\";\r\nimport { format as fnsFormat } from \"date-fns\";\r\nimport { enGB, enUS, frCA, es } from \"date-fns/locale\";\r\n\r\nvar locale = enGB;\r\n\r\nconst setLocale = (countryId: number, languageId: number) => {\r\n switch (languageId) {\r\n case 1:\r\n locale = countryId === 2 ? enUS : enGB;\r\n i18n.changeLanguage(\"en\");\r\n break;\r\n case 2:\r\n locale = es;\r\n i18n.changeLanguage(\"es\");\r\n break;\r\n case 3:\r\n locale = frCA;\r\n i18n.changeLanguage(\"fr\");\r\n break;\r\n default:\r\n locale = enGB;\r\n i18n.changeLanguage(\"en\");\r\n break;\r\n }\r\n};\r\n\r\ni18n.use(initReactI18next).init({\r\n resources,\r\n lng: \"en\",\r\n fallbackLng: \"en\",\r\n keySeparator: false,\r\n interpolation: {\r\n escapeValue: false,\r\n format: function (value: any, format?: string, lng?: string) {\r\n if (format === \"uppercase\") return value.toUpperCase();\r\n if (value instanceof Date && format !== undefined)\r\n return fnsFormat(value, format, { locale });\r\n\r\n return value;\r\n },\r\n },\r\n});\r\n\r\nexport { setLocale };\r\nexport default i18n;\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: any) {\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}/sw.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: string, config: any) {\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\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: string, config: any) {\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, { useState } from \"react\";\r\nimport { unstable_batchedUpdates } from \"react-dom\";\r\nimport { Reset } from \"styled-reset\";\r\nimport * as tkn from \"../utils/token\";\r\nimport Content from \"./content/Content\";\r\nimport LoggedInContent from \"./content/LoggedInContent\";\r\nimport GlobalStyle from \"./GlobalStyle\";\r\nimport S from \"./styles\";\r\nimport { setLocale } from \"../i18n/i18n\";\r\nimport { UserContext } from \"../contexts/UserContext\";\r\nimport { ApiContext } from \"../contexts/ApiContext\";\r\nimport { User } from \"360\";\r\nimport GeneralErrors from \"./general-errors/GeneralErrors\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { setGlobalToken } from \"../api/Api\";\r\n\r\nconst parseUser = (token: string): User => {\r\n var countryId = tkn.getCountryId(token);\r\n var languageId = tkn.getLanguageId(token);\r\n var callCentreContactNumber = tkn.getPhoneNumber(token);\r\n var typeId = tkn.getUserTypeId(token);\r\n var id = tkn.getUserId(token);\r\n return {\r\n id,\r\n typeId,\r\n callCentreContactNumber,\r\n countryId,\r\n languageId,\r\n };\r\n};\r\n\r\nconst App = () => {\r\n const [user, setUser] = useState(null);\r\n const [warnUnauthenticated, setWarnUnauthenticated] = useState(\r\n false\r\n );\r\n const { t } = useTranslation();\r\n\r\n const handleLogout = () => setUser(null);\r\n\r\n const handleLogin = (token: string) => {\r\n const user = parseUser(token);\r\n setGlobalToken(token);\r\n unstable_batchedUpdates(() => {\r\n setLocale(user.countryId, user.languageId);\r\n setUser(user);\r\n });\r\n };\r\n\r\n const handleUnauthenticated = () => setWarnUnauthenticated(true);\r\n\r\n const handleUnauthenticatedWarningClose = () => {\r\n setWarnUnauthenticated(false);\r\n handleLogout();\r\n };\r\n\r\n if (warnUnauthenticated) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (user) {\r\n return (\r\n \r\n \r\n \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\nconst onNetworkError = () => {\r\n window.location.replace(\"offline.html\");\r\n};\r\n\r\nconst Wrapper = ({\r\n children,\r\n onUnauthenticated,\r\n}: {\r\n children: React.ReactNode;\r\n onUnauthenticated?: () => void;\r\n}) => (\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n);\r\n\r\nexport default App;\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./components/App\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\nimport \"./i18n/i18n\";\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.register({});\r\n"],"sourceRoot":""}