{"version":3,"sources":["../node_modules/graphql-language-service-utils/esm sync /^.*/.js$","../node_modules/graphql-language-service-utils/esm sync /^.*/.json$","../node_modules/graphql-language-service-utils/esm lazy /^.*/.js$/ groupOptions: {} namespace object","../node_modules/graphql-language-service-utils/esm lazy /^.*/.json$/ groupOptions: {} namespace object","polyfill.js","GraphQLClient.jsx","views/Pages/Graphiql/Graphiql.js","App.jsx","utils/store.js","serviceWorker.js","ServiceWorkerWrapper.jsx","index.jsx","views/FieldWork/Sync.js","views/SystemSettings/StaticFieldLists.js","views/FieldWork/ErrorBoundary.js","views/FieldWork/Construction.js","views/BuilderApprovals/BuilderSlug.jsx","views/BuilderApprovals/BuilderUtils.js","utils/utilFunctions.js","views/BuilderApprovals/DraftBuilderApprovalMessage.js","views/FieldWork/Capture2.js","components/Loading/Loading.jsx","components/Files/FileAttachments.jsx","views/FieldWork/NewPotentialJob.js","views/FieldWork/TaskHistory.js","views/FieldWork/DataHooks.js","views/FieldWork/FieldWorkList.js","views/FieldWork/FieldWork.js","views/FieldWork/Capture.js","views/FieldWork/Photos.js","views/FieldWork/Attachments.js","routes.js","auth/AuthProvider.jsx","utils/db.js","components/Version.jsx","assets/img/placeholder.png"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","webpackEmptyContext","webpackAsyncContext","Promise","then","webpackEmptyAsyncContext","window","CustomEvent","event","params","bubbles","cancelable","detail","undefined","evt","document","createEvent","initCustomEvent","prototype","Event","GET_ME","gql","ClientProvider","children","auth","useAuth","headers","useRef","client","ApolloClient","link","ApolloLink","from","onError","graphQLErrors","networkError","forEach","message","locations","path","console","log","statusCode","error","HttpLink","uri","current","credentials","request","operation","setContext","authorization","Authorization","cache","InMemoryCache","addTypename","defaultOptions","query","fetchPolicy","useEffect","token","isImpersonating","loading","result","me","data","claims","c","claimValue","updateMe","catch","err","setMeFailed","Graphiql","props","useState","setLoading","style","display","height","fetcher","graphQLParams","fetch","location","origin","method","body","JSON","stringify","response","json","graphQLFetcher","DefaultLayout","React","lazy","NoChrome","Login","Page404","Page500","Builders","appHeight","documentElement","setProperty","innerHeight","addEventListener","LoginFailed","t","setTimeout","clearTimeout","Loading","margin","user","email","Version","className","onClick","reload","signout","App","Suspense","fallback","name","render","routes","route","idx","hasOneClaim","layout","key","exact","component","meFailed","position","initialiseState","resetGlobal","setGlobal","hubConnection","subscriptions","isLocalhost","Boolean","hostname","match","register","config","navigator","URL","process","some","pathname","startsWith","info","serviceWorker","getRegistrations","registrations","length","registration","unregister","sessionStorage","getItem","setItem","swUrl","status","get","indexOf","ready","registerValidSW","checkValidServiceWorker","onupdatefound","installingWorker","installing","onstatechange","state","controller","onUpdate","onSuccess","ServiceWorkerWrapper","useGlobal","showReload","setShowReload","waitingWorker","setWaitingWorker","onSWUpdate","waiting","Modal","isOpen","ModalHeader","ModalBody","ModalFooter","Button","color","postMessage","type","onerror","url","line","column","messageElement","createElement","fontSize","padding","textAlign","backgroundColor","border","marginBottom","preElement","textContent","stack","mailtoLink","href","encodeURIComponent","appendChild","closeButton","right","bottom","textDecoration","preventDefault","remove","bodyElement","insertBefore","firstChild","ReactDOM","ErrorBoundary","getElementById","Sync","hidden","constructionId","progress","openPhotoHistory","setOpenPhotoHistory","syncFirst","useCallback","a","db","photos","limit","toArray","photo","delete","photoHistory","update","isCleanedUp","lastUpdated","Date","toISOString","split","redoGetUrl","previousGetUrl","localStorage","previousGetUrlMs","parseInt","isNaN","getTime","getUrl","toString","getPresignedUploadParams","size","tags","comments","description","potentialJobId","uploadUrl","getUploadParams","attachmentId","attachment","attachmentUrl","getUploadParamsError","uploadAttachment","blob","uploadAttachmentError","imageData","imageBlob","dataURI","byteString","atob","mimeString","ab","ArrayBuffer","ia","Uint8Array","i","charCodeAt","Blob","dataURItoBlob","contentType","getToken","sizeBytes","res","useLiveQuery","sort","b","interval","setInterval","clearInterval","formatDateTime","dateTime","moment","utc","tz","guess","format","oneHourAgo","subtract","filter","p","item","index","find","width","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","marginLeft","overflow","createdDate","join","constructionFields","fieldName","displayName","isDate","bookingEditable","isOptionalFieldWorkTask","isOptionalFieldWorkList","isUser","isBool","jobDelegations","taskFields","isDateTime","boqFields","bomFields","claimFields","expenseFields","paymentItemFields","invoiceFields","commentFields","taskUserFields","groupFields","getFields","table","errorInfo","hasError","this","setState","cursor","componentStack","Component","CONSTRUCTION_ATTRIBUTES","GET_CONSTRUCTION","GET_FIELD_ITEMS","GET_FIELD_WORK_TASK_SETTINGS","ADD_BOQ_AND_ITEM","UPDATE_SCHEDULE_ITEM_COMPLETION","UPDATE_TASKACCEPTED","UPDATE_TASKDECLINED","UPDATE_TASKUSERONSITE","UPDATE_TASKUSEROFFSITE","UPDATE_TASKUSERCOMPLETE","UPDATE_TASKUSER_COMMENTS","UPDATE_TASKSUBMITTED","UPDATE_CONFIRMQTY","UPDATE_TICKETOFWORK","UPDATE_JOB_STATUS","UPDATE_FIELD_COMMENT","DELETE_FIELD_COMMENT","UPDATE_DEVELOPER_AND_SITE_CONTACT","MapLink","thisaddress","directionsUrl","target","rel","ConstructionField","label","value","icon","onLabelClick","isSmallScreen","useMediaQuery","cursorStyle","phone","replace","ConstructionSchedule","construction","schedule","fieldItems","onAddItem","onChangeItem","handleTaskAccepted","handleTaskDeclined","handleTaskUserOnSite","handleTaskUserComplete","handleTaskSubmitted","handleTaskUserConfirmQty","handleTaskUserOffSite","handleTaskUserComments","handleResetTicketOfWork","handleUpdateFieldComment","handleDeleteFieldComment","isSubcontractor","isFinanceOrSub","isReject","hasClaim","scheduleItems","setScheduleItems","showOnSite","setShowOnSite","showComplete","setShowComplete","taskUser","setTaskUser","taskUserComments","setTaskUserComments","confirmItemQtyOnComplete","setConfirmItemQtyOnComplete","showClaimCommentEdit","setShowClaimCommentEdit","editFieldComment","setEditFieldComment","showPartialCompleteComments","setShowPartialCompleteComments","commentsUpdated","setCommentsUpdated","showOnsiteModel","setShowOnsiteModel","handleComplete","customScheduleItems","items","x","childCode","taskItem","itemId","boqs","boqId","fieldItem","rate","unitAmount","unitOfMeasure","_taskUser","taskUsers","userId","onSiteUtc","completedDate","offSiteUtc","completedUtc","isReopened","partial","acceptedDate","declinedDate","substr","submittedDate","scheduleId","confirmItemQtys","externalJobLink","to","ConstructionScheduleItems","borderRadius","fieldComments","comment","isCommentOwner","background","boxShadow","createdUtc","tuc","formatDate","rows","onChange","backdrop","toggle","fontWeight","disabled","boqsById","setBoqsById","addItem","setAddItem","changeItem","setChangeItem","childItemsByCode","canEditItems","canConfirm","useMemo","newBoqsById","boq","assignedQty","schedules","reduce","acc","v","quantity","unassignedQty","variationQty","getComments","payment","payments","owner","resource","paymentItems","itemCode","calcTotal","completedQty","maxWidth","responsive","hover","striped","bIndex","rejectedDate","Intl","NumberFormat","currency","tabIndex","variationReason","minWidth","ticketOfWork","AddNewConstructionScheduleItem","onClose","onAdd","ChangeConstructionScheduleItem","childCodes","itemCodeOptions","setItemCodeOptions","saving","setSaving","selectedCode","setSelectedCode","newItem","setNewItem","options","htmlFor","placeholder","defaultValue","parseFloat","reason","changedValues","setChangedValues","EditPhoto","imageDetails","onImageEdit","originalTitle","title","editingTitle","setEditingTitle","setComments","lastIndex","lastIndexOf","slice","drawTitle","context","portrait","fillStyle","fillRect","font","text","trim","fillText","getPresignedUpdateParams","onclose","canvas","getContext","img","Image","crossOrigin","src","onload","drawImage","naturalWidth","naturalHeight","newSrc","toDataURL","extension","pop","onSave","LazyImg","inView","setInView","placeholderRef","observer","IntersectionObserver","entries","obs","isIntersecting","disconnect","observe","alt","ref","Construction","setTags","categories","setCategories","setConstruction","fieldTask","setFieldTask","images","setImages","nonImages","setNonImages","docTree","setDocTree","expandedRows","setExpandedRows","groups","setGroups","rejectTask","setRejectTask","setImageDetails","isStructuredAddress","setIsStructuredAddress","optionalFields","setOptionalFields","statusSettings","setStatusSettings","editJobStatus","setEditJobStatus","editDeveloperAndContact","setEditDeveloperAndContact","canEditDeveloper","setCanEditDeveloper","canEditSiteContact","setCanEditSiteContact","schedulerDisplayName","setSchedulerDisplayName","developerDisplayName","setDeveloperDisplayName","builderList","setBuilderList","isAuthed","setIsAuthed","hasScopingBonus","setHasScopingBonus","useQuery","variables","refetch","useLazyQuery","settingsQuery","systemSettings","fieldItemsQuery","useMutation","updateConstructionAddBOQAndItem","updateConstructionScheduleItemCompletion","updateConstructionTaskAccepted","updateConstructionTaskDeclined","updateTaskUserOnSite","updateTaskUserOffSite","updateTaskUserComplete","updateTaskUserConfirmQty","updateTaskUserComments","updateTaskSubmitted","resetTicketOfWork","updateJobStatus","updateFieldComment","deleteFieldComment","updateDeveloperAndSiteContact","history","useHistory","taskId","updatedConstruction","scheduleIndex","findIndex","updatedSchedule","workType","addressTypeSetting","workTypeAddressTypeData","parse","addressSetting","addressType","_optionalFields","concat","f","show","storedFields","fields","field","storedField","fieldWorkList","fieldList","_canEditDeveloper","canEdit","_canEditSiteContact","jobStatusSettings","storedStatuses","statuses","customDisplayNames","customfields","customScheduler","customDeveloper","builders","builderLookup","temp","attachments","includes","push","endsWith","isDocAttachment","_fieldTask","groupUsers","group","groupId","getDocTree","shortToast","toast","toastId","autoClose","addBoqAndItem","fieldBoqItem","updateScheduleItemCompletion","itemWithoutExtraFields","updateTicketOfWork","handleUpdateJobStatus","jobId","prevJob","handleUpdateDeveloperAndContact","developer","siteContact","siteContactPhone","fieldCommentToUpdate","fieldComment","updateData","operationName","updatedComment","prevConstruction","commentIndex","fieldCommentId","FileRow","branch","depth","doc","leftPadding","Fragment","rowId","paddingLeft","splice","toggleRowExpand","markedForDeletion","workOrder","getAddress","address","md","fieldEdit","region","financialContact","deliveryPartnerPm","scheduler","buildType","acceleratedJob","dueDate","onsiteDate","integrationDate","dbydExpiryDate","laseDate","crqDate","crqNumber","customerRef","statusName","builder","onBlur","checkIsSubcontractor","category","tag","aTags","selected","image","newImageDetails","generateBuilderSlug","phoneNumber","jobIds","potentialJobIds","normalizedPhone","allJobIds","slug","btoa","baseUrl","getBaseUrl","domainName","generateBuilderMessage","sortJobs","_jobs","postCode","safeStringCompare","suburb","streetName","streetNumber","lotNumber","unitNumber","str1","str2","localeCompare","getIsValidPhoneNumber","test","convertPhoneNumber","job","roadType","addressComponents","getAddressRange","jobs","getRange","numbers","minNumber","Math","min","maxNumber","max","getAddressComponents","range","isRange","lotNumbers","Set","unitNumbers","lotOrStreetNumber","streetNumbers","initializeSortOrder","settings","sortedSettings","sortOrder","every","protocol","port","format2decimalPlaces","Number","toFixed","docs","topLevelFiles","subFolderFiles","level","indexF","r","indexR","firstIndex","substring","getFolderTags","tagSet","tempTag","ModalFooterWithQR","selectedJobsData","requestSent","handleCloseApproval","smsURI","iosSmsURI","allUserAgentData","userAgent","isIOS","innerWidth","includeMargin","DraftBuilderApprovalMessage","handleSelectJob","hasHandleSelectJob","addressText","Capture","isPotentialJob","onPhotoTaken","potentialJobData","useParams","validFilename","setValidFilename","skip","setAddress","addressFromField","s","canvasRef","capturedImage","setCapturedImage","filename","setFileName","imageNumber","setImageNumber","geolocation","useGeoLocation","enableHighAccuracy","maximumAge","timeout","good","capture","btn","click","cameraChange","file","files","blob_url","createObjectURL","round","raw","drawDeets","saveImage","add","orderBy","last","lastId","where","below","prev","bottomTextLocationY","bottomTextLocationX","latitude","longitude","accuracy","date","toLocaleDateString","toLocaleTimeString","done","CaptureForm","readOnly","maxLength","flex","accept","top","left","FileUpload","onFileUploaded","onFileFailed","projectId","groupAccommodationId","filePaths","meta","filePath","webkitRelativePath","fullPath","onChangeStatus","maxSizeBytes","multiple","autoUpload","getFilesFromEvent","getDroppedOrSelectedFiles","chosenFiles","fileObject","InputComponent","Input","onFiles","folderText","fileText","directory","webkitdirectory","FileAttachments","onFileRemoved","allowDelete","m","GetFilename","bytes","si","dp","thresh","abs","units","u","humanFileSize","syncStatus","close","reverse","GET_REFERENCE_DATA","UPDATE_POTENTIAL_JOB","SEND_POTENTIAL_JOB_REQUEST","FormField","lg","NewPotentialJob","showPotentialJobModal","setShowPotentialJobModal","jobData","onJobUpdated","fullAddressOnly","selectedBuilder","setSelectedBuilder","isValidPhoneNumber","setIsValidPhoneNumber","showBuilderApproval","setShowBuilderApproval","setSelectedJobsData","showFullAddress","setShowFullAddress","showPhotoCapture","setShowPhotoCapture","needsOfficeApproval","filteredJobData","assignedFieldUser","potentialJobComments","siteContactName","lotRangeLow","lotRangeHigh","unitRangeLow","unitRangeHigh","streetRangeLow","streetRangeHigh","newPotentialJob","setNewPotentialJob","onCompleted","updatePotentialJob","success","_selectedJobsData","getSelectedJobsData","sendPotentialJobRequest","sendRequestToBuilder","addressTypeSettings","setting","values","bookableWorkTypes","bookable","handleSave","potentialJob","processedFromOffice","handleSaveAndPhoto","createdPotentialJobs","fullAddress","handleChange","BuilderSelect","showFullAddressNewValue","ids","setOptions","selectedOption","onInputChange","inputValue","action","option","newOption","isClearable","classNamePrefix","TaskHistory","structuredAddressWorkTypes","pastMonths","setPastMonths","searchFilter","setSearchFilter","months","completedWork","setCompletedWork","fetchData","useCompletedWork","getDisplayStatus","task","paid","approved","getTotal","tasks","filteredTasks","lowerCaseSearchFilter","toLowerCase","taskName","taskAddress","taskWorkOrder","displayStatus","Row","Col","Container","fluid","Table","paddingRight","itemType","colSpan","UPDATE_CUSTOMTASKS","SEND_REQUEST","FieldWorkList","customTaskList","setCustomTaskList","editCustomTask","setEditCustomTask","setCustomDisplayNames","optionalFieldWorkColumns","setOptionalFieldWorkColumns","optionalFieldWorkColumnCount","setOptionalFieldWorkColumnCount","customFieldHeaders","setCustomFieldHeaders","customFieldCount","setCustomFieldCount","fieldJobStatusSettings","setFieldJobStatusSettings","workTypesJobStatusOrder","setWorkTypesJobStatusOrder","showJobStatusCol","setShowJobStatusCol","searchData","setSearchData","fieldWorkTasks","setFieldWorkTasks","columnSearchFilter","setColumnSearchFilter","inputKey","setInputKey","selectedForBuilderApproval","setSelectedForBuilderApproval","fieldwork","setFieldwork","useFieldWork","updateCustomTasks","taskGroupings","day","getShowJobStatus","customTasks","remainingTasks","remainingCustomTasks","isCompleted","searchFilterLower","statusFilter","jobStatus","tasksByCategory","completed","previouslyScheduled","monday","tuesday","wednesday","thursday","friday","saturday","sunday","byStatus","nextWeek","nextMonth","onHold","startOfWeek","startOf","toDate","newEndOfWeek","endOf","nextWeekEnd","isInFieldJobStatusSettings","scheduledStartTime","grouping","dayOfWeek","dayDate","jobTasks","taskDate","custTasks","getTasksForDay","flat","nextWeekCustomeTasks","nextMonthCustomTasks","baseHeaders","optionalHeaders","header","excelHeaders","scrollPosition","scrollTo","removeItem","rejectedSchedules","Array","isArray","workSchedule","workTypesInData","_customDisplayNames","showJobStatus","_fieldJobStatusSettings","useJobStatus","_optionalFieldWorkColumns","canEditDeveloperWorkTypes","canEditSiteContactWorkTypes","_customFieldHeaders","customFieldTemplates","flatMap","template","isFieldWork","fieldType","_workTypesJobStatusOrder","fieldJobStatusSetting","sortedStatuses","lookups","lookup","SearchInput","headerKey","setColumnSearchDataDebounced","setInputValue","inputRef","focus","newValue","newState","getDisplayName","users","isOverDue","getJobStatusColour","defaultReturn","fieldJobStatusColour","fieldJobStatusColours","colour","getFieldComments","handleTaskClick","scrollY","exportData","row","uniqueSelectOptions","uniqueOptions","CurrentTasksRows","displayTasks","isCurrentlyOnsite","aWorkType","bWorkType","aStatusOrder","fieldOrder","bStatusOrder","groupedDisplayTasks","TaskRows","groupingName","setColumnSearchDebounced","debounce","updateFunction","SearchRow","textsearch","hasOwnProperty","isCompletable","Badge","issuedDate","customFields","builderApprovedDate","builderApprovalSentDate","handleSelectForBuilderApproval","attachmentCount","ScheduleTableHeaders","isCurrent","onKeyPress","prevKey","checked","customTask","handleEditCustomTask","statusOptions","unshift","getStatusOptions","prevFieldWorkTasks","updatedFieldComments","userDisplayName","WrappedFieldWorkList","GET_FIELD_DATA","FieldWork","setSettings","setStructuredAddressWorkTypes","fieldGroups","setFieldGroups","selectedGroup","setSelectedGroup","tab","settingsData","aria-current","g","WrappedFieldWork","navPlatform","userAgentData","platform","maxTouchPoints","stopMediaStream","video","pause","srcObject","getTracks","track","stop","load","captureError","setCaptureError","videoRef","setImage","flash","setFlash","valid","setValid","showTitle","setShowTitle","useMulti","setUseMulti","isPortrait","setIsPortrait","preview","setPreview","readyFlag","setReadyFlag","successFlag","setSuccessFlag","lastComment","storedComment","getVideo","applyConstraints","advanced","torch","active","mediaDevices","getUserMedia","facingMode","audio","stream","play","constraint","timer","clientWidth","clientHeight","checkImage","stopCamera","cancelImage","Helmet","content","playsInline","muted","autoPlay","clear","textOverflow","whiteSpace","Photos","REMOVE_ATTACHMENT","Attachments","removeAttachment","documents","setDocuments","withoutCategory","docTemp","Breadcrumbs","Cards","Carousels","Collapses","Dropdowns","Forms","Jumbotrons","ListGroups","Navbars","Navs","Paginations","Popovers","ProgressBar","Switches","Tables","Tabs","Tooltips","BrandButtons","ButtonDropdowns","ButtonGroups","Buttons","Charts","Dashboard","CoreUIIcons","Flags","FontAwesome","SimpleLineIcons","Alerts","Badges","Modals","Colors","Typography","Widgets","Users","User","EditUser","Logs","Projects","Project","Tasks","Task","FinanceView","ItemCodes","Lookups","Groups","Group","EditGroup","IndependentContractors","Constructions","ConstructionItemCodes","SubcontractorCodes","ConstructionEdit","ConstructionView","ConstructionBulkImport","Reports","ConstructionDailyRun","ConstructionClaims","ConstructionInvoicing","ConstructionPayment","SchedulingTool","SchedulingToolOld","ScheduleOverview","TicketOfWork","SystemSettings","DashboardSchedule","BuilderApprovals","PotentialJobsView","AdminTasks","FieldConstruction","FieldCapture","FieldCapture2","FieldAttachments","FieldConstructionPhotos","claim","firebase","apiKey","authDomain","databaseURL","storageBucket","messagingSenderId","appId","measurementId","authContext","createContext","ProvideAuth","setUser","setToken","setMe","setIsImpersonating","cancelled","currentUser","getIdToken","idToken","unsubscribe","onAuthStateChanged","onIdTokenChanged","signin","provider","OAuthProvider","setCustomParameters","prompt","tenant","isMobile","signInWithRedirect","signInWithPopup","signOut","meObj","refreshToken","impersonate","useProvideAuth","Provider","useContext","Dexie","version","stores","setVersion","fetchVersion"],"mappings":"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ACED,UAAW,gBACXC,YAAa,mBAEf,CACED,UAAW,WACXC,YAAa,YAEf,CACED,UAAW,eACXC,YAAa,iBAEf,CACED,UAAW,cACXC,YAAa,gBAEf,CACED,UAAW,eACXC,YAAa,iBAEf,CACED,UAAW,gBACXC,YAAa,kBAEf,CACED,UAAW,WACXC,YAAa,aAIJW,EAAY,CACvB,CACEZ,UAAW,KACXC,YAAa,MAEf,CACED,UAAW,iBACXC,YAAa,mBAEf,CACED,UAAW,OACXC,YAAa,QAEf,CACED,UAAW,cACXC,YAAa,eAEf,CACED,UAAW,gBACXC,YAAa,mBAEf,CACED,UAAW,WACXC,YAAa,YAEf,CACED,UAAW,aACXC,YAAa,cAEf,CACED,UAAW,kBACXC,YAAa,oBAEf,CACED,UAAW,mBACXC,YAAa,qBAEf,CACED,UAAW,UACXC,YAAa,WACbC,QAAQ,GAEV,CACEF,UAAW,eACXC,YAAa,gBACbC,QAAQ,IAICW,EAAc,CACzB,CACEb,UAAW,KACXC,YAAa,MAEf,CACED,UAAW,iBACXC,YAAa,mBAEf,CACED,UAAW,OACXC,YAAa,QAEf,CACED,UAAW,cACXC,YAAa,eAEf,CACED,UAAW,gBACXC,YAAa,mBAEf,CACED,UAAW,WACXC,YAAa,YAEf,CACED,UAAW,gBACXC,YAAa,kBAEf,CACED,UAAW,OACXC,YAAa,QAEf,CACED,UAAW,aACXC,YAAa,gBAEf,CACED,UAAW,QACXC,YAAa,SAEf,CACED,UAAW,WACXC,YAAa,aAIJa,EAAgB,CAC3B,CACEd,UAAW,KACXC,YAAa,MAEf,CACED,UAAW,OACXC,YAAa,QAEf,CACED,UAAW,aACXC,YAAa,eAEf,CACED,UAAW,iBACXC,YAAa,mBAEf,CACED,UAAW,QACXC,YAAa,SAEf,CACED,UAAW,WACXC,YAAa,YAEf,CACED,UAAW,cACXC,YAAa,eAEf,CACED,UAAW,aACXC,YAAa,eAEf,CACED,UAAW,YACXC,YAAa,cAEf,CACED,UAAW,aACXC,YAAa,eAEf,CACED,UAAW,cACXC,YAAa,gBAEf,CACED,UAAW,aACXC,YAAa,gBAEf,CACED,UA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","file":"static/js/main.6982a926.chunk.js","sourcesContent":["var map = {\n\t\"./Range.js\": 242,\n\t\"./file.js\": 320,\n\t\"./getASTNodeAtPosition.js\": 319,\n\t\"./index.js\": 88,\n\t\"./validateWithCustomRules.js\": 381\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1481;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 1482;","var map = {\n\t\"./Range.js\": 242,\n\t\"./file.js\": 320,\n\t\"./getASTNodeAtPosition.js\": 319,\n\t\"./index.js\": 88,\n\t\"./validateWithCustomRules.js\": 381\n};\n\nfunction webpackAsyncContext(req) {\n\treturn Promise.resolve().then(function() {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\n\t\tvar id = map[req];\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 1483;\nmodule.exports = webpackAsyncContext;","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 1484;","/*\n * required polyfills\n */\nimport 'core-js';\nimport 'core-js/features/set/map';\n\n/** IE9, IE10 and IE11 requires all of the following polyfills. **/\n// import 'core-js/es6/symbol'\n// import 'core-js/es6/object'\n// import 'core-js/es6/function'\n// import 'core-js/es6/parse-int'\n// import 'core-js/es6/parse-float'\n// import 'core-js/es6/number'\n// import 'core-js/es6/math'\n// import 'core-js/es6/string'\n// import 'core-js/es6/date'\n// import 'core-js/es6/array'\n// import 'core-js/es6/regexp'\n// import 'core-js/es6/map'\n// import 'core-js/es6/weak-map'\n// import 'core-js/es6/set'\n// import 'core-js/es7/object'\n\n/** IE10 and IE11 requires the following for the Reflect API. */\n// import 'core-js/es6/reflect'\n\n/** Evergreen browsers require these. **/\n// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.\n// import 'core-js/es7/reflect'\n\n// CustomEvent() constructor functionality in IE9, IE10, IE11\n(function () {\n if (typeof window.CustomEvent === 'function') return false;\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n})();\n","import React, { useEffect, useRef } from 'react';\nimport { ApolloClient } from 'apollo-client';\nimport { InMemoryCache } from 'apollo-cache-inmemory';\nimport { HttpLink } from 'apollo-link-http';\nimport { onError } from 'apollo-link-error';\nimport { ApolloLink } from 'apollo-link';\nimport gql from 'graphql-tag';\nimport { ApolloProvider } from '@apollo/react-hooks';\nimport { useAuth } from './auth/AuthProvider';\n// import { WebSocketLink } from \"apollo-link-ws\";\n// import { SubscriptionClient } from \"subscriptions-transport-ws\";\n// we'll need to migrate away from apollo boost in order to use subscriptions/websockets\n// https://www.apollographql.com/docs/react/migrating/boost-migration/\n// query structure docs\n// https://github.com/SimonCropp/GraphQL.EntityFramework/blob/main/docs/query-usage.md\n\nconst GET_ME = gql`\n query {\n me {\n canLogIn\n email\n firstName\n id\n lastName\n role\n roles\n isSubcontractor\n independentContractorId\n groupUsers {\n group {\n id\n name\n }\n isPrimaryContact\n }\n claims {\n claimValue\n }\n }\n }\n`;\n\nexport const ClientProvider = ({ children }) => {\n const auth = useAuth();\n const headers = useRef({});\n const client = useRef(\n new ApolloClient({\n link: ApolloLink.from([\n onError(({ graphQLErrors, networkError }) => {\n if (graphQLErrors)\n graphQLErrors.forEach(({ message, locations, path }) =>\n console.log(`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`)\n );\n if (networkError) console.log(`[Network error]: ${networkError}`);\n\n // if we're not authenticated, sign user out (although it may be that we're not authorised for this route)\n if (networkError && networkError.statusCode === 401) {\n console.error('getting 401');\n }\n\n if (networkError && networkError.statusCode === 403) {\n console.error('getting 403');\n // in theory we're authed, but think token needs refreshing?\n }\n }),\n new HttpLink({\n uri: '/graphql',\n headers: headers.current,\n credentials: 'same-origin',\n request: (operation) => {\n operation.setContext({\n headers: {\n authorization: headers.current.Authorization ? headers.current.Authorization : ''\n }\n });\n }\n })\n ]),\n cache: new InMemoryCache({ addTypename: false }),\n defaultOptions: { query: { fetchPolicy: 'no-cache' } }\n })\n );\n\n useEffect(() => {\n if (auth.token != null && !auth.isImpersonating && !auth.loading) {\n // in theory, no longer need this. Cookie will be set. But initial request needs it.\n headers.current.Authorization = `Bearer ${auth.token}`;\n\n // here's where we set auth.me. I think sometimes, the token above is stale?\n client.current\n .query({ query: GET_ME })\n .then((result) => {\n const me = result.data.me[0];\n // Flatten claims so they are easier to check\n me.claims = me.claims.map((c) => c.claimValue);\n auth.updateMe(me);\n headers.current.Authorization = ''; // dont need this anymore as we've got the cookie\n })\n .catch((err) => {\n auth.setMeFailed(true);\n console.error(err);\n });\n }\n }, [auth.token, auth.isImpersonating, auth.loading]);\n\n return {children};\n};\n","import React, { useRef, useEffect, useState } from 'react';\nimport GraphiQL from 'graphiql';\nimport fetch from 'isomorphic-fetch';\nimport { useAuth } from '../../../auth/AuthProvider';\n\nimport 'graphiql/graphiql.css';\n\nexport const Graphiql = (props) => {\n const headers = useRef({ 'Content-Type': 'application/json' });\n const auth = useAuth();\n const [loading, setLoading] = useState(true);\n\n const graphQLFetcher = (graphQLParams, headers) => {\n return fetch(window.location.origin + '/graphql', {\n method: 'post',\n headers: { ...headers },\n body: JSON.stringify(graphQLParams)\n }).then((response) => {\n return response.json();\n });\n };\n\n useEffect(() => {\n if (auth.token) {\n headers.current.authorization = `Bearer ${auth.token}`;\n setLoading(false);\n }\n }, []);\n\n return !loading ? (\n
\n graphQLFetcher(params, headers.current)} />\n
\n ) : (\n

Loading

\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { BrowserRouter, Route, Switch } from 'react-router-dom';\nimport { ClientProvider } from './GraphQLClient';\nimport './App.scss';\nimport { Graphiql } from './views/Pages/Graphiql/Graphiql';\nimport { useAuth } from './auth/AuthProvider';\nimport { Loading } from './components/Loading/Loading';\nimport routes from './routes';\nimport { ToastContainer } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport Version from './components/Version';\n\n// Containers\nconst DefaultLayout = React.lazy(() => import('./containers/DefaultLayout/DefaultLayout'));\nconst NoChrome = React.lazy(() => import('./containers/NoChrome/NoChrome'));\n\n// Pages\nconst Login = React.lazy(() => import('./views/Pages/Login/Login'));\nconst Page404 = React.lazy(() => import('./views/Pages/Page404/Page404'));\nconst Page500 = React.lazy(() => import('./views/Pages/Page500/Page500'));\nconst Builders = React.lazy(() => import('./views/BuilderApprovals/Public'));\n\nconst appHeight = () => {\n const doc = document.documentElement;\n doc.style.setProperty('--app-height', `${window.innerHeight}px`);\n};\nwindow.addEventListener('resize', appHeight);\nappHeight();\n\nfunction App(props) {\n const auth = useAuth();\n\n return (\n <>\n }>\n {auth.token && auth.user ? (\n \n \n {auth.me ? (\n \n } />\n {routes.map((route, idx) => {\n if (route.claims && !auth.hasOneClaim(route.claims)) {\n return null;\n }\n\n return route.layout && route.layout === 'NoChrome' ? (\n (\n \n \n \n )}\n />\n ) : null;\n })}\n } />\n } />\n } />\n } />\n } />\n \n ) : (\n auth.meFailed && \n )}\n \n \n ) : (\n \n \n } />\n } />\n \n \n )}\n \n \n \n );\n}\n\nconst LoginFailed = () => {\n const [loading, setLoading] = useState(true);\n const auth = useAuth();\n\n // We need to give the auth process enough time to retry GET_ME\n // before we show the login failed screen\n // Clear loading after 5 seconds\n useEffect(() => {\n const t = setTimeout(() => {\n setLoading(false);\n }, 5000);\n\n return () => clearTimeout(t);\n }, []);\n\n return (\n <>\n {(!!auth.loading || !!loading) && }\n {!auth.loading && !loading && (\n
\n

Failed to login

\n

EMAIL: {auth.user?.email}

\n

\n VERSION: \n

\n

Your login attempt has failed, please check your credentials and try again.

\n

\n If you continue to experience this issue please contact your administrator and let them know the email\n address you are attempting to login with.\n

\n

\n \n

\n

\n \n

\n
\n )}\n \n );\n};\n\nexport default App;\n","import { setGlobal, resetGlobal } from 'reactn';\n// import { getUser } from \"security\";\n\nexport const initialiseState = () => {\n // console.log('initialiseState();');\n\n resetGlobal();\n\n // const initialUser = getUser();\n\n // Set initial state\n setGlobal({\n // user: { isAuthenticated: initialUser !== null, ...initialUser },\n hubConnection: [],\n subscriptions: []\n });\n};\n\nexport default initialiseState;\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n // Unregister serviceworker for routes that require direct pass through\n const bypassPaths = ['/api/xero/Callback', '/builders', '/api/reports/'];\n\n // Check if current pathname should bypass the service worker\n const shouldBypass = bypassPaths.some((path) => window.location.pathname.startsWith(path));\n\n if (shouldBypass) {\n console.info('unregistering service worker for api route');\n unregisterAndReload();\n console.info('reloading');\n return false;\n }\n\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n\n // Execute callback\n if (config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (response.status === 404 || response.headers.get('content-type').indexOf('javascript') === -1) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregisterAndReload() {\n navigator.serviceWorker.getRegistrations().then((registrations) => {\n if (registrations.length > 0) {\n console.info('Unregistering service workers and reloading');\n registrations.forEach((registration) => registration.unregister());\n if (!sessionStorage.getItem('unregister-reloaded')) {\n sessionStorage.setItem('unregister-reloaded', 'true');\n window.location.reload();\n } else {\n console.info('Reload skipped to prevent loop');\n }\n }\n });\n}\n","import React, { useEffect } from 'react';\nimport { useGlobal } from 'reactn';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport * as serviceWorker from './serviceWorker';\n\nconst ServiceWorkerWrapper = () => {\n const [showReload, setShowReload] = useGlobal('showReload');\n const [waitingWorker, setWaitingWorker] = React.useState(null);\n\n const onSWUpdate = (registration) => {\n setShowReload(true);\n setWaitingWorker(registration.waiting);\n };\n\n useEffect(() => {\n setShowReload(false);\n serviceWorker.register({ onUpdate: onSWUpdate });\n }, []);\n\n const reloadPage = () => {\n waitingWorker && waitingWorker.postMessage({ type: 'SKIP_WAITING' });\n setShowReload(false);\n window.location.reload(true);\n };\n\n return (\n \n Update available\n \n

Great News! LeQuinn has been updated

\n

You just need to refresh to get the latest version

\n
\n \n \n \n
\n );\n};\n\nexport default ServiceWorkerWrapper;\n","import 'react-app-polyfill/ie9'; // For IE 9-11 support\nimport 'react-app-polyfill/stable';\n// import 'react-app-polyfill/ie11'; // For IE 11 support\nimport './polyfill';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport initialiseState from './utils/store';\nimport { ProvideAuth } from './auth/AuthProvider';\nimport ServiceWorkerWrapper from './ServiceWorkerWrapper';\nimport ErrorBoundary from './views/FieldWork/ErrorBoundary';\n\ninitialiseState();\n\n// Provide a global error handler\nwindow.onerror = (message, url, line, column, error) => {\n // Step 1: Create the message element (div)\n const messageElement = document.createElement('div');\n\n // Optional: Add some styles to the message div\n messageElement.style.position = 'relative';\n messageElement.style.fontSize = '16px';\n messageElement.style.padding = '10px';\n messageElement.style.textAlign = 'left';\n messageElement.style.backgroundColor = '#f0f0f0';\n messageElement.style.border = '1px solid #ccc';\n messageElement.style.marginBottom = '10px';\n\n // Step 2: Create the pre element for preformatted text\n const preElement = document.createElement('pre');\n preElement.textContent = message + '\\r\\n' + error?.stack;\n\n // Step 3: Create the a element for the email link\n const mailtoLink = document.createElement('a');\n mailtoLink.href =\n 'mailto:melissa.ferreri@adtechcontracting.com.au?subject=LeQuinn error&body=' +\n encodeURIComponent(message + '\\r\\n' + error?.stack);\n mailtoLink.textContent = 'Email this error';\n\n // Step 4: Append the pre and a elements to the message div\n messageElement.appendChild(preElement);\n messageElement.appendChild(mailtoLink);\n\n // Step 5: Create the close button\n var closeButton = document.createElement('a');\n closeButton.textContent = 'X';\n closeButton.href = '#';\n\n // Optional: Style the close button\n closeButton.style.position = 'absolute';\n closeButton.style.right = '10px';\n closeButton.style.bottom = '10px';\n closeButton.style.fontSize = '20px';\n closeButton.style.textDecoration = 'none';\n\n // Step 6: Add event listener to the close button\n closeButton.addEventListener('click', function (event) {\n event.preventDefault();\n messageElement.remove();\n });\n\n // Step 7: Append the close button to the message div\n messageElement.appendChild(closeButton);\n\n // Step 8: Select the body element\n const bodyElement = document.body;\n\n // Step 9: Insert the message div at the top of the body\n bodyElement.insertBefore(messageElement, bodyElement.firstChild);\n};\n\nReactDOM.render(\n \n \n \n \n \n ,\n document.getElementById('root')\n);\n","import React, { useEffect, useState, useRef, useCallback } from 'react';\nimport { db } from '../../utils/db';\nimport { useLiveQuery } from 'dexie-react-hooks';\nimport { useAuth } from '../../auth/AuthProvider';\nimport moment from 'moment';\n\nconst Sync = ({ hidden, constructionId }) => {\n const auth = useAuth();\n const progress = useRef(false);\n\n const [openPhotoHistory, setOpenPhotoHistory] = useState(false);\n\n const syncFirst = useCallback(async () => {\n const photos = await db.photos.limit(1).toArray();\n\n if (photos.length == 1) {\n const photo = photos[0];\n\n if (photo.status == 'uploaded') {\n await db.photos.delete(photo.id);\n db.photoHistory.update(photo.id, { isCleanedUp: true, lastUpdated: new Date().toISOString().split('.')[0] });\n }\n\n let redoGetUrl = false;\n if (photo.status === 'getUrl') {\n const previousGetUrl = localStorage.getItem('sync-photo-last-getUrl');\n const previousGetUrlMs = parseInt(previousGetUrl);\n if (!isNaN(previousGetUrlMs)) {\n redoGetUrl = new Date().getTime() - previousGetUrlMs > 60 * 1000;\n } else {\n redoGetUrl = true;\n }\n }\n\n if (photo.status === undefined || photo.status == 'pending' || (photo.status === 'getUrl' && redoGetUrl)) {\n await db.photos.update(photo.id, { status: 'getUrl' });\n if (!redoGetUrl) {\n db.photoHistory.update(photo.id, { getUrl: true, lastUpdated: new Date().toISOString().split('.')[0] });\n } else {\n db.photoHistory.update(photo.id, { redoGetUrl: true, lastUpdated: new Date().toISOString().split('.')[0] });\n }\n\n localStorage.setItem('sync-photo-last-getUrl', new Date().getTime().toString());\n\n try {\n const params = await getPresignedUploadParams({\n name: photo.name,\n size: photo.size,\n tags: photo.tags,\n comments: photo.description,\n id: photo.constructionId,\n potentialJobId: photo.potentialJobId\n });\n\n console.log(params);\n\n if (params.uploadUrl === undefined) {\n throw new Error('Upload URL is undefined');\n }\n\n await db.photos.update(photo.id, {\n url: params.uploadUrl,\n status: 'uploading'\n });\n db.photoHistory.update(photo.id, {\n getUploadParams: true,\n attachmentId: params.attachment.id,\n attachmentUrl: params.attachment.url,\n lastUpdated: new Date().toISOString().split('.')[0]\n });\n } catch (err) {\n // if there's an issue getting upload params, then we'll just try again later\n await db.photos.update(photo.id, { status: 'pending' });\n db.photoHistory.update(photo.id, {\n getUploadParamsError: true,\n lastUpdated: new Date().toISOString().split('.')[0]\n });\n return;\n }\n }\n\n if (photo.status === 'uploading' || photo.status == 'retrying') {\n try {\n const response = await uploadAttachment(photo.url, photo.blob);\n await db.photos.update(photo.id, { status: 'uploaded' });\n db.photoHistory.update(photo.id, {\n uploadAttachment: true,\n lastUpdated: new Date().toISOString().split('.')[0]\n });\n } catch (err) {\n console.error(err);\n await db.photos.update(photo.id, { status: 'retrying' });\n db.photoHistory.update(photo.id, {\n uploadAttachmentError: true,\n lastUpdated: new Date().toISOString().split('.')[0]\n });\n return;\n }\n }\n\n await syncFirst(); // queue the next image immediately\n }\n }, []);\n\n function dataURItoBlob(dataURI) {\n // convert base64 to raw binary data held in a string\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n var byteString = atob(dataURI.split(',')[1]);\n\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n\n // create a view into the buffer\n var ia = new Uint8Array(ab);\n\n // set the bytes of the buffer to the correct values\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n // write the ArrayBuffer to a blob, and you're done\n var blob = new Blob([ab], { type: mimeString });\n return blob;\n }\n\n const uploadAttachment = (url, imageData) => {\n const imageBlob = dataURItoBlob(imageData);\n\n let contentType = 'image/png';\n if (url.indexOf('.jpg') > -1) {\n contentType = 'image/jpeg';\n }\n\n return fetch(url, {\n method: 'PUT',\n body: imageBlob,\n headers: { 'Content-Type': contentType }\n });\n };\n\n const getPresignedUploadParams = ({ name, size, tags, comments, id, potentialJobId }) => {\n auth.getToken();\n\n return fetch('/api/attachments/getPresignedUploadParams', {\n method: 'POST',\n body: JSON.stringify({\n name,\n sizeBytes: size,\n constructionId: id,\n potentialJobId: potentialJobId,\n tags: tags,\n comments: comments\n }),\n headers: {\n 'Content-Type': 'application/json',\n authorization: `Bearer ${auth.token}`\n }\n }).then((res) => {\n if (res.status === 200) {\n return res.json();\n } else {\n throw new Error(res.status);\n }\n });\n };\n\n const photos = useLiveQuery(() => db.photos.toArray()) || [];\n const photoHistory = useLiveQuery(() => db.photoHistory.toArray())?.sort((a, b) => b.id - a.id) || [];\n useEffect(() => {\n const interval = setInterval(async () => {\n // otherwise, retry every 5 seconds\n if (!progress.current) {\n progress.current = true;\n try {\n await syncFirst();\n } catch (exc) {\n } finally {\n progress.current = false;\n }\n }\n }, 5000);\n return () => clearInterval(interval);\n }, [photos]);\n\n var color = 'success';\n var message = 'All files are up to date';\n\n if (photos?.length > 0) {\n color = 'warning';\n message = `${photos.length} files need to be synced`;\n }\n\n const formatDateTime = (dateTime) => {\n if (!dateTime) return null;\n const formattedDateTime = moment.utc(dateTime).tz(moment.tz.guess()).format('DD MM YYYY hh:mm A');\n return formattedDateTime;\n };\n\n if (constructionId) {\n const oneHourAgo = moment().subtract(1, 'hours').toISOString().split('.')[0];\n\n // show image previews here, 80x80 images in a grid\n\n return (\n <>\n {photoHistory && photoHistory.length > 0 && (\n \n \n {photoHistory\n .filter(\n (p) =>\n (p.constructionId == constructionId || p.potentialJobId == constructionId) &&\n p.lastUpdated > oneHourAgo\n )\n .map((item, index) => {\n let photo = photos?.find((p) => p.id == item.id);\n\n return (\n \n \n \n \n );\n })}\n \n
\n \n \n {item.name}{' '}\n {photo && photo.status && (\n {photo.status || 'pending'}\n )}\n {item.description && (\n \n
\n {item.description}\n
\n )}\n
\n {item.size} bytes\n
\n )}\n \n );\n }\n\n if (hidden) {\n return null;\n }\n\n return (\n
\n
\n
{message}
\n
\n setOpenPhotoHistory(!openPhotoHistory)}\n >\n {openPhotoHistory ? 'Close Photo History' : 'Photo History'}\n \n
\n
\n\n {openPhotoHistory && (\n
\n
Photo History
\n {photoHistory && (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {photoHistory.map((item, index) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n })}\n \n
idnameconstructionIdpotentialJobIdsizeisCleanedUpgetUrlredoGetUrluploadAttachmentuploadAttachmentErrorgetUploadParamsgetUploadParamsErrorcreatedDatelastUpdated
{item.id}{item.name}{item.constructionId}{item.potentialJobId}{item.size}{item.isCleanedUp ? 'True' : '-'}{item.getUrl ? 'True' : '-'}{item.redoGetUrl ? 'True' : '-'}{item.uploadAttachment ? 'True' : '-'}{item.uploadAttachmentError ? 'True' : '-'}{item.getUploadParams ? 'True' : '-'}{item.getUploadParamsError ? 'True' : '-'}{formatDateTime(item.createdDate)}{formatDateTime(item.lastUpdated)}
\n
\n )}\n
\n )}\n\n {photos?.length > 0 && !openPhotoHistory && (\n \n \n \n \n \n \n \n \n \n \n {photos?.map((photo, index) => {\n return (\n \n \n \n \n \n \n );\n })}\n \n
NameTagsSizeStatus
{photo.name}{photo.tags.join(',')}{photo.size}{photo.status}
\n )}\n
\n );\n};\n\nexport default Sync;\n","// Will update this to be the single source of static construction fields in the next phase\nexport const constructionFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'status',\n displayName: 'Status'\n },\n {\n fieldName: 'comments',\n displayName: 'Comments'\n },\n {\n fieldName: 'workOrder',\n displayName: 'Work Order'\n },\n {\n fieldName: 'releaseDate',\n displayName: 'Job Received Date',\n isDate: true,\n bookingEditable: true\n },\n {\n fieldName: 'projectFSAM',\n displayName: 'Project FSAM'\n },\n {\n fieldName: 'description',\n displayName: 'Description',\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'address',\n displayName: 'Address'\n },\n {\n fieldName: 'contactDetails',\n displayName: 'Contact Details'\n },\n {\n fieldName: 'buildType',\n displayName: 'Build Type',\n isOptionalFieldWorkTask: true,\n bookingEditable: true\n },\n {\n fieldName: 'workType',\n displayName: 'Work Type',\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'premises',\n displayName: 'Premises'\n },\n {\n fieldName: 'deliveryPartner',\n displayName: 'Delivery Partner',\n isOptionalFieldWorkTask: true,\n bookingEditable: true\n },\n {\n fieldName: 'deliveryPartnerPm',\n displayName: 'DP PM',\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'developer',\n displayName: 'Developer',\n isOptionalFieldWorkList: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'adtechPm',\n displayName: 'Internal PM',\n isUser: true\n },\n {\n fieldName: 'scheduler',\n displayName: 'Scheduler',\n isUser: true,\n isOptionalFieldWorkTask: true,\n bookingEditable: true\n },\n {\n fieldName: 'originalDueDate',\n displayName: 'Original Due Date',\n isDate: true,\n bookingEditable: true\n },\n {\n fieldName: 'updatedDueDate',\n displayName: 'Updated PC Due Date',\n isDate: true\n },\n {\n fieldName: 'dbydExpiryDate',\n displayName: 'DBYD Expiry',\n isDate: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'laseDate',\n displayName: 'LASE',\n isDate: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'startDueDate',\n displayName: 'Start Due Date',\n isDate: true\n },\n {\n fieldName: 'onsiteDate',\n displayName: 'Onsite Date',\n isDate: true\n },\n {\n fieldName: 'integrationDate',\n displayName: 'Integration Date',\n isDate: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'crqDate',\n displayName: 'CRQ Date',\n isDate: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'crqNumber',\n displayName: 'CRQ Number',\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'acceleratedJob',\n displayName: 'Accelerated Job?',\n isBool: true,\n isOptionalFieldWorkTask: true,\n bookingEditable: true\n },\n {\n fieldName: 'siteContact',\n displayName: 'Site Contact Name'\n },\n {\n fieldName: 'siteContactPhone',\n displayName: 'Site Contact Phone',\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'contract',\n displayName: 'Contract'\n },\n {\n fieldName: 'region',\n displayName: 'Region',\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'quoteNumber',\n displayName: 'Quote Number'\n },\n {\n fieldName: 'prePaymentNumber',\n displayName: 'PrePayment Number'\n },\n {\n fieldName: 'bookedDate',\n displayName: 'Booked Date',\n isDate: true\n },\n {\n fieldName: 'workTasksCompleteDate',\n displayName: 'Work Tasks Complete Date',\n isDate: true\n },\n {\n fieldName: 'customerRef',\n displayName: 'Customer Ref',\n bookingEditable: true,\n isOptionalFieldWorkList: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'locationId',\n displayName: 'Location Id'\n },\n {\n fieldName: 'lotNumber',\n displayName: 'Lot Number'\n },\n {\n fieldName: 'unitNumber',\n displayName: 'Unit Number'\n },\n {\n fieldName: 'streetNumber',\n displayName: 'Street Number'\n },\n {\n fieldName: 'streetName',\n displayName: 'Street Name'\n },\n {\n fieldName: 'roadType',\n displayName: 'Road Type'\n },\n {\n fieldName: 'suburb',\n displayName: 'Suburb'\n },\n {\n fieldName: 'state',\n displayName: 'State'\n },\n {\n fieldName: 'postCode',\n displayName: 'Post Code'\n },\n {\n fieldName: 'isReceived',\n displayName: 'Is Received',\n isBool: true\n },\n {\n fieldName: 'statusChangeHangfireId',\n displayName: 'Status Change Hangfire Id'\n }\n];\n\nexport const jobDelegations = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'delegatedToId',\n displayName: 'Delegated To Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Construction Id'\n },\n {\n fieldName: 'foreignId',\n displayName: 'Foreign Id'\n },\n {\n fieldName: 'returnUrl',\n displayName: 'Return Url'\n },\n {\n fieldName: 'returned',\n displayName: 'Returned',\n isBool: true\n },\n {\n fieldName: 'delegatorComments',\n displayName: 'Delegator Comments'\n },\n {\n fieldName: 'delegateeComments',\n displayName: 'Delegatee Comments'\n },\n // coming soon\n // {\n // fieldName: 'acceptedDate',\n // displayName: 'Accepted Date',\n // isDate: true\n // },\n // {\n // fieldName: 'rejectedDate',\n // displayName: 'Rejected Date',\n // isDate: true\n // },\n {\n fieldName: 'awaitingResubmission',\n displayName: 'Awaiting Resubmission',\n isBool: true\n },\n {\n fieldName: 'approvedDate',\n displayName: 'Approved Date',\n isDate: true\n },\n {\n fieldName: 'submittedDate',\n displayName: 'Submitted Date',\n isDate: true\n }\n];\n\nexport const taskFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'childTaskId',\n displayName: 'Child Task Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Job Id'\n },\n {\n fieldName: 'name',\n displayName: 'Task Name'\n },\n {\n fieldName: 'owner',\n displayName: 'Owner',\n isUser: true,\n isOptionalFieldWorkList: true\n },\n {\n fieldName: 'groupId',\n displayName: 'Resource'\n },\n {\n fieldName: 'issuedDate',\n displayName: 'Issued Date',\n isDate: true,\n isOptionalFieldWorkList: true\n },\n {\n fieldName: 'dueDate',\n displayName: 'Due Date',\n isDate: true,\n isOptionalFieldWorkList: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'completedDate',\n displayName: 'Completed Date',\n isDate: true\n },\n {\n fieldName: 'submittedDate',\n displayName: 'Submitted Date',\n isDate: true\n },\n {\n fieldName: 'comments',\n displayName: 'Comments'\n },\n {\n fieldName: 'initial',\n displayName: 'Initial',\n isBool: true\n },\n {\n fieldName: 'ignored',\n displayName: 'Ignored',\n isBool: true\n },\n {\n fieldName: 'isReopened',\n displayName: 'Is Reopened',\n isBool: true\n },\n {\n fieldName: 'onsiteDate',\n displayName: 'Onsite Date',\n isDate: true,\n isOptionalFieldWorkList: true,\n isOptionalFieldWorkTask: true\n },\n {\n fieldName: 'reminderDate',\n displayName: 'Reminder Date',\n isDate: true\n },\n {\n fieldName: 'reminderComments',\n displayName: 'Reminder Comments'\n },\n {\n fieldName: 'acceptedDate',\n displayName: 'Accepted Date',\n isDate: true\n },\n {\n fieldName: 'declinedDate',\n displayName: 'Declined Date',\n isDate: true\n },\n {\n fieldName: 'scheduledStartTime',\n displayName: 'Scheduled Start Time',\n isDateTime: true,\n isOptionalFieldWorkList: true\n },\n {\n fieldName: 'scheduledEndTime',\n displayName: 'Scheduled End Time',\n isDateTime: true\n }\n];\n\nexport const boqFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Construction Id'\n },\n {\n fieldName: 'code',\n displayName: 'Code'\n },\n {\n fieldName: 'designVariation',\n displayName: 'Design Variation'\n },\n {\n fieldName: 'description',\n displayName: 'Description'\n },\n {\n fieldName: 'itemType',\n displayName: 'Item Type'\n },\n {\n fieldName: 'unitAmount',\n displayName: 'Unit Amount'\n },\n {\n fieldName: 'unitOfMeasure',\n displayName: 'Unit Of Measure'\n },\n {\n fieldName: 'quantity',\n displayName: 'Quantity'\n },\n {\n fieldName: 'variationQty',\n displayName: 'Variation Qty'\n },\n {\n fieldName: 'assignedQty',\n displayName: 'Assigned Qty'\n },\n {\n fieldName: 'completedQty',\n displayName: 'Completed Qty'\n },\n {\n fieldName: 'estimatedTime',\n displayName: 'Estimated Time'\n },\n {\n fieldName: 'comments',\n displayName: 'Comments'\n }\n];\n\nexport const bomFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Construction Id'\n },\n {\n fieldName: 'code',\n displayName: 'Code'\n },\n {\n fieldName: 'description',\n displayName: 'Description'\n },\n {\n fieldName: 'unitOfMeasure',\n displayName: 'Unit Of Measure'\n },\n {\n fieldName: 'quantity',\n displayName: 'Quantity'\n },\n {\n fieldName: 'identifier',\n displayName: 'Identifier'\n },\n {\n fieldName: 'orderedQuantity',\n displayName: 'Ordered Quantity'\n },\n {\n fieldName: 'receivedQuantity',\n displayName: 'Received Quantity'\n },\n {\n fieldName: 'dueDate',\n displayName: 'Due Date',\n isDate: true\n },\n {\n fieldName: 'receivedDate',\n displayName: 'Received Date',\n isDate: true\n }\n];\n\nexport const claimFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Construction Id'\n },\n {\n fieldName: 'code',\n displayName: 'Code'\n },\n {\n fieldName: 'description',\n displayName: 'Description'\n },\n {\n fieldName: 'unitOfMeasure',\n displayName: 'Unit Of Measure'\n },\n {\n fieldName: 'quantity',\n displayName: 'Quantity'\n },\n {\n fieldName: 'claimQuantity',\n displayName: 'Claim Quantity'\n },\n {\n fieldName: 'rate',\n displayName: 'Rate'\n },\n {\n fieldName: 'totalExGst',\n displayName: 'Total Ex-Gst'\n },\n {\n fieldName: 'total',\n displayName: 'Total'\n },\n {\n fieldName: 'comments',\n displayName: 'Comments'\n }\n];\n\nexport const expenseFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'name',\n displayName: 'Name'\n },\n {\n fieldName: 'scheduleId',\n displayName: 'Schedule Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Construction Id'\n },\n {\n fieldName: 'owner',\n displayName: 'Owner'\n },\n {\n fieldName: 'comments',\n displayName: 'Comments'\n },\n {\n fieldName: 'description',\n displayName: 'Description'\n },\n {\n fieldName: 'domainName',\n displayName: 'Domain Name'\n },\n {\n fieldName: 'invoiceNo',\n displayName: 'Invoice No'\n },\n {\n fieldName: 'valueExGst',\n displayName: 'Value ExGst'\n },\n {\n fieldName: 'valueIncGst',\n displayName: 'Value IncGst'\n },\n {\n fieldName: 'xeroBillNo',\n displayName: 'Xero Bill No'\n },\n {\n fieldName: 'xeroPoNo',\n displayName: 'Xero Po No'\n },\n {\n fieldName: 'paymentDueDate',\n displayName: 'Payment Due Date',\n isDate: true\n },\n {\n fieldName: 'paidAmountExGst',\n displayName: 'Paid Amount ExGst'\n },\n {\n fieldName: 'paidAmountIncGst',\n displayName: 'Paid Amount IncGst'\n },\n {\n fieldName: 'paidDate',\n displayName: 'Paid Date',\n isDate: true\n },\n {\n fieldName: 'invoiceDate',\n displayName: 'Invoice Date',\n isDate: true\n }\n];\n\nexport const paymentItemFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'paymentId',\n displayName: 'Payment Id'\n },\n {\n fieldName: 'boqId',\n displayName: 'Boq Id'\n },\n {\n fieldName: 'itemCode',\n displayName: 'Item Code'\n },\n {\n fieldName: 'originalQty',\n displayName: 'Original Qty'\n },\n {\n fieldName: 'completedQty',\n displayName: 'Completed Qty'\n },\n {\n fieldName: 'unitAmount',\n displayName: 'Unit Amount'\n },\n {\n fieldName: 'valueExGst',\n displayName: 'Value ExGst'\n },\n {\n fieldName: 'valueIncGst',\n displayName: 'Value IncGst'\n },\n {\n fieldName: 'rejectedDate',\n displayName: 'Rejected Date',\n isDate: true\n },\n {\n fieldName: 'approvedDate',\n displayName: 'Approved Date',\n isDate: true\n },\n {\n fieldName: 'approvedBy',\n displayName: 'Approved By',\n isUser: true\n },\n {\n fieldName: 'comments',\n displayName: 'Comments'\n },\n {\n fieldName: 'variationReason',\n displayName: 'Variation Reason'\n }\n];\n\nexport const invoiceFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Construction Id'\n },\n {\n fieldName: 'comments',\n displayName: 'Comments'\n },\n {\n fieldName: 'amountClaimedExGst',\n displayName: 'Amount Claimed ExGst'\n },\n {\n fieldName: 'amountClaimedIncGst',\n displayName: 'Amount Claimed IncGst'\n },\n {\n fieldName: 'rctiNo',\n displayName: 'Rcti No'\n },\n {\n fieldName: 'rctiValueExGst',\n displayName: 'Rcti Value ExGst'\n },\n {\n fieldName: 'rctiValueIncGst',\n displayName: 'Rcti Value IncGst'\n },\n {\n fieldName: 'retentionHeldExGst',\n displayName: 'Retention Held ExGst'\n },\n {\n fieldName: 'retentionHeldIncGst',\n displayName: 'Retention Held IncGst'\n },\n {\n fieldName: 'prePaymentExGst',\n displayName: 'PrePayment ExGst'\n },\n {\n fieldName: 'prePaymentIncGst',\n displayName: 'PrePayment IncGst'\n },\n {\n fieldName: 'xeroInvoiceDate',\n displayName: 'Xero Invoice Date',\n isDate: true\n },\n {\n fieldName: 'xeroInvoiceNo',\n displayName: 'Xero Invoice No'\n },\n {\n fieldName: 'xeroStatus',\n displayName: 'Xero Status'\n },\n {\n fieldName: 'paymentDueDate',\n displayName: 'Payment Due Date',\n isDate: true\n },\n {\n fieldName: 'paidAmountExGst',\n displayName: 'Paid Amount ExGst'\n },\n {\n fieldName: 'paidAmountIncGst',\n displayName: 'Paid Amount IncGst'\n },\n {\n fieldName: 'paidDate',\n displayName: 'Paid Date',\n isDate: true\n }\n];\n\nexport const commentFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'constructionId',\n displayName: 'Construction Id'\n },\n {\n fieldName: 'comment',\n displayName: 'Comment'\n }\n];\n\nexport const taskUserFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'userId',\n displayName: 'User',\n isUser: true\n },\n {\n fieldName: 'scheduleId',\n displayName: 'Task Id'\n },\n {\n fieldName: 'onSiteUtc',\n displayName: 'On-site Time',\n isDateTime: true\n },\n {\n fieldName: 'offSiteUtc',\n displayName: 'Off-site Time',\n isDateTime: true\n },\n {\n fieldName: 'completedUtc',\n displayName: 'Completed Date',\n isDate: true\n },\n {\n fieldName: 'confirmItemQtys',\n displayName: 'Confirm Item Qtys'\n }\n];\n\nexport const groupFields = [\n {\n fieldName: 'id',\n displayName: 'Id'\n },\n {\n fieldName: 'name',\n displayName: 'Name'\n },\n {\n fieldName: 'isSubcontractor',\n displayName: 'Is Subcontractor',\n isBool: true\n },\n {\n fieldName: 'canSchedule',\n displayName: 'Can Schedule',\n isBool: true\n },\n {\n fieldName: 'scheduleOrder',\n displayName: 'Schedule Order'\n },\n {\n fieldName: 'tasks',\n displayName: 'Tasks'\n },\n {\n fieldName: 'isActive',\n displayName: 'Is Active',\n isBool: true\n }\n];\n\nexport const getFields = (table) => {\n if (table === 'Constructions') return constructionFields;\n if (table === 'JobDelegations') return jobDelegations;\n if (table === 'Tasks') return taskFields;\n if (table === 'Boqs') return boqFields;\n if (table === 'Boms') return bomFields;\n if (table === 'Claims') return claimFields;\n if (table === 'Expenses') return expenseFields;\n if (table === 'PaymentItems') return paymentItemFields;\n if (table === 'Invoices') return invoiceFields;\n if (table === 'Comments') return commentFields;\n if (table === 'TaskUsers') return taskUserFields;\n if (table === 'Groups') return groupFields;\n return [];\n};\n","import React from 'react';\n\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { error: '', errorInfo: '', hasError: false };\n }\n\n static getDerivedStateFromError(error) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true, error };\n }\n\n componentDidCatch(error, errorInfo) {\n // What can we do with this error?\n console.log({ error, errorInfo });\n this.setState({ errorInfo });\n }\n\n render() {\n const { hasError, errorInfo, error } = this.state;\n\n if (hasError) {\n return (\n
\n
\n

\n There was an error in loading this page.{' '}\n {\n window.location.reload();\n }}\n >\n Reload this page\n {' '}\n

\n {errorInfo && (\n

\n \n Email the error\n \n

\n )}\n
\n
\n
\n {errorInfo && (\n
\n                  {error?.message}\n                  {errorInfo.componentStack.toString()}\n                
\n )}\n
\n
\n
\n );\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React, { useEffect, useState, useRef, useCallback, useMemo } from 'react';\nimport { useQuery, useMutation, useLazyQuery } from '@apollo/react-hooks';\nimport { Link, useHistory } from 'react-router-dom';\nimport gql from 'graphql-tag';\nimport { useAuth } from '../../auth/AuthProvider';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, Table, Col, Row, Spinner, Collapse } from 'reactstrap';\nimport { AvForm } from 'availity-reactstrap-validation';\nimport MediaQuery, { useMediaQuery } from 'react-responsive';\nimport Sync from './Sync';\nimport placeholder from '../../assets/img/placeholder.png';\nimport Select from 'react-select';\nimport { toast } from 'react-toastify';\nimport { getAddress, formatDate, formatDateTime, getDocTree } from '../../utils/utilFunctions';\nimport { getFields } from '../SystemSettings/StaticFieldLists';\n\nconst CONSTRUCTION_ATTRIBUTES = `\n id\n status\n comments\n workOrder\n releaseDate\n projectFSAM\n description\n address\n contactDetails\n buildType\n workType\n premises\n financialContact {\n displayName\n }\n deliveryPartnerPm\n adtechPm\n scheduler\n originalDueDate\n updatedDueDate\n dbydExpiryDate\n startDueDate\n laseDate\n onsiteDate\n crqDate\n crqNumber\n integrationDate\n acceleratedJob\n siteContact\n siteContactPhone\n customerRef\n bomComments\n contract\n region\n developer\n quoteNumber\n prePaymentNumber\n checklist\n lotNumber\n unitNumber\n streetNumber\n streetName\n roadType\n suburb\n state\n postCode\n boqs (orderBy: { path: \"itemType\", descending: false }) {\n id\n itemId\n code\n description\n itemType\n unitOfMeasure\n quantity\n variationQty\n }\n schedules {\n id\n name\n owner\n resource\n groupId\n issuedDate\n dueDate\n completedDate\n submittedDate\n comments\n initial\n ignored\n isPayment\n isReopened\n onsiteDate\n acceptedDate\n declinedDate\n ticketOfWork\n childTaskId\n externalJobLink\n items {\n id\n boqId\n childCode\n quantity\n completedQty\n variationReason\n rejectedDate\n rate\n }\n taskUsers {\n id\n userId\n scheduleId\n onSiteUtc\n offSiteUtc\n completedUtc\n confirmItemQtys\n comments\n user {\n id\n displayName\n }\n }\n fieldComments {\n id\n scheduleId\n userId\n comments\n createdUtc\n user {\n id\n displayName\n }\n }\n }\n payments {\n id\n name\n owner\n paymentItems {\n id\n itemCode\n comments\n }\n }\n attachments (orderBy: { path: \"createdUtc\", descending: true })\n {\n id\n title\n path\n url\n key\n sizeBytes\n tags\n createdUtc\n modifiedUtc\n comments\n isDocAttachment\n }\n`;\n\nexport const GET_CONSTRUCTION = gql`\n query ConstructionQuery($constructionId: ID) {\n construction(id: $constructionId) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n users(claim: \"IS_CONSTRUCTION_USER\") {\n id\n email\n firstName\n lastName\n displayName\n }\n groups {\n id\n name\n isSubcontractor\n }\n addressTypeSetting: systemSettings(where: { path: \"Name\", comparison: equal, value: \"Address Type\" }) {\n id\n name\n workType\n config\n }\n }\n`;\n\nconst GET_FIELD_ITEMS = gql`\n query FieldItemsQuery($taskId: ID!) {\n fieldItems(taskId: $taskId) {\n id\n code\n name\n description\n unitAmount\n unitOfMeasure\n }\n }\n`;\n\nconst GET_FIELD_WORK_TASK_SETTINGS = gql`\n query SystemSettingsQuery($workType: [String]) {\n optionalFields: systemSettings(\n where: [\n { path: \"Name\", comparison: equal, value: \"Field Work Task\" }\n { path: \"WorkType\", comparison: equal, value: $workType }\n ]\n ) {\n id\n name\n config\n }\n fieldWorkList: systemSettings(\n where: [\n { path: \"Name\", comparison: equal, value: \"Field Work List\" }\n { path: \"WorkType\", comparison: equal, value: $workType }\n ]\n ) {\n id\n name\n config\n }\n jobStatusSettings: systemSettings(\n where: [\n { path: \"Name\", comparison: equal, value: \"Job Status Settings\" }\n { path: \"WorkType\", comparison: equal, value: $workType }\n ]\n ) {\n id\n name\n config\n }\n customDisplayNames: systemSettings(\n where: [\n { path: \"Name\", comparison: equal, value: \"Optiona Construction Fields\" }\n { path: \"WorkType\", comparison: equal, value: $workType }\n ]\n ) {\n id\n name\n workType\n config\n }\n builders: lookups(where: { path: \"Name\", comparison: equal, value: \"Builder Lookup\" }) {\n name\n data\n }\n }\n`;\n\nconst ADD_BOQ_AND_ITEM = gql`\nmutation AddBoqAndItem($fieldBoqItem: FieldBoqItemDTOInput!) {\n updateConstructionAddBOQAndItem(fieldBoqItem: $fieldBoqItem) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_SCHEDULE_ITEM_COMPLETION = gql`\nmutation UpdateScheduleItemCompletion($item: ConstructionScheduleItemInput!) {\n updateConstructionScheduleItemCompletion(item: $item) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}\n`;\n\nconst UPDATE_TASKACCEPTED = gql`\nmutation UpdateConstructionTaskAccepted($scheduleId: ID!) {\n updateConstructionTaskAccepted(scheduleId: $scheduleId) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_TASKDECLINED = gql`\nmutation UpdateConstructionTaskDeclined($scheduleId: ID!) {\n updateConstructionTaskDeclined(scheduleId: $scheduleId) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_TASKUSERONSITE = gql`\nmutation UpdateTaskUserOnSite($taskUser: TaskUserInput!) {\n updateTaskUserOnSite(taskUser: $taskUser) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_TASKUSEROFFSITE = gql`\nmutation UpdateTaskUserOffSite($taskUser: TaskUserInput!) {\n updateTaskUserOffSite(taskUser: $taskUser) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_TASKUSERCOMPLETE = gql`\nmutation UpdateTaskUserComplete($taskUser: TaskUserInput!, $partial: Boolean) {\n updateTaskUserComplete(taskUser: $taskUser, partial: $partial) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_TASKUSER_COMMENTS = gql`\n mutation UpdateTaskUserComments($taskUser: TaskUserInput!) {\n updateTaskUserComments(taskUser: $taskUser) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n }\n`;\n\nconst UPDATE_TASKSUBMITTED = gql`\nmutation UpdateTaskSubmitted($scheduleId: ID!) {\n updateTaskSubmitted(scheduleId: $scheduleId) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_CONFIRMQTY = gql`\nmutation UpdateTaskUserConfirmQty($taskUser: TaskUserInput!) {\n updateTaskUserConfirmQty(taskUser: $taskUser) {\n ${CONSTRUCTION_ATTRIBUTES}\n }\n}`;\n\nconst UPDATE_TICKETOFWORK = gql`\n mutation UpdateTicketOfWork($id: ID!, $ticketOfWork: String!) {\n updateTicketOfWork(id: $id, ticketOfWork: $ticketOfWork) {\n id\n ticketOfWork\n }\n }\n`;\n\nconst UPDATE_JOB_STATUS = gql`\n mutation UpdateJobStatus($id: ID!, $status: String!) {\n updateJobStatus(id: $id, status: $status) {\n id\n }\n }\n`;\n\nconst UPDATE_FIELD_COMMENT = gql`\n mutation UpdateFieldComment($fieldComment: FieldCommentInput!) {\n updateFieldComment(fieldComment: $fieldComment) {\n id\n scheduleId\n comments\n createdUtc\n user {\n id\n displayName\n }\n }\n }\n`;\n\nconst DELETE_FIELD_COMMENT = gql`\n mutation DeleteFieldComment($id: ID!) {\n deleteFieldComment(id: $id)\n }\n`;\n\nconst UPDATE_DEVELOPER_AND_SITE_CONTACT = gql`\n mutation UpdateDeveloperAndSiteContact(\n $id: ID!\n $developer: String!\n $siteContact: String!\n $siteContactPhone: String!\n ) {\n updateDeveloperAndSiteContact(\n id: $id\n developer: $developer\n siteContact: $siteContact\n siteContactPhone: $siteContactPhone\n )\n }\n`;\n\nfunction MapLink({ thisaddress }) {\n const directionsUrl = `https://www.google.com/maps/search/?api=1&query=${thisaddress}`;\n\n return (\n \n Location for {thisaddress}\n \n );\n}\n\nconst ConstructionField = ({ label, value, icon, onClick, onLabelClick, ...props }) => {\n const isSmallScreen = useMediaQuery({ query: '(max-width: 767px)' });\n\n const cursorStyle = { cursor: onClick || onLabelClick ? 'pointer' : 'default' };\n\n return (\n \n \n {icon} {label}\n \n
\n {label === 'Site Contact:' ? (\n \n {value.name ?? ''} {value.phone ?? ''}\n \n ) : (\n value\n )}\n
\n \n );\n};\n\nconst Construction = (props) => {\n const { me, hasClaim } = useAuth();\n\n const [tags, setTags] = useState([]); // we'll use this for which ones are selected\n const [categories, setCategories] = useState([]); // we'll use to for which ones are available\n const [construction, setConstruction] = useState(null);\n const [fieldTask, setFieldTask] = useState(null);\n const [images, setImages] = useState([]);\n const [nonImages, setNonImages] = useState([]);\n const [docTree, setDocTree] = useState([]);\n const [expandedRows, setExpandedRows] = useState([]);\n const [groups, setGroups] = useState([]);\n const [rejectTask, setRejectTask] = useState([]);\n const [imageDetails, setImageDetails] = useState(null);\n const [isStructuredAddress, setIsStructuredAddress] = useState(false);\n const [optionalFields, setOptionalFields] = useState([]);\n const [statusSettings, setStatusSettings] = useState([]);\n const [editJobStatus, setEditJobStatus] = useState(null);\n const [editDeveloperAndContact, setEditDeveloperAndContact] = useState(null);\n const [canEditDeveloper, setCanEditDeveloper] = useState(false);\n const [canEditSiteContact, setCanEditSiteContact] = useState(null);\n const [schedulerDisplayName, setSchedulerDisplayName] = useState('Scheduler');\n const [developerDisplayName, setDeveloperDisplayName] = useState('Developer');\n const [builderList, setBuilderList] = useState([]);\n const [isAuthed, setIsAuthed] = useState(false);\n const [hasScopingBonus, setHasScopingBonus] = useState(false);\n\n const { loading, data, refetch, error } = useQuery(GET_CONSTRUCTION, {\n fetchPolicy: 'cache-and-network',\n variables: { constructionId: props.match.params.constructionId }\n });\n\n const [settingsQuery, { data: systemSettings }] = useLazyQuery(GET_FIELD_WORK_TASK_SETTINGS, {\n fetchPolicy: 'no-cache'\n });\n\n // Field Items - the fetching of this shouldn't effect the loading of the page\n const [fieldItemsQuery, { data: fieldItems }] = useLazyQuery(GET_FIELD_ITEMS, {\n fetchPolicy: 'no-cache'\n });\n\n const [updateConstructionAddBOQAndItem] = useMutation(ADD_BOQ_AND_ITEM);\n const [updateConstructionScheduleItemCompletion] = useMutation(UPDATE_SCHEDULE_ITEM_COMPLETION);\n const [updateConstructionTaskAccepted] = useMutation(UPDATE_TASKACCEPTED);\n const [updateConstructionTaskDeclined] = useMutation(UPDATE_TASKDECLINED);\n const [updateTaskUserOnSite] = useMutation(UPDATE_TASKUSERONSITE);\n const [updateTaskUserOffSite] = useMutation(UPDATE_TASKUSEROFFSITE);\n const [updateTaskUserComplete] = useMutation(UPDATE_TASKUSERCOMPLETE);\n const [updateTaskUserConfirmQty] = useMutation(UPDATE_CONFIRMQTY);\n const [updateTaskUserComments] = useMutation(UPDATE_TASKUSER_COMMENTS);\n const [updateTaskSubmitted] = useMutation(UPDATE_TASKSUBMITTED);\n const [resetTicketOfWork] = useMutation(UPDATE_TICKETOFWORK);\n const [updateJobStatus] = useMutation(UPDATE_JOB_STATUS);\n const [updateFieldComment] = useMutation(UPDATE_FIELD_COMMENT);\n const [deleteFieldComment] = useMutation(DELETE_FIELD_COMMENT);\n const [updateDeveloperAndSiteContact] = useMutation(UPDATE_DEVELOPER_AND_SITE_CONTACT);\n\n const history = useHistory();\n\n const taskId = parseInt(props.match.params.taskId);\n\n useEffect(() => {\n if (data?.construction) {\n const updatedConstruction = { ...data.construction };\n\n const scheduleIndex = updatedConstruction.schedules.findIndex((schedule) => schedule.id === taskId);\n if (scheduleIndex !== -1) {\n const updatedSchedule = { ...updatedConstruction.schedules[scheduleIndex] };\n\n if (updatedSchedule.fieldComments && updatedSchedule.fieldComments.length > 0) {\n updatedSchedule.fieldComments = updatedSchedule.fieldComments.sort(\n (a, b) => new Date(b.createdUtc) - new Date(a.createdUtc)\n );\n }\n\n updatedConstruction.schedules[scheduleIndex] = updatedSchedule;\n }\n\n setConstruction(updatedConstruction);\n\n settingsQuery({\n variables: { workType: data.construction.workType }\n });\n\n fieldItemsQuery({\n variables: { taskId }\n });\n }\n\n if (data?.groups) {\n setGroups(data.groups);\n }\n\n if (data?.addressTypeSetting?.length) {\n const workTypeAddressTypeData = data.addressTypeSetting.find((x) => x.workType === data.construction.workType);\n if (workTypeAddressTypeData) {\n const config = JSON.parse(workTypeAddressTypeData.config);\n setIsStructuredAddress(config?.addressSetting?.addressType === 'structured');\n setHasScopingBonus(config?.addressSetting?.hasScopingBonus);\n }\n }\n }, [data, taskId, settingsQuery, fieldItemsQuery]);\n\n useEffect(() => {\n if (systemSettings?.optionalFields?.length) {\n const _optionalFields = getFields('Constructions')\n .concat(getFields('Tasks'))\n .filter((f) => f.isOptionalFieldWorkTask)\n .map((f) => ({\n fieldName: f.fieldName,\n show: true\n }));\n\n const storedFields = JSON.parse(systemSettings.optionalFields[0].config).fields;\n _optionalFields.forEach((field) => {\n const storedField = storedFields.find((x) => x.fieldName === field.fieldName);\n if (storedField) {\n field.show = storedField.show;\n }\n });\n\n setOptionalFields(_optionalFields.filter((f) => f.show).map((f) => f.fieldName));\n }\n\n if (systemSettings?.fieldWorkList?.length) {\n const fieldList = JSON.parse(systemSettings.fieldWorkList[0].config).fields;\n const _canEditDeveloper = fieldList.some((f) => f.canEdit && f.fieldName === 'developer');\n setCanEditDeveloper(_canEditDeveloper);\n const _canEditSiteContact = fieldList.some((f) => f.canEdit && f.fieldName === 'siteContact');\n setCanEditSiteContact(_canEditSiteContact);\n }\n\n if (systemSettings?.jobStatusSettings?.length) {\n const storedStatuses = JSON.parse(systemSettings.jobStatusSettings[0].config).statuses;\n setStatusSettings(storedStatuses);\n }\n\n if (systemSettings?.customDisplayNames?.length) {\n const customfields = JSON.parse(systemSettings.customDisplayNames[0].config)?.fields;\n\n if (customfields) {\n const customScheduler = customfields.find((x) => x.fieldName === 'scheduler');\n if (customScheduler) {\n setSchedulerDisplayName(customScheduler.displayName);\n }\n\n const customDeveloper = customfields.find((x) => x.fieldName === 'developer');\n if (customDeveloper) {\n setDeveloperDisplayName(customDeveloper.displayName);\n }\n }\n }\n\n if (systemSettings?.builders) {\n const builderLookup = systemSettings.builders[0];\n setBuilderList(builderLookup?.data);\n }\n }, [systemSettings]);\n\n useEffect(() => {\n const temp = [];\n if (construction) {\n data.construction.attachments.forEach((a) => {\n if (a.tags) {\n a.tags.split(';').forEach((t) => {\n if (!temp.includes(t)) {\n temp.push(t);\n }\n });\n }\n });\n\n setCategories(temp);\n\n setImages(\n data.construction.attachments.filter(\n (a) => a.key.endsWith('.jpg') || a.key.endsWith('.png') || (a.key.endsWith('.jpeg') && !a.isDocAttachment)\n )\n );\n setNonImages(\n data.construction.attachments.filter(\n (a) => (!a.key.endsWith('.jpg') && !a.key.endsWith('.png') && !a.key.endsWith('.jpeg')) || a.isDocAttachment\n )\n );\n\n const _fieldTask = construction.schedules.find((x) => x.id === taskId);\n setFieldTask(_fieldTask);\n\n if (me && (hasClaim('CAN_VIEW_ALL_GROUPS') || me.groupUsers.some((x) => x.group.id === _fieldTask.groupId))) {\n setIsAuthed(true);\n }\n setRejectTask(_fieldTask.items.some((i) => !!i.rejectedDate));\n }\n }, [construction, groups, me, data]);\n\n useEffect(() => {\n setDocTree(getDocTree(nonImages));\n }, [nonImages]);\n\n const shortToast = (message, props) => {\n toast(message, { ...props, toastId: 'success1', autoClose: 1500 });\n };\n\n const toggleStatus = (tag) => {\n if (tags.includes(tag)) {\n setTags(tags.filter((t) => t !== tag));\n } else {\n setTags(tags.concat(tag));\n }\n };\n\n const addBoqAndItem = useCallback(\n async (scheduleId, item) => {\n const fieldBoqItem = {\n scheduleId,\n itemId: item.itemId,\n quantity: item.variationQty,\n reason: item.reason\n };\n try {\n const result = await updateConstructionAddBOQAndItem({ variables: { fieldBoqItem: fieldBoqItem } });\n if (result && result.data?.updateConstructionAddBOQAndItem) {\n shortToast('Added new item to construction', { type: 'success' });\n setConstruction(result.data.updateConstructionAddBOQAndItem);\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error adding new item to construction', { type: 'error' });\n }\n },\n [updateConstructionAddBOQAndItem]\n );\n\n const updateScheduleItemCompletion = useCallback(\n async (item) => {\n const { code, unitOfMeasure, name, description, ...itemWithoutExtraFields } = item;\n try {\n const result = await updateConstructionScheduleItemCompletion({ variables: { item: itemWithoutExtraFields } });\n if (result && result.data?.updateConstructionScheduleItemCompletion) {\n shortToast('Changed item completion', { type: 'success' });\n setConstruction(result.data.updateConstructionScheduleItemCompletion);\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error updating completion of item', { type: 'error' });\n }\n },\n [updateConstructionScheduleItemCompletion]\n );\n\n const handleTaskAccepted = useCallback(\n async (scheduleId) => {\n try {\n const result = await updateConstructionTaskAccepted({ variables: { scheduleId } });\n if (result && result.data?.updateConstructionTaskAccepted) {\n shortToast('Accepted Task', { type: 'success' });\n setConstruction(result.data.updateConstructionTaskAccepted);\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Accepting Task', { type: 'error' });\n }\n },\n [updateConstructionTaskAccepted]\n );\n\n const handleTaskDeclined = useCallback(\n async (scheduleId) => {\n try {\n const result = await updateConstructionTaskDeclined({ variables: { scheduleId } });\n if (result && result.data?.updateConstructionTaskDeclined) {\n shortToast('Declined Task', { type: 'success' });\n setConstruction(result.data.updateConstructionTaskDeclined);\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Declining Task', { type: 'error' });\n }\n },\n [updateConstructionTaskDeclined]\n );\n\n const handleTaskUserOnSite = useCallback(\n async (scheduleId, taskUser) => {\n let _taskUser = taskUser;\n if (!taskUser) {\n _taskUser = {\n id: 0,\n userId: me.id,\n scheduleId: scheduleId,\n onSiteUtc: null,\n offSiteUtc: null,\n completedUtc: null,\n confirmItemQtys: false\n };\n }\n try {\n const result = await updateTaskUserOnSite({\n variables: { taskUser: _taskUser }\n });\n if (result && result.data?.updateTaskUserOnSite) {\n //shortToast('Set Onsite', { type: 'success' });\n setConstruction(result.data.updateTaskUserOnSite);\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Setting Onsite', { type: 'error' });\n }\n },\n [updateTaskUserOnSite]\n );\n\n const handleTaskUserOffSite = useCallback(\n async (taskUser) => {\n try {\n const result = await updateTaskUserOffSite({\n variables: { taskUser }\n });\n if (result && result.data?.updateTaskUserOffSite) {\n shortToast('Set Offsite', { type: 'success' });\n setConstruction(result.data.updateTaskUserOffSite);\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Setting Offsite', { type: 'error' });\n }\n },\n [updateTaskUserOffSite]\n );\n\n const handleTaskUserComplete = useCallback(\n async (taskUser, partial) => {\n try {\n const result = await updateTaskUserComplete({ variables: { taskUser, partial } });\n if (result && result.data?.updateTaskUserComplete) {\n shortToast('Task Complete', { type: 'success' });\n setConstruction(result.data.updateTaskUserComplete);\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Completing Task', { type: 'error' });\n }\n },\n [updateTaskUserComplete]\n );\n\n const handleTaskSubmitted = useCallback(\n async (scheduleId) => {\n try {\n const result = await updateTaskSubmitted({ variables: { scheduleId } });\n if (result && result.data?.updateTaskSubmitted) {\n shortToast('Task Submitted', { type: 'success' });\n setConstruction(result.data.updateTaskSubmitted);\n history.push('/field/construction');\n } else {\n toast('Failed to retrieve updated construction - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Setting Submitted', { type: 'error' });\n }\n },\n [updateTaskSubmitted]\n );\n\n const handleTaskUserConfirmQty = useCallback(\n async (taskUser) => {\n try {\n const result = await updateTaskUserConfirmQty({ variables: { taskUser } });\n if (result && result.data?.updateTaskUserConfirmQty) {\n shortToast('Item QTYs Confirmed', { type: 'success' });\n setConstruction(result.data.updateTaskUserConfirmQty);\n } else {\n toast('Failed to retrieve updated Task User - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Updating Task', { type: 'error' });\n }\n },\n [updateTaskUserConfirmQty]\n );\n\n const handleTaskUserComments = useCallback(\n async (taskUser) => {\n try {\n const result = await updateTaskUserComments({ variables: { taskUser } });\n if (result && result.data?.updateTaskUserComments) {\n shortToast('Task User Comments Updated', { type: 'success' });\n setConstruction(result.data.updateTaskUserComments);\n } else {\n toast('Failed to retrieve updated Task User - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error Updating Task', { type: 'error' });\n }\n },\n [updateTaskUserComments]\n );\n\n const handleResetTicketOfWork = useCallback(\n async (scheduleId) => {\n try {\n const result = await resetTicketOfWork({ variables: { id: scheduleId, ticketOfWork: JSON.stringify({}) } });\n if (result && result.data?.updateTicketOfWork) {\n shortToast('Ticket of Work reset successfully', { type: 'success' });\n } else {\n toast('Failed to retrieve ticket of work - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error resetting Ticket of Work', { type: 'error' });\n }\n },\n [resetTicketOfWork]\n );\n\n const handleUpdateJobStatus = useCallback(\n async (jobId, status) => {\n try {\n const result = await updateJobStatus({\n variables: {\n id: jobId,\n status: status\n }\n });\n if (result && result.data?.updateJobStatus) {\n shortToast('Job Status updated successfully', { type: 'success' });\n setEditJobStatus(null);\n setConstruction(\n (prevJob) =>\n (prevJob = {\n ...prevJob,\n status: status\n })\n );\n } else {\n toast('Failed to update Job Status - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error updating Job Status', { type: 'error' });\n }\n },\n [updateJobStatus]\n );\n\n const handleUpdateDeveloperAndContact = useCallback(\n async (jobId, developer, siteContact, siteContactPhone) => {\n try {\n const result = await updateDeveloperAndSiteContact({\n variables: {\n id: jobId,\n developer: developer,\n siteContact: siteContact,\n siteContactPhone: siteContactPhone\n }\n });\n if (result && result.data?.updateDeveloperAndSiteContact) {\n shortToast('Developer and Site Contact updated successfully', { type: 'success' });\n setEditDeveloperAndContact(null);\n setConstruction((prevJob) => ({\n ...prevJob,\n developer: developer,\n siteContact: siteContact,\n siteContactPhone: siteContactPhone\n }));\n } else {\n toast('Failed to update - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error updating', { type: 'error' });\n }\n },\n [updateDeveloperAndSiteContact]\n );\n\n const handleUpdateFieldComment = useCallback(\n async (fieldCommentToUpdate) => {\n try {\n const { createdUtc, user, ...fieldComment } = fieldCommentToUpdate;\n const updateData = {\n ...fieldComment,\n userId: me.id\n };\n\n const result = await updateFieldComment({\n variables: { fieldComment: updateData },\n operationName: 'UpdateFieldComment'\n });\n\n if (result && result.data?.updateFieldComment) {\n const updatedComment = {\n ...result.data.updateFieldComment,\n createdUtc: result.data.updateFieldComment.createdUtc.endsWith('Z')\n ? result.data.updateFieldComment.createdUtc.slice(0, -1)\n : result.data.updateFieldComment.createdUtc\n };\n\n setConstruction((prevConstruction) => {\n const schedules = [...prevConstruction.schedules];\n const scheduleIndex = schedules.findIndex((schedule) => schedule.id === taskId);\n\n if (scheduleIndex !== -1) {\n const updatedSchedule = { ...schedules[scheduleIndex] };\n\n const commentIndex = updatedSchedule.fieldComments.findIndex(\n (comment) => comment.id === updatedComment.id\n );\n if (commentIndex !== -1) {\n updatedSchedule.fieldComments[commentIndex] = updatedComment;\n } else {\n updatedSchedule.fieldComments.push(updatedComment);\n }\n updatedSchedule.fieldComments.sort((a, b) => new Date(b.createdUtc) - new Date(a.createdUtc));\n\n schedules[scheduleIndex] = updatedSchedule;\n }\n\n return { ...prevConstruction, schedules };\n });\n } else {\n toast('Failed to update field comment - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error updating field comment', { type: 'error' });\n }\n },\n [updateFieldComment, taskId]\n );\n\n const handleDeleteFieldComment = useCallback(\n async (fieldCommentId) => {\n try {\n const result = await deleteFieldComment({\n variables: { id: fieldCommentId }\n });\n\n if (result) {\n setConstruction((prevConstruction) => {\n const schedules = [...prevConstruction.schedules];\n const scheduleIndex = schedules.findIndex((schedule) => schedule.id === taskId);\n\n if (scheduleIndex !== -1) {\n const updatedSchedule = { ...schedules[scheduleIndex] };\n updatedSchedule.fieldComments = updatedSchedule.fieldComments.filter(\n (comment) => comment.id !== fieldCommentId\n );\n schedules[scheduleIndex] = updatedSchedule;\n }\n\n return { ...prevConstruction, schedules };\n });\n } else {\n toast('Failed to delete field comment - try refresh', { type: 'error' });\n }\n } catch (error) {\n toast('Error deleting field comment', { type: 'error' });\n }\n },\n [deleteFieldComment, taskId]\n );\n\n const checkIsSubcontractor = (groupId) => {\n const group = groups.find((x) => x.id === groupId);\n return !!group?.isSubcontractor;\n };\n\n const onImageEdit = (newImageDetails) => {\n const image = images.filter((x) => x.id === newImageDetails.id)[0];\n image.title = newImageDetails.title;\n image.url = newImageDetails.url;\n image.comments = newImageDetails.comments;\n setImages([...images]);\n };\n\n const toggleRowExpand = (id) => {\n const index = expandedRows.indexOf(id);\n if (index !== -1) {\n expandedRows.splice(index, 1);\n } else {\n expandedRows.push(id);\n }\n\n setExpandedRows([...expandedRows]);\n };\n\n const FileRow = ({ branch, depth = 0 }) => {\n const doc = branch.doc;\n const leftPadding = depth * 10;\n return (\n \n {doc && (\n
\n \n {doc.title}\n \n
\n )}\n {!doc && (\n toggleRowExpand(branch.rowId)}\n style={{ cursor: 'pointer', fontWeight: 500, paddingLeft: leftPadding }}\n >\n \n \n \n {branch.name}\n \n )}\n {expandedRows.includes(branch.rowId) &&\n branch.children\n .filter((x) => {\n return !x.markedForDeletion && !x.doc?.markedForDeletion;\n })\n .map((branch) => {\n return FileRow({ key: branch.rowId, branch: branch, depth: depth + 1 });\n })}\n
\n );\n };\n\n return (\n <>\n \n\n {construction && systemSettings && fieldTask && (\n <>\n
\n
\n
\n
\n
{construction.workOrder}
\n
\n
\n
\n \n Back to task list\n {' '}\n {hasClaim('CAN_RESET_CONSTRUCTION') && (\n \n Full Construction Job\n \n )}\n
\n
\n
\n\n \n
\n
\n \n status.fieldEdit)\n ? () => setEditJobStatus(construction)\n : undefined\n }\n icon={statusSettings?.some((status) => status.fieldEdit) ? : null}\n />\n {optionalFields.includes('description') && (\n \n )}\n {optionalFields.includes('workType') && (\n \n )}\n {optionalFields.includes('region') && (\n \n )}\n {optionalFields.includes('deliveryPartner') && (\n \n )}\n {optionalFields.includes('deliveryPartnerPm') && (\n \n )}\n {optionalFields.includes('scheduler') && (\n \n )}\n {optionalFields.includes('developer') && (\n setEditDeveloperAndContact(construction)\n : undefined\n }\n icon={canEditDeveloper || canEditSiteContact ? : null}\n />\n )}\n {optionalFields.includes('buildType') && (\n \n )}\n {optionalFields.includes('acceleratedJob') && (\n \n )}\n {optionalFields.includes('dueDate') && (\n \n )}\n {optionalFields.includes('onsiteDate') && (\n \n )}\n {optionalFields.includes('integrationDate') && (\n \n )}\n {optionalFields.includes('dbydExpiryDate') && (\n \n )}\n {optionalFields.includes('laseDate') && (\n \n )}\n {optionalFields.includes('crqDate') && (\n \n )}\n {optionalFields.includes('crqNumber') && (\n \n )}\n {optionalFields.includes('siteContactPhone') && (\n setEditDeveloperAndContact(construction)\n : undefined\n }\n icon={canEditDeveloper || canEditSiteContact ? : null}\n />\n )}\n {optionalFields.includes('customerRef') && (\n \n )}\n \n {hasScopingBonus && (\n \n \n {construction.developer && construction.siteContactPhone\n ? 'Scoping complete'\n : 'To claim a scoping bonus, please ensure Developer and Site Contact Phone number are updated.'}\n \n
\n )}\n
\n {editJobStatus && (\n setEditJobStatus(null)}>\n Update Job Status\n \n
{isStructuredAddress ? getAddress(editJobStatus) : <>{editJobStatus.address}}
\n
\n
\n setEditJobStatus({ ...editJobStatus, status: e.target.value })}\n >\n {statusSettings\n .filter((x) => x.fieldEdit)\n .map((status) => (\n \n ))}\n \n
\n
\n \n \n {\n handleUpdateJobStatus(editJobStatus.id, editJobStatus.status);\n }}\n >\n Update\n \n \n
\n )}\n {editDeveloperAndContact && (\n setEditDeveloperAndContact(null)}>\n Edit Developer and Site Contact\n \n
\n {isStructuredAddress ? getAddress(editDeveloperAndContact) : editDeveloperAndContact.address}\n
\n
\n
\n \n \n setEditDeveloperAndContact({\n ...editDeveloperAndContact,\n developer: e.target.value\n })\n }\n >\n \n {builderList.map((builder) => (\n \n ))}\n \n
\n
\n \n \n setEditDeveloperAndContact({\n ...editDeveloperAndContact,\n siteContact: e.target.value\n })\n }\n />\n
\n
\n \n \n setEditDeveloperAndContact({\n ...editDeveloperAndContact,\n siteContactPhone: e.target.value\n })\n }\n />\n
\n
\n \n \n {\n handleUpdateDeveloperAndContact(\n editDeveloperAndContact.id,\n editDeveloperAndContact.developer,\n editDeveloperAndContact.siteContact,\n editDeveloperAndContact.siteContactPhone\n );\n }}\n >\n Update\n \n \n
\n )}\n \n\n {isAuthed && (\n
\n
\n {rejectTask ? 'Scheduled Task has rejected item quantities' : 'Scheduled Task'}\n
\n
\n \n
\n
\n )}\n\n
\n
Attachments
\n
\n
\n {categories.map((category, index) => {\n return (\n toggleStatus(category)}\n >\n {category}\n \n );\n })}\n
\n\n {docTree &&\n docTree.map((doc, index) => {\n const aTags = doc.tags ? doc.tags.split(';') : [];\n var selected = false;\n\n aTags.forEach((t) => {\n if (tags.includes(t)) {\n selected = true;\n }\n });\n return selected ? FileRow({ key: index, branch: doc }) : null;\n })}\n\n {images && (\n
\n {images.map((image, index) => {\n const aTags = image.tags ? image.tags.split(';') : [];\n var selected = false;\n\n aTags.forEach((t) => {\n if (tags.includes(t)) {\n selected = true;\n }\n });\n return selected ? (\n
\n {/* \"...\" */}\n {\n setImageDetails(image);\n }}\n />\n
\n {image.comments}\n
\n
\n ) : null;\n })}\n
\n )}\n
\n
\n \n )}\n {imageDetails && (\n onImageEdit(newImageDetails)}\n onClose={() => setImageDetails(null)}\n />\n )}\n \n );\n};\n\nconst ConstructionSchedule = ({\n construction,\n schedule,\n fieldItems,\n onAddItem,\n onChangeItem,\n handleTaskAccepted,\n handleTaskDeclined,\n handleTaskUserOnSite,\n handleTaskUserComplete,\n handleTaskSubmitted,\n handleTaskUserConfirmQty,\n handleTaskUserOffSite,\n handleTaskUserComments,\n handleResetTicketOfWork,\n handleUpdateFieldComment,\n handleDeleteFieldComment,\n isSubcontractor,\n isFinanceOrSub,\n isReject\n}) => {\n const { me, hasClaim } = useAuth();\n\n const [scheduleItems, setScheduleItems] = useState([]);\n\n const [showOnSite, setShowOnSite] = useState(false);\n const [showComplete, setShowComplete] = useState(false);\n const [taskUser, setTaskUser] = useState(null);\n const [taskUserComments, setTaskUserComments] = useState([]);\n const [confirmItemQtyOnComplete, setConfirmItemQtyOnComplete] = useState(false);\n const [showClaimCommentEdit, setShowClaimCommentEdit] = useState(false);\n const [editFieldComment, setEditFieldComment] = useState(null);\n const [showPartialCompleteComments, setShowPartialCompleteComments] = useState(false);\n const [commentsUpdated, setCommentsUpdated] = useState(false);\n const [showOnsiteModel, setShowOnsiteModel] = useState(false);\n\n useEffect(() => {\n if (commentsUpdated) {\n handleComplete(true);\n setCommentsUpdated(false);\n }\n }, [commentsUpdated]);\n\n useEffect(() => {\n if (!fieldItems || fieldItems.length === 0) {\n return;\n }\n\n const filteredScheduleItems = schedule.items.filter((x) => x.childCode === null);\n const customScheduleItems = filteredScheduleItems.map((taskItem) => {\n const itemId = construction.boqs.find((x) => x.id === taskItem.boqId)?.itemId;\n const fieldItem = fieldItems.find((x) => x.id === itemId);\n return {\n ...taskItem,\n code: fieldItem?.code,\n rate: fieldItem?.unitAmount,\n unitOfMeasure: fieldItem?.unitOfMeasure,\n name: fieldItem?.name,\n description: fieldItem?.description\n };\n });\n setScheduleItems(customScheduleItems);\n }, [construction.boqs, schedule, schedule.items, fieldItems]);\n\n useEffect(() => {\n let _taskUser = {\n ...schedule.taskUsers\n .filter((x) => x.userId === me.id)\n .sort((a, b) => new Date(b.onSiteUtc) - new Date(a.onSiteUtc))?.[0]\n };\n _taskUser = _taskUser.id ? _taskUser : null;\n const taskUsers = schedule.taskUsers\n .filter((x) => !!x.comments)\n .sort((a, b) => new Date(b.onSiteUtc) - new Date(a.onSiteUtc));\n setTaskUserComments(taskUsers?.filter((x) => !!x.comments));\n delete _taskUser?.user;\n setTaskUser(_taskUser);\n if (!schedule.completedDate) {\n if (!_taskUser || _taskUser.offSiteUtc || _taskUser.completedUtc) {\n setShowComplete(false);\n if (!_taskUser?.completedUtc || schedule.isReopened) {\n setShowOnSite(true);\n }\n } else if (!_taskUser.completedUtc) {\n setShowComplete(true);\n }\n }\n }, [schedule]);\n\n const handleComplete = (partial = false) => {\n setShowComplete(false);\n handleTaskUserComplete(taskUser, partial);\n };\n\n const checkSubmit = (scheduleId) => {\n if (taskUser && !taskUser.confirmItemQtys && !!scheduleItems && scheduleItems.length > 0) {\n setConfirmItemQtyOnComplete(true);\n } else {\n handleTaskSubmitted(scheduleId);\n }\n };\n\n return (\n <>\n \n
\n
\n {schedule.name}\n
\n
\n {!(schedule.acceptedDate || schedule.declinedDate) && !schedule.completedDate && isSubcontractor && (\n <>\n {' '}\n \n \n )}\n {schedule.acceptedDate &&
Date Accepted: {schedule.acceptedDate.substr(0, 10)}
}\n {schedule.declinedDate &&
Date Declined: {schedule.declinedDate.substr(0, 10)}
}\n
\n
\n {(!isSubcontractor || schedule.acceptedDate) && schedule.completedDate && !schedule.submittedDate && (\n \n )}{' '}\n {(!isSubcontractor || schedule.acceptedDate) && (\n <>\n {showComplete ? (\n <>\n {' '}\n {' '}\n {' '}\n {schedule.externalJobLink && (\n \n )}\n \n ) : (\n showOnSite &&\n !schedule.completedDate && (\n {\n handleTaskUserOnSite(schedule.id, taskUser);\n if (schedule.externalJobLink) {\n setShowOnsiteModel(true);\n }\n }}\n >\n I'm Onsite\n \n )\n )}\n\n
\n \n Capture Images\n {' '}\n \n Upload files\n \n
\n \n )}\n
\n
\n {!!schedule.comments && schedule.comments !== '' && (\n
\n
\n
\n Comments: {schedule.comments}\n
\n
\n
\n )}\n\n {!!scheduleItems && scheduleItems.length > 0 && (\n
\n
\n \n
\n
\n )}\n\n
\n
\n \n {schedule.fieldComments && schedule.fieldComments.length > 0 ? (\n
\n {schedule.fieldComments.map((comment, index) => {\n const isCommentOwner = me.id === comment.user?.id;\n\n return (\n
\n
\n {isCommentOwner ? (\n setEditFieldComment(comment)}\n style={{\n background: 'none',\n border: 'none',\n color: 'black',\n padding: 0,\n margin: 0,\n textDecoration: 'none',\n boxShadow: 'none',\n cursor: 'pointer'\n }}\n className=\"text-left font-weight-bold p-0\"\n >\n {formatDateTime(comment.createdUtc) + ': '}\n \n ) : (\n {formatDateTime(comment.createdUtc) + ': '}\n )}{' '}\n {comment.comments}\n
\n
\n );\n })}\n
\n ) : (\n
No Field Comments
\n )}\n {schedule.completedDate && !schedule.submittedDate ? (\n \n ) : (\n <>{taskUserComments && taskUserComments.length > 0 &&

Completions Comment

}\n )}\n {taskUserComments &&\n taskUserComments.length > 0 &&\n taskUserComments.map((tuc, index) => {\n return (\n
\n
\n \n {formatDate(tuc.onSiteUtc) + ' - '} {tuc.user?.displayName + ': '}\n \n {tuc.comments}\n
\n
\n );\n })}\n
\n
\n \n \n Please Confirm item quantities\n \n \n \n \n\n \n Comments\n \n \n setTaskUser({\n ...taskUser,\n comments: e.target.value\n })\n }\n >\n \n \n \n {\n handleTaskUserComments(taskUser);\n setShowClaimCommentEdit(false);\n }}\n >\n Save\n \n \n \n\n {editFieldComment && (\n setEditFieldComment(null)}>\n Edit Field Comment\n \n
\n \n setEditFieldComment({\n ...editFieldComment,\n comments: e.target.value\n })\n }\n />\n
\n
\n \n {editFieldComment.id && (\n {\n handleDeleteFieldComment(editFieldComment.id);\n setEditFieldComment(null);\n }}\n className=\"mr-auto\"\n >\n Delete\n \n )}\n \n {\n handleUpdateFieldComment(editFieldComment);\n setEditFieldComment(null);\n }}\n >\n Update\n \n \n
\n )}\n\n \n \n Comments\n
Partially Complete Reason
\n
\n \n \n setTaskUser({\n ...taskUser,\n comments: e.target.value\n })\n }\n >\n \n \n \n {\n await handleTaskUserComments(taskUser);\n setCommentsUpdated(true);\n setShowPartialCompleteComments(false);\n }}\n >\n Save\n \n \n
\n {/* Onsite Model: show a message saying \"This will take you to the job in Novus\" and Start Card link button */}\n \n Onsite\n \n
\n

\n Click the Start Card button below\n
\n This will take you to the Novus Login page\n
\n After logging in it will redirect to the job page\n

\n

\n 1) First click the yellow \"Enroute\" button, it will then change to \"Onsite\"\n
\n 2) Click the Onsite button\n
\n 3) Then click the \"Forms\" tab\n
\n 4) Click the \"SJLR iStart Card\" (most recent if more than one)\n
\n 5) On the Start Card form:\n
- Fill in First and Last name\n
- Click \"Today\" and \"Now\" For the Date and Time\n
- Sign at the bottom and click \"Submit\"\n

\n
\n {schedule.externalJobLink && (\n \n Start Card\n \n )}\n
\n \n \n \n
\n \n );\n};\n\nconst ConstructionScheduleItems = ({\n construction,\n fieldItems,\n scheduleItems,\n schedule,\n onAddItem,\n onChangeItem,\n isSubcontractor,\n handleTaskUserConfirmQty,\n handleResetTicketOfWork,\n taskUser,\n isFinanceOrSub,\n isReject\n}) => {\n const { hasClaim } = useAuth();\n\n const [boqsById, setBoqsById] = useState({});\n const [addItem, setAddItem] = useState(false);\n const [changeItem, setChangeItem] = useState(undefined);\n const [childItemsByCode, setChildItemsByCode] = useState({});\n\n const canEditItems = !isSubcontractor || isReject || (schedule.acceptedDate && taskUser && !schedule.submittedDate);\n\n const canConfirm = useMemo(() => {\n if (taskUser && taskUser.confirmItemQtys) {\n return false;\n }\n\n return !isSubcontractor || (schedule.acceptedDate && taskUser && schedule.completedDate && !schedule.submittedDate);\n }, [\n isSubcontractor,\n schedule.acceptedDate,\n taskUser,\n taskUser?.confirmItemQtys,\n schedule.completedDate,\n schedule.submittedDate\n ]);\n\n useEffect(() => {\n if (construction.boqs) {\n // Map boqs by Id\n const newBoqsById = {};\n\n construction.boqs.forEach((boq) => {\n const assignedQty = construction.schedules.reduce(\n (acc, v) => acc + (v.items?.find((i) => i.boqId === boq.id)?.quantity ?? 0),\n 0\n );\n newBoqsById[boq.id] = {\n ...boq,\n assignedQty,\n unassignedQty: (boq.variationQty ?? boq.quantity) - assignedQty\n };\n });\n\n setBoqsById(newBoqsById);\n }\n }, [construction.boqs, construction.schedules, scheduleItems]);\n\n const getComments = (item) => {\n const payment = construction.payments.find((x) => x.name === schedule.name && x.owner === schedule.resource);\n return payment?.paymentItems?.find((x) => x.itemCode === item.childCode)?.comments;\n };\n\n const calcTotal = (item) => {\n if (!item.rate) return '';\n if (item.completedQty === 0) return '';\n if (item.completedQty) {\n return item.rate * item.completedQty;\n }\n if (item.quantity === 0) return '';\n if (item.quantity) {\n return item.rate * item.quantity;\n }\n return '';\n };\n\n return (\n <>\n
Items
\n
\n \n \n \n \n \n \n \n \n \n \n \n {scheduleItems?.map((item, bIndex) => {\n const boq = boqsById[item.boqId];\n if (boq) {\n return (\n \n \n \n \n \n \n );\n } else {\n return null;\n }\n })}\n \n
\n {/* Code/Type */}\n Code\n
\n Qty/UOM\n {isFinanceOrSub && (\n <>\n
\n Rate\n
\n Total\n \n )}\n
DescriptionVariation ReasonComments
\n {item.code}\n {/*
\n {boq.itemType} */}\n
\n \n {item.completedQty ?? item.quantity ?? 0} {item.unitOfMeasure}\n \n {isFinanceOrSub && (\n <>\n
\n {Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(item.rate)}\n
\n \n {Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(\n calcTotal(item)\n )}\n \n \n )}\n
\n {(canEditItems || (isReject && item.rejectedDate)) && (\n {\n setChangeItem(item);\n e.preventDefault();\n }}\n >\n change\n \n )}\n
\n
{item.description}{item.variationReason}{getComments(item)}
\n
\n \n \n \n \n \n {/* */}\n \n {isFinanceOrSub && }\n {isFinanceOrSub && }\n \n \n \n \n \n \n {scheduleItems?.map((item, bIndex) => {\n const boq = boqsById[item.boqId];\n if (boq) {\n return (\n \n \n {/* */}\n \n {isFinanceOrSub && (\n \n )}\n {isFinanceOrSub && (\n \n )}\n \n \n \n \n );\n } else {\n return null;\n }\n })}\n \n
CodeTypeQty/UOMRateTotalDescriptionVariation ReasonComments
{item.code}{boq.itemType}\n \n {item.completedQty ?? item.quantity ?? 0} {item.unitOfMeasure}\n \n
\n {(canEditItems || (isReject && item.rejectedDate)) && (\n {\n setChangeItem(item);\n e.preventDefault();\n }}\n >\n change\n \n )}\n
{Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(item.rate)}\n {Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(calcTotal(item))}\n {item.name}{item.variationReason}{getComments(item)}
\n
\n
\n {canEditItems && (\n \n )}{' '}\n {canConfirm && (\n \n )}{' '}\n \n \n {' '}\n {hasClaim('CAN_RESET_TICKET_OF_WORK') && (\n \n )}\n {!!addItem && (\n setAddItem(false)}\n fieldItems={fieldItems}\n isSubcontractor={isSubcontractor}\n onAdd={async (item) => {\n await onAddItem(schedule.id, item);\n setAddItem(false);\n }}\n />\n )}\n {changeItem && (\n setChangeItem(undefined)}\n onChange={async (item) => {\n await onChangeItem(item, taskUser?.id ?? 0);\n setChangeItem(undefined);\n }}\n />\n )}\n \n );\n};\n\nconst AddNewConstructionScheduleItem = ({ boqs, fieldItems, childCodes, onAdd, onClose, isSubcontractor }) => {\n const [itemCodeOptions, setItemCodeOptions] = useState([]);\n const [saving, setSaving] = useState(false);\n const [selectedCode, setSelectedCode] = useState(null);\n const [newItem, setNewItem] = useState({});\n\n useEffect(() => {\n const options = fieldItems.map((x) => {\n return {\n value: x.id,\n label: x.code + (x.name ? ` - ${x.name}` : '')\n };\n });\n setItemCodeOptions(options);\n }, [fieldItems]);\n\n return (\n \n Add unplanned item\n \n \n
\n
\n
\n \n {\n var i = fieldItems.find((i) => i.id == e.value);\n setSelectedCode(i);\n setNewItem({\n ...newItem,\n code: i.code,\n description: i.description ?? i.name ?? '',\n unitOfMeasure: i.unitOfMeasure ?? '',\n itemId: i.id\n });\n }}\n />\n
\n
\n \n
{selectedCode?.description}
\n
\n
\n \n
{selectedCode?.unitOfMeasure}
\n
\n
\n \n setNewItem({ ...newItem, variationQty: parseFloat(e.target.value) })}\n />\n
\n
\n \n setNewItem({ ...newItem, reason: e.target.value })}\n />\n
\n
\n
\n
\n
\n \n {(!selectedCode || !newItem.variationQty || !newItem.reason || newItem.reason === '') && (\n Select an item and provide a quantity and reason\n )}\n {!saving && (\n \n )}\n {saving && }\n {\n setSaving(true);\n try {\n await onAdd(newItem);\n } catch (error) {\n setSaving(false);\n }\n }}\n >\n Save\n \n \n
\n );\n};\n\nconst ChangeConstructionScheduleItem = ({ item, boq, childCode, onChange, onClose }) => {\n const [saving, setSaving] = useState(false);\n\n const [changedValues, setChangedValues] = useState({ ...item });\n\n return (\n \n Change item quantity\n \n \n
\n
\n
\n \n
{item.code}
\n
\n
\n \n
{item.description}
\n
\n
\n \n
\n {childCode ? item.quantity : boq?.variationQty ?? boq?.quantity} {boq?.unitOfMeasure}\n
\n
\n
\n \n
\n setChangedValues({ ...changedValues, completedQty: parseFloat(e.target.value) })}\n />\n
\n
\n
\n \n
\n setChangedValues({ ...changedValues, variationReason: e.target.value })}\n />\n
\n
\n
\n
\n
\n
\n \n {((!changedValues.completedQty && changedValues.completedQty !== 0) ||\n changedValues.completedQty < 0 ||\n !changedValues.variationReason ||\n changedValues.variationReason === '') && (\n Provide a quantity and reason for variation\n )}\n {!saving && (\n \n )}\n {saving && }\n {\n setSaving(true);\n try {\n await onChange({ ...changedValues });\n } catch (error) {\n setSaving(false);\n }\n }}\n >\n Save\n \n \n
\n );\n};\n\nconst EditPhoto = ({ imageDetails, onImageEdit, onClose }) => {\n const auth = useAuth();\n const originalTitle = imageDetails?.title;\n const [editingTitle, setEditingTitle] = useState(null);\n const [comments, setComments] = useState(null);\n\n useEffect(() => {\n if (imageDetails) {\n const lastIndex = imageDetails.title.lastIndexOf('.');\n setEditingTitle(imageDetails.title.slice(0, lastIndex));\n setComments(imageDetails.comments);\n }\n }, [imageDetails]);\n\n const onSave = () => {\n const tags = imageDetails.tags?.split(';').filter((x) => x) || [];\n\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n let img = new Image();\n // Allow cors for S3 urls so toDataURL works\n img.crossOrigin = 'anonymous';\n img.src = imageDetails.url;\n\n img.onload = async function () {\n const portrait = img.width < img.height;\n context.canvas.height = portrait ? 700 : 480;\n context.canvas.width = portrait ? 480 : 700;\n context.drawImage(\n img,\n 0,\n 0,\n img.naturalWidth,\n img.naturalHeight,\n 0,\n 0,\n context.canvas.width,\n context.canvas.height\n );\n\n drawTitle(context, portrait, tags);\n const newSrc = canvas.toDataURL('image/png');\n const extension = imageDetails.title.split('.').pop();\n\n try {\n const params = await getPresignedUpdateParams({\n name: editingTitle + '.' + extension,\n tags: tags,\n comments: comments,\n id: imageDetails.id\n });\n\n const response =\n editingTitle + '.' + extension !== originalTitle ? await uploadAttachment(params.uploadUrl, newSrc) : null;\n onImageEdit({ ...imageDetails, title: editingTitle + '.' + extension, comments: comments, url: newSrc });\n } catch (err) {\n console.error(err);\n return;\n }\n onClose();\n };\n };\n\n const drawTitle = (context, portrait, tags) => {\n // update the file name\n let width = portrait ? 480 : 700;\n context.fillStyle = '#000000';\n context.fillRect(0, 0, width, 20);\n context.fillStyle = '#ffffff';\n context.font = '16px Arial';\n\n const text = `${editingTitle ?? ''} - [${tags?.join(', ').trim()}]`;\n context.fillText(text, 5, 16);\n };\n\n const getPresignedUpdateParams = async ({ name, size, tags, comments, id }) => {\n const res = await fetch('/api/attachments/getPresignedUpdateParams', {\n method: 'POST',\n body: JSON.stringify({\n name,\n attachmentId: id,\n tags: tags,\n comments: comments\n }),\n headers: {\n 'Content-Type': 'application/json',\n authorization: `Bearer ${auth.token}`\n }\n });\n return await res.json();\n };\n\n const uploadAttachment = (url, imageData) => {\n const imageBlob = dataURItoBlob(imageData);\n\n return fetch(url, {\n method: 'PUT',\n body: imageBlob,\n headers: { 'Content-Type': 'image/png' }\n });\n };\n\n function dataURItoBlob(dataURI) {\n // convert base64 to raw binary data held in a string\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n var byteString = atob(dataURI.split(',')[1]);\n\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n\n // create a view into the buffer\n var ia = new Uint8Array(ab);\n\n // set the bytes of the buffer to the correct values\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n // write the ArrayBuffer to a blob, and you're done\n var blob = new Blob([ab], { type: mimeString });\n return blob;\n }\n\n return (\n \n Edit Photo Details\n \n
\n \n {\n setEditingTitle(e.target.value)}\n type=\"text\"\n className=\"form-control\"\n />\n }\n
\n
\n \n setComments(e.target.value)}\n type=\"text\"\n className=\"form-control\"\n />\n
\n
\n \n \n \n
\n );\n};\n\nconst LazyImg = (props) => {\n const [inView, setInView] = useState(false);\n const placeholderRef = useRef();\n useEffect(() => {\n const observer = new IntersectionObserver((entries, obs) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setInView(true);\n obs.disconnect();\n }\n }\n }, {});\n observer.observe(placeholderRef.current);\n return () => {\n observer.disconnect();\n };\n }, []);\n return inView ? (\n {props.alt\n ) : (\n {props.alt\n );\n};\n\nexport default Construction;\n","import { getBaseUrl } from '../../utils/utilFunctions';\n\nexport const generateBuilderSlug = (siteContact, phoneNumber, jobIds, potentialJobIds = []) => {\n const normalizedPhone = phoneNumber.startsWith('+') ? phoneNumber : `+${phoneNumber}`;\n const allJobIds = potentialJobIds.length > 0 ? `${jobIds.join(',')},+${potentialJobIds.join(',')}` : jobIds.join(',');\n\n const slug = btoa(`${siteContact}${normalizedPhone}+${allJobIds}`);\n const baseUrl = getBaseUrl();\n const link = `${baseUrl}/builders/${slug}`;\n\n // ToDo (one day): create a System Setting for domain display name\n let domainName = 'Adtech Contracting Pty Ltd';\n if (baseUrl.includes('onewire')) {\n domainName = 'One Wire Pty Ltd\\nnbn@onewire.com.au';\n } else if (baseUrl.includes('marshaltech')) {\n domainName = 'Marshal Tech';\n } else if (baseUrl.includes('yourlocalservices')) {\n domainName = 'Your Local Services';\n }\n\n return { slug, link, domainName };\n};\n\nexport const generateBuilderMessage = (address, link, domainName) => {\n //return `Dear Builder,\\n\\nRE: ${address}.\\n\\nWe are contacting you as the preferred NBN preinstall contractor in the area for your current / upcoming builds.\\n\\nWhilst we roll out NBN's FTTP network, in order to ensure a smooth, cost free and efficient installation, we kindly request that you ensure site access is available to the property and the garage.\\n\\nPlease click on the link below to approve site access to the property and to avoid connection delay.\\n\\nIf you do not wish for the NBN preinstall to be completed, please click on the below link and select the \"Deny\" option.\\n\\n${link}\\n\\nYours sincerely, ${domainName}`;\n return `Dear Builder,\\n\\nRE: ${address}.\\n\\nWe are reaching out as a preferred NBN preinstall contractor in your area for your current and upcoming builds.\\n\\nThe nbn preinstallation is a free service that allows nbn fibre and connection devices to be installed during construction, ensuring the new homeowner can connect immediately while preventing potential damage to driveways or landscaping.\\n\\nIt is an nbn requirement that pre-install contractors have builders approval for site access before pre-installation can proceed so we kindly ask that you to click on the link below to approve site access.\\n${link}\\n\\nAccess to the garage, is required to complete the installation.\\n\\nWe appreciate your cooperation and look forward to working with you.\\n\\nYours sincerely,\\n${domainName}`;\n};\n","export const sortJobs = (_jobs) => {\n return _jobs.sort((a, b) => {\n if (a.postCode !== b.postCode) {\n return safeStringCompare(a.postCode, b.postCode);\n }\n if (a.suburb !== b.suburb) {\n return safeStringCompare(a.suburb, b.suburb);\n }\n if (a.streetName !== b.streetName) {\n return safeStringCompare(a.streetName, b.streetName);\n }\n if ((a.streetNumber || 0) !== (b.streetNumber || 0)) {\n return (parseInt(a.streetNumber, 10) || 0) - (parseInt(b.streetNumber, 10) || 0);\n }\n if ((a.lotNumber || 0) !== (b.lotNumber || 0)) {\n return (parseInt(a.lotNumber, 10) || 0) - (parseInt(b.lotNumber, 10) || 0);\n }\n if (a.unitNumber !== b.unitNumber) {\n return safeStringCompare(a.unitNumber, b.unitNumber);\n }\n return 0;\n });\n};\n\nexport const safeStringCompare = (str1, str2) => {\n str1 = str1 || '';\n str2 = str2 || '';\n return str1.localeCompare(str2);\n};\n\nexport const getIsValidPhoneNumber = (phoneNumber) => {\n const e164Regex = /^\\+614\\d{8}$/;\n return e164Regex.test(phoneNumber);\n};\n\nexport const convertPhoneNumber = (phoneNumber) => {\n if (!phoneNumber) return null;\n\n let phone = phoneNumber.replace(/\\s+/g, ''); // Remove spaces\n if (phone.startsWith('04')) {\n phone = '+61' + phone.slice(1); // Modify to international format\n }\n return phone;\n};\n","import moment from 'moment-timezone';\n\nexport const getAddress = (job) => {\n if (!job) return 'no job, no address'; // should never happen\n\n if (\n job.lotNumber !== null ||\n job.unitNumber !== null ||\n job.streetNumber !== null ||\n job.streetName !== null ||\n job.roadType !== null ||\n job.suburb !== null ||\n job.state !== null ||\n job.postCode !== null\n ) {\n const addressComponents = [];\n if (job.lotNumber) {\n addressComponents.push('Lot ' + job.lotNumber);\n }\n\n if (job.unitNumber) {\n addressComponents.push('U' + job.unitNumber);\n }\n\n if (job.streetNumber) {\n addressComponents.push(job.streetNumber);\n }\n\n if (job.streetName) {\n addressComponents.push(job.streetName);\n }\n\n if (job.roadType) {\n addressComponents.push(job.roadType);\n }\n\n if (job.suburb) {\n addressComponents.push(job.suburb);\n }\n\n if (job.state) {\n addressComponents.push(job.state);\n }\n\n if (job.postCode) {\n addressComponents.push(job.postCode);\n }\n\n return addressComponents.join(' ');\n } else {\n return '';\n }\n};\n\nexport const getAddressRange = (jobs) => {\n if (!jobs || jobs.length === 0) return 'no job, no address';\n\n const getRange = (numbers) => {\n if (numbers.length === 0) return '';\n const minNumber = Math.min(...numbers);\n const maxNumber = Math.max(...numbers);\n return minNumber === maxNumber ? `${minNumber}` : `${minNumber} - ${maxNumber}`;\n };\n\n const getAddressComponents = (job, range, isRange) => {\n const addressComponents = [];\n if (isRange) {\n addressComponents.push(range);\n } else {\n if (job.lotNumber) {\n addressComponents.push('Lot ' + job.lotNumber);\n } else if (job.unitNumber) {\n addressComponents.push('U' + job.unitNumber);\n } else if (job.streetNumber) {\n addressComponents.push(job.streetNumber);\n }\n }\n\n if (job.streetName) {\n addressComponents.push(job.streetName);\n }\n if (job.roadType) {\n addressComponents.push(job.roadType);\n }\n if (job.suburb) {\n addressComponents.push(job.suburb);\n }\n if (job.state) {\n addressComponents.push(job.state);\n }\n if (job.postCode) {\n addressComponents.push(job.postCode);\n }\n\n return addressComponents.join(' ');\n };\n\n const lotNumbers = [...new Set(jobs.map((job) => job.lotNumber).filter(Boolean))];\n if (lotNumbers.length > 1) {\n const range = `Lot ${getRange(lotNumbers)}`;\n return getAddressComponents(jobs[0], range, true);\n }\n\n const unitNumbers = [...new Set(jobs.map((job) => job.unitNumber).filter(Boolean))];\n if (unitNumbers.length > 1) {\n const lotOrStreetNumber = jobs[0].lotNumber ? 'Lot ' + jobs[0].lotNumber : jobs[0].streetNumber;\n const range = `${lotOrStreetNumber} U${getRange(unitNumbers)}`;\n return getAddressComponents(jobs[0], range, true);\n }\n\n const streetNumbers = [...new Set(jobs.map((job) => job.streetNumber).filter(Boolean))];\n if (streetNumbers.length > 1) {\n const range = getRange(streetNumbers);\n return getAddressComponents(jobs[0], range, true);\n }\n\n // Handle the case when there's only one job or no range\n return getAddressComponents(jobs[0], '', false);\n};\n\n/**\n * @param {Array} settings - array of objects to be sorted by sortOrder\n * @returns {Array} - sorted array of objects\n * @description - this function will sort an array of objects by sortOrder. - Must include sortOrder in the object\n */\nexport const initializeSortOrder = (settings) => {\n let sortedSettings = [...settings];\n\n if (sortedSettings.length) {\n if (\n sortedSettings.length !== sortedSettings.filter((x) => x.sortOrder === 0).length &&\n sortedSettings.every((x) => 'sortOrder' in x)\n ) {\n sortedSettings.sort((a, b) => a.sortOrder - b.sortOrder);\n }\n //if there's any discrepancies in sortOrder, this will fix them\n sortedSettings = sortedSettings.map((x, i) => {\n return {\n ...x,\n ['sortOrder']: i\n };\n });\n }\n return sortedSettings;\n};\n\n/**\n * @param dateTime - utc date time string\n * @returns {string} - formatted date string 'DD MM YYYY'\n * @description - this function will format a DateTime object to a string 'DD MM YYYY'\n */\nexport const formatDate = (dateTime) => {\n if (!dateTime) return null;\n const formattedDateTime = moment.utc(dateTime).tz(moment.tz.guess()).format('DD MM YYYY');\n return formattedDateTime;\n};\n\n/**\n * @param dateTime - utc date time string\n * @returns {string} - formatted date string 'DD MM YYYY HH:mm A'\n * @description - this function will format a DateTime object to a string 'DD MM YYYY HH:mm A'\n */\nexport const formatDateTime = (dateTime) => {\n if (!dateTime) return null;\n const formattedDateTime = moment.utc(dateTime).tz(moment.tz.guess()).format('DD MM YYYY HH:mm A');\n return formattedDateTime;\n};\n\nexport const getBaseUrl = () => {\n const { protocol, hostname, port } = window.location;\n return `${protocol}//${hostname}${port ? `:${port}` : ''}`;\n};\n\nexport const format2decimalPlaces = (value) => {\n if (value === null || value === undefined || isNaN(value)) {\n return '';\n }\n return Number(value).toFixed(2);\n};\n\nexport const getDocTree = (docs) => {\n let topLevelFiles = docs.filter((x) => !x.path || x.path === x.title);\n let subFolderFilesTemp = docs.filter((x) => x.path && x.path !== x.title);\n let subFolderFiles = subFolderFilesTemp.map((x) => {\n return { ...x };\n });\n subFolderFiles.forEach((x) => (x.path = (x.path ? x.path + '\\\\' : '') + x.title));\n\n let result = [];\n let level = { result };\n\n subFolderFiles.forEach((doc, indexF) => {\n doc.path.split('\\\\').reduce((r, name, indexR) => {\n if (!r[name] || name === doc.title) {\n r[name] = { result: [] };\n const firstIndex = doc.path.indexOf('\\\\');\n r.result.push({\n name,\n children: r[name].result,\n doc: name === doc.title ? { ...doc } : null,\n rowId: name === doc.title ? doc.id : name,\n path: doc.path.substring(0, firstIndex),\n markedForDeletion: doc.markedForDeletion\n });\n }\n return r[name];\n }, level);\n });\n topLevelFiles.forEach((x) => {\n result.push({ name: x.title, children: [], doc: x, rowId: x.id });\n });\n\n result.forEach((x) => {\n if (!x.doc) {\n x.tags = getFolderTags(x);\n } else {\n x.tags = x.doc.tags;\n }\n });\n\n return result;\n};\n\n// Check all child docs have the same tag\nconst getFolderTags = (branch) => {\n let tags = '';\n let tagSet = false;\n branch.children.forEach((x) => {\n let tempTag = '';\n if (x.doc) {\n tempTag = x.doc.tags;\n } else {\n tempTag = getFolderTags(x);\n }\n\n if (!tagSet) {\n tags = tempTag;\n } else if (tags !== tempTag) {\n tags = '';\n }\n\n tagSet = true;\n });\n return tags;\n};\n","import React, { useEffect } from 'react';\nimport { Table, Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport QRCode from 'qrcode.react';\nimport { sortJobs, convertPhoneNumber, getIsValidPhoneNumber, safeStringCompare } from './BuilderUtils';\n\nconst DraftBuilderApprovalMessage = ({ selectedJobsData, requestSent, handleSelectJob, handleCloseApproval }) => {\n const hasHandleSelectJob = !!handleSelectJob;\n\n useEffect(() => {\n if (hasHandleSelectJob && selectedJobsData?.jobs?.length === 1 && !selectedJobsData?.jobs[0]?.selected) {\n handleSelectJob(0);\n }\n }, [hasHandleSelectJob, selectedJobsData, handleSelectJob]);\n\n return (\n \n Select jobs for approval\n \n

{selectedJobsData.addressText}

\n \n \n \n \n \n \n \n \n {selectedJobsData.jobs.map((job, index) => (\n handleSelectJob(index) : undefined}\n >\n \n \n \n ))}\n \n
AddressWork Order
{job.address}{job.workOrder}
\n
\n \n
\n );\n};\n\nconst ModalFooterWithQR = ({ selectedJobsData, requestSent, handleCloseApproval }) => {\n const phoneNumber = convertPhoneNumber(selectedJobsData.phoneNumber);\n const smsURI = `smsto:${phoneNumber}?body=${encodeURIComponent(selectedJobsData.message)}`;\n const iosSmsURI = `sms:${phoneNumber}&body=${encodeURIComponent(selectedJobsData.message)}`;\n\n const allUserAgentData = navigator.userAgent;\n const isIOS = /iPad|iPhone|Macintosh/.test(allUserAgentData);\n\n return (\n \n
\n {selectedJobsData.jobs.filter((job) => job.selected).length > 0 && (\n <>\n {/* Desktop */}\n
900 ? 'block' : 'none' }}>\n
\n Scan the QR code below with your phone to copy an approval request message ready to send to{' '}\n {selectedJobsData.siteContact}.\n
\n \n
\n {/* Mobile */}\n
\n {isIOS ? (\n
\n Draft SMS\n
\n ) : (\n
\n Draft SMS\n
\n )}\n
\n
\n
\n \n
\n
\n \n
\n
\n \n )}\n {selectedJobsData.jobs.filter((job) => job.selected).length == 0 && (\n \n )}\n
\n
\n );\n};\n\nexport default DraftBuilderApprovalMessage;\n","import React, { useEffect, useState, useRef, useCallback } from 'react';\nimport useGeoLocation from 'react-hook-geolocation';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { GET_CONSTRUCTION } from './Construction';\nimport { useQuery } from '@apollo/react-hooks';\nimport { db } from '../../utils/db';\nimport Sync from './Sync';\nimport { getAddress } from '../../utils/utilFunctions';\n\nconst Capture = ({ isPotentialJob, onPhotoTaken, potentialJobData }) => {\n const { id, taskId } = useParams();\n const [construction, setConstruction] = useState(null);\n const [validFilename, setValidFilename] = useState(false);\n\n // Only query construction data if not a potential job\n const { data } = useQuery(GET_CONSTRUCTION, {\n variables: { constructionId: id },\n fetchPolicy: 'cache-and-network',\n skip: isPotentialJob\n });\n\n useEffect(() => {\n if (isPotentialJob && potentialJobData) {\n setConstruction(potentialJobData);\n const address = getAddress(potentialJobData);\n if (!address) {\n setAddress(potentialJobData.addressFromField);\n } else {\n setAddress(address);\n }\n } else if (data && data.construction) {\n setConstruction(data.construction);\n setTags([...data.construction.schedules.filter((s) => s.id == taskId).map((s) => s.name)]);\n setAddress(getAddress(data.construction));\n }\n }, [data, isPotentialJob, potentialJobData]);\n\n const history = useHistory();\n\n const canvasRef = useRef(null);\n\n const [capturedImage, setCapturedImage] = useState(null);\n\n const [address, setAddress] = useState('');\n const [tags, setTags] = useState([]);\n const [comments, setComments] = useState('');\n const [filename, setFileName] = useState('');\n const [imageNumber, setImageNumber] = useState(1);\n\n const geolocation = useGeoLocation({ enableHighAccuracy: true, maximumAge: 10000, timeout: 5000 });\n\n // const lastComment = JSON.parse(sessionStorage.getItem('last-image-comment'));\n // let storedComment = '';\n // if (lastComment?.taskId === taskId) {\n // storedComment = lastComment.comments;\n // }\n\n useEffect(() => {\n var good = true;\n\n if (!filename || /^\\s*$/.test(filename)) {\n good = false;\n }\n\n setValidFilename(good);\n }, [filename]);\n\n const drawTitle = (context, title) => {\n // update the file name\n let width = context.canvas.width;\n context.fillStyle = '#000000';\n context.fillRect(0, 0, width, 20);\n context.fillStyle = '#ffffff';\n context.font = '16px Arial';\n\n const text = `${title ?? ''} - [${tags.join(', ').trim()}]`;\n context.fillText(text, 5, 16);\n };\n\n const capture = async (btn) => {\n // raise click event on the #camera input\n document.getElementById('camera').click();\n };\n\n // this is triggered each time a new image is selected\n const cameraChange = () => {\n var file = document.getElementById('camera').files[0];\n if (!!file) {\n var blob_url = URL.createObjectURL(file);\n\n // get image height and width from blob_url\n var img = new Image();\n img.src = blob_url;\n img.onload = function () {\n let width = img.width;\n let height = img.height;\n\n // keep the same aspect ratio, but limit width/height to max of 1024\n if (width > height) {\n if (width > 1024) {\n height = Math.round((height * 1024) / width);\n width = 1024;\n }\n } else {\n if (height > 1024) {\n width = Math.round((width * 1024) / height);\n height = 1024;\n }\n }\n\n const canvas = canvasRef.current;\n var context = canvas.getContext('2d');\n\n context.canvas.width = width;\n context.canvas.height = height + 60;\n\n var raw = new Image();\n raw.src = blob_url;\n raw.onload = function () {\n // draw the image on the canvas\n context.drawImage(raw, 0, 40, width, height);\n // draw the deets on the canvas\n drawDeets(context);\n // draw the title on the canvas\n drawTitle(context, filename + ' #' + imageNumber);\n // get the data url from the canvas\n var data = canvas.toDataURL('image/jpeg');\n // set the image state to the data url\n setCapturedImage(data);\n saveImage(data, filename + '-' + imageNumber);\n };\n };\n }\n };\n\n const deleteOldPhotoHistory = () => {\n db.photoHistory\n .toArray()\n .then((x) => {\n return x[x.length - 1].id;\n })\n .then((lastId) => {\n db.photoHistory\n .where('id')\n .below(lastId - 99)\n .delete();\n });\n };\n\n const saveImage = async (image, name) => {\n var imageData = dataURItoBlob(image);\n\n try {\n await db.photos.add({\n name: name + '.jpg',\n description: comments,\n blob: image,\n url: null,\n tags: tags,\n size: imageData.size,\n constructionId: isPotentialJob ? null : construction.id,\n potentialJobId: isPotentialJob ? construction.id : null\n });\n\n const photo = await db.photos.orderBy('id').last();\n const createdDate = new Date().toISOString().split('.')[0];\n db.photoHistory.add({\n id: photo.id,\n name: name,\n size: imageData.size,\n constructionId: isPotentialJob ? null : construction.id,\n potentialJobId: isPotentialJob ? construction.id : null,\n createdDate: createdDate,\n lastUpdated: createdDate\n });\n deleteOldPhotoHistory();\n } catch (e) {\n } finally {\n setImageNumber((prev) => prev + 1);\n setCapturedImage(null);\n\n // If this is a potential job, notify parent component\n if (isPotentialJob && onPhotoTaken) {\n onPhotoTaken();\n }\n }\n };\n\n function dataURItoBlob(dataURI) {\n // convert base64 to raw binary data held in a string\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n var byteString = atob(dataURI.split(',')[1]);\n\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n\n // create a view into the buffer\n var ia = new Uint8Array(ab);\n\n // set the bytes of the buffer to the correct values\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n // write the ArrayBuffer to a blob, and you're done\n var blob = new Blob([ab], { type: mimeString });\n return blob;\n }\n\n const drawDeets = (context) => {\n const width = context.canvas.width;\n const height = context.canvas.height;\n\n context.fillStyle = '#000000';\n\n // fill header and footer\n context.fillRect(0, 0, width, 40);\n context.fillRect(0, height - 20, width, 20);\n\n context.fillStyle = '#ffffff';\n context.font = '16px Arial';\n\n let bottomTextLocationY = height - 4;\n let bottomTextLocationX = width - 170;\n\n //let text = `${construction.workOrder} - ${address}`;\n\n let text = isPotentialJob ? `Potential Job - ${address}` : `${construction.workOrder} - ${address}`;\n\n context.fillText(text, 5, 36);\n\n var location =\n Math.round(geolocation.latitude * 10000) / 10000 +\n ' ' +\n Math.round(geolocation.longitude * 10000) / 10000 +\n ' Accuracy: ' +\n Math.round(geolocation.accuracy) +\n 'm';\n context.fillText(location || '', 5, bottomTextLocationY);\n\n var date = new Date();\n context.fillText(\n date.toLocaleDateString() + ' ' + date.toLocaleTimeString(),\n bottomTextLocationX,\n bottomTextLocationY\n );\n };\n\n const done = useCallback(() => {\n if (isPotentialJob) {\n if (onPhotoTaken) onPhotoTaken();\n } else {\n setTimeout(() => {\n history.push('/field/construction/' + id + '/' + taskId);\n }, 100);\n }\n }, [history, id, taskId, isPotentialJob, onPhotoTaken]);\n\n const CaptureForm = (\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n {geolocation?.error && {geolocation?.error.message}}\n
\n
\n
\n\n
\n
\n
\n \n {\n setFileName(e.target.value === '' ? null : e.target.value);\n setImageNumber(1);\n }}\n />\n
\n
\n\n
\n
\n \n {\n if (!isNaN(parseInt(e.target.value))) {\n setImageNumber(parseInt(e.target.value ?? 1));\n } else {\n setImageNumber(1);\n }\n }}\n />\n
\n
\n
\n\n
\n
\n
\n \n setComments(e.target.value)}\n />\n
\n
\n
\n
\n );\n return (\n <>\n {isPotentialJob ? (\n // New layout for potential jobs\n
\n \n
\n
\n
\n\n \n\n cameraChange()}\n style={{ display: 'none' }}\n />\n\n {/* Form content */}\n
{CaptureForm}
\n\n {/* Buttons and preview */}\n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n
\n\n {capturedImage && (\n \n \n \n \n \n \n \n
\n \n  
\n )}\n
\n \n ) : (\n // Original layout for normal jobs\n
\n \n
\n
\n
\n\n \n\n cameraChange()}\n style={{ display: 'none' }}\n />\n\n {/* Form content */}\n
\n {CaptureForm}\n
\n\n {/* Buttons and preview */}\n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n
\n\n {capturedImage && (\n \n \n \n \n \n \n \n
\n \n  
\n )}\n
\n \n )}\n \n );\n};\n\nexport default Capture;\n","import React from 'react';\nimport { Spinner } from 'reactstrap';\n\nexport const Loading = () => {\n return (\n
\n \n
\n );\n};\n","import React, { useState } from 'react';\n\nimport { Container, Col, Row, Table, Button, Badge } from 'reactstrap';\nimport { useAuth } from '../../auth/AuthProvider';\n\nimport 'react-dropzone-uploader/dist/styles.css';\nimport Dropzone from 'react-dropzone-uploader';\n\nimport moment from 'moment';\nimport 'moment-timezone';\nimport { getDroppedOrSelectedFiles } from 'html5-file-selector';\n\nexport const FileUpload = ({ onFileUploaded, onFileFailed, ...props }) => {\n const taskId = props.taskId ? parseInt(props.taskId) : null;\n const projectId = props.projectId ? parseInt(props.projectId) : null;\n const constructionId = props.constructionId ? parseInt(props.constructionId) : null;\n const groupAccommodationId = props.groupAccommodationId ? parseInt(props.groupAccommodationId) : null;\n const tags = props.tags ? props.tags : [];\n const auth = useAuth();\n const isDocAttachment = props.isDocAttachment ? true : false;\n\n let filePaths = [];\n\n const getPresignedUploadParams = (fullPath, size) => {\n return fetch('/api/attachments/getPresignedUploadParams', {\n method: 'POST',\n body: JSON.stringify({\n name: fullPath,\n sizeBytes: size,\n taskId: isNaN(taskId) ? undefined : taskId,\n tags: tags,\n projectId: isNaN(projectId) ? undefined : projectId,\n constructionId: isNaN(constructionId) ? undefined : constructionId,\n groupAccommodationId: isNaN(groupAccommodationId) ? undefined : groupAccommodationId,\n isDocAttachment: isDocAttachment\n }),\n headers: { 'Content-Type': 'application/json', authorization: `Bearer ${auth.token}` }\n }).then((res) => res.json());\n };\n\n const removeFailedAttachment = (id) => {\n return fetch('/api/attachments/' + id, {\n method: 'DELETE',\n headers: { 'Content-Type': 'application/json', authorization: `Bearer ${auth.token}` }\n }).then((res) => res.json());\n };\n\n const getUploadParams = async ({ file, meta }) => {\n //const {uploadUrl, fileUrl} = await getPresignedUploadParams();\n //return { body: file, meta: { fileUrl }, url: uploadUrl }\n const filePath = filePaths.filter((x) => x.endsWith(meta.name))[0];\n const path = file.webkitRelativePath ? '/' + file.webkitRelativePath : filePath;\n\n const { attachment, uploadUrl } = await getPresignedUploadParams(path, meta.size);\n filePaths = filePaths.filter((x) => x !== filePath);\n return { body: file, meta: { attachment }, url: uploadUrl, method: 'PUT' };\n };\n\n const handleChangeStatus = ({ meta, remove }, status) => {\n //console.log({status, meta});\n if (status === 'headers_received') {\n //toast(`${meta.name} uploaded!`)\n if (onFileUploaded) {\n onFileUploaded(meta);\n }\n remove();\n } else if (status === 'aborted' || status === 'exception_upload') {\n //toast(`${meta.name}, upload failed...`)\n if (onFileFailed) {\n onFileFailed(meta);\n }\n removeFailedAttachment(meta.attachment.id);\n }\n };\n\n const getFilesFromEvent = (e) => {\n return new Promise((resolve) => {\n getDroppedOrSelectedFiles(e).then((chosenFiles) => {\n chosenFiles.forEach((x) => {\n filePaths.push(x.fullPath);\n });\n resolve(chosenFiles.map((f) => f.fileObject));\n });\n });\n };\n\n return (\n \n );\n};\n\nfunction GetFilename(url) {\n if (url) {\n var m = url.toString().match(/.*\\/(.+?)\\./);\n if (m && m.length > 1) {\n return m[1];\n }\n }\n return '';\n}\n\nconst Input = ({ accept, onFiles, files, getFilesFromEvent }) => {\n const folderText = files.length > 0 ? 'Add more folders' : 'Select a folder';\n const fileText = files.length > 0 ? 'Add more files' : 'Select files';\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n Drop Files\n \n \n \n );\n};\n\nexport const FileAttachments = ({\n projectId,\n taskId,\n attachments,\n onFileUploaded,\n onFileRemoved,\n allowDelete,\n ...props\n}) => {\n const auth = useAuth();\n\n const removeAttachment = (id) => {\n return fetch('/api/attachments/' + id, {\n method: 'DELETE',\n headers: { 'Content-Type': 'application/json', authorization: `Bearer ${auth.token}` }\n }).then((res) => res.json());\n };\n\n function humanFileSize(bytes, si = false, dp = 1) {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);\n\n return bytes.toFixed(dp) + ' ' + units[u];\n }\n\n return (\n <>\n \n {attachments && attachments.length ? (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n {attachments\n .map((a) => (\n \n \n \n \n \n \n \n \n ))\n .reverse()}\n \n
TitleTagsSizeUploadedSyncActions
\n \n {a.title || GetFilename(a.url)}\n \n {a.tags ? {a.tags} : null}{humanFileSize(a.sizeBytes)}{moment.utc(a.createdUtc).tz(moment.tz.guess()).format('DD MMM YYYY hh:mm A')}{a.syncStatus ? {a.syncStatus} : null}\n {allowDelete && a.syncStatus !== 'synced' ? (\n {\n await removeAttachment(a.id);\n if (onFileRemoved) {\n onFileRemoved(a);\n }\n }}\n >\n \n \n ) : null}\n
\n \n ) : (\n 'No attachments'\n )}\n \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, Row, Col, Table } from 'reactstrap';\nimport gql from 'graphql-tag';\nimport { useQuery, useMutation } from '@apollo/react-hooks';\nimport { toast } from 'react-toastify';\nimport Select from 'react-select';\nimport DraftBuilderApprovalMessage from '../BuilderApprovals/DraftBuilderApprovalMessage';\nimport { getAddress, getAddressRange } from '../../utils/utilFunctions';\nimport { convertPhoneNumber, getIsValidPhoneNumber } from '../BuilderApprovals/BuilderUtils';\nimport Capture from './Capture2';\nimport { generateBuilderSlug, generateBuilderMessage } from '../BuilderApprovals/BuilderSlug';\n\nconst GET_REFERENCE_DATA = gql`\n query GetReferenceData {\n builderLookup\n jobStatuses: systemSettings(where: { path: \"Name\", comparison: equal, value: \"Job Status Settings\" }) {\n id\n name\n workType\n config\n }\n addressTypeSettings: systemSettings(where: { path: \"Name\", comparison: equal, value: \"Address Type\" }) {\n id\n name\n workType\n config\n }\n }\n`;\n\nconst UPDATE_POTENTIAL_JOB = gql`\n mutation UpdatePotentialJob($potentialJob: PotentialJobInput!, $processedFromOffice: Boolean) {\n updatePotentialJob(potentialJob: $potentialJob, processedFromOffice: $processedFromOffice) {\n id\n builder\n siteContactName\n siteContactPhone\n status\n lotNumber\n unitNumber\n streetNumber\n streetName\n roadType\n suburb\n state\n postCode\n assignedFieldUserId\n addressFromField\n needsOfficeApproval\n }\n }\n`;\n\nconst SEND_POTENTIAL_JOB_REQUEST = gql`\n mutation SendRequest($ids: [Int]!, $message: String!) {\n sendPotentialJobRequest(ids: $ids, message: $message)\n }\n`;\n\nconst FormField = ({ label, children }) => {\n return (\n \n \n \n \n \n {children}\n \n \n );\n};\n\nconst NewPotentialJob = ({\n showPotentialJobModal,\n setShowPotentialJobModal,\n jobData,\n onJobUpdated,\n fullAddressOnly,\n attachments\n}) => {\n const [builderList, setBuilderList] = useState(null);\n //const [statusList, setStatusList] = useState([]);\n const [selectedBuilder, setSelectedBuilder] = useState(!!jobData ? jobData.builder : '');\n const [isValidPhoneNumber, setIsValidPhoneNumber] = useState(false);\n const [showBuilderApproval, setShowBuilderApproval] = useState(false);\n const [selectedJobsData, setSelectedJobsData] = useState(null);\n const [showFullAddress, setShowFullAddress] = useState(!!jobData || fullAddressOnly);\n const [showPhotoCapture, setShowPhotoCapture] = useState(false);\n const { assignedFieldUser, potentialJobComments, ...filteredJobData } = jobData\n ? { ...jobData, needsOfficeApproval: false }\n : {};\n\n const [newPotentialJob, setNewPotentialJob] = useState(\n jobData\n ? filteredJobData\n : {\n builder: '',\n siteContactName: '',\n siteContactPhone: '',\n status: '',\n addressFromField: '',\n lotNumber: '',\n lotRangeLow: null,\n lotRangeHigh: null,\n unitNumber: '',\n unitRangeLow: null,\n unitRangeHigh: null,\n streetNumber: '',\n streetRangeLow: null,\n streetRangeHigh: null,\n streetName: '',\n roadType: '',\n suburb: '',\n state: '',\n postCode: '',\n comments: '',\n needsOfficeApproval: fullAddressOnly ? false : true\n }\n );\n\n const { data } = useQuery(GET_REFERENCE_DATA);\n\n const [updatePotentialJob] = useMutation(UPDATE_POTENTIAL_JOB, {\n onCompleted: (data) => {\n if (data.updatePotentialJob && data.updatePotentialJob[0]) {\n toast.success('Potential Job added successfully');\n setIsValidPhoneNumber(getIsValidPhoneNumber(convertPhoneNumber(data.updatePotentialJob[0].siteContactPhone)));\n const _selectedJobsData = getSelectedJobsData(data.updatePotentialJob);\n setSelectedJobsData(_selectedJobsData);\n if (onJobUpdated) {\n onJobUpdated(data.updatePotentialJob);\n }\n }\n },\n onError: (error) => {\n toast.error('Error updating job: ' + error.message);\n }\n });\n\n const [sendRequestToBuilder] = useMutation(SEND_POTENTIAL_JOB_REQUEST, {\n onCompleted: (data) => {\n if (data.sendPotentialJobRequest) {\n toast.success('Request sent successfully');\n setShowPotentialJobModal(false);\n }\n },\n onError: (error) => {\n toast.error('Error sending request: ' + error.message);\n }\n });\n\n useEffect(() => {\n if (!data) return;\n setBuilderList(data.builderLookup);\n\n if (data.addressTypeSettings) {\n const addressTypeSettings = data.addressTypeSettings.map((setting) => ({\n workType: setting.workType,\n values: JSON.parse(setting.config).addressSetting\n }));\n\n let bookableWorkTypes = [];\n\n addressTypeSettings.forEach((setting) => {\n if (setting.values?.bookable) {\n bookableWorkTypes.push(setting.workType);\n }\n });\n\n // if (data.jobStatuses) {\n // const jobStatuses = data.jobStatuses.map((setting) => ({\n // workType: setting.workType,\n // statuses: JSON.parse(setting.config).statuses\n // }));\n\n // let statuses = [];\n\n // jobStatuses.forEach((setting) => {\n // if (bookableWorkTypes.includes(setting.workType)) {\n // if (setting.statuses) {\n // setting.statuses.forEach((status) => {\n // if (status.builderApproval) {\n // statuses.push(status.statusName);\n // }\n // });\n // }\n // }\n // });\n\n // statuses = [...new Set(statuses)];\n\n // setStatusList(\n // statuses.map((status) => ({\n // value: status,\n // label: status\n // }))\n // );\n // }\n }\n }, [data]);\n\n useEffect(() => {\n setNewPotentialJob((prev) => ({\n ...prev,\n builder: selectedBuilder\n }));\n }, [selectedBuilder]);\n\n const handleSave = async () => {\n const result = await updatePotentialJob({\n variables: {\n potentialJob: newPotentialJob,\n processedFromOffice: !!jobData\n }\n });\n\n if (result.data?.updatePotentialJob?.[0]) {\n // Store the first job's ID since that's where we'll attach photos\n setNewPotentialJob(result.data.updatePotentialJob[0]);\n }\n };\n\n const handleSaveAndPhoto = async () => {\n const result = await updatePotentialJob({\n variables: {\n potentialJob: newPotentialJob,\n processedFromOffice: !!jobData\n }\n });\n\n if (result.data?.updatePotentialJob?.[0]) {\n // Store the first job's ID since that's where we'll attach photos\n setNewPotentialJob(result.data.updatePotentialJob[0]);\n // Now show the photo capture modal\n setShowPhotoCapture(true);\n }\n };\n\n const handleCloseApproval = () => {\n setShowBuilderApproval(false);\n setSelectedJobsData(null);\n setShowPotentialJobModal(false);\n };\n\n const getSelectedJobsData = (createdPotentialJobs) => {\n const fullAddress = getAddressRange(createdPotentialJobs);\n const potentialJobIds = createdPotentialJobs.map((job) => job.id);\n if (!showFullAddress) {\n createdPotentialJobs.forEach((job) => {\n job.address = job.needsOfficeApproval ? job.addressFromField : getAddress(job);\n job.selected = true;\n });\n }\n\n const { link, domainName } = generateBuilderSlug(\n createdPotentialJobs[0].siteContactName,\n createdPotentialJobs[0].siteContactPhone,\n potentialJobIds\n );\n\n return {\n siteContact: createdPotentialJobs[0].siteContactName,\n phoneNumber: createdPotentialJobs[0].siteContactPhone,\n jobs: createdPotentialJobs,\n addressText: fullAddress,\n message: generateBuilderMessage(fullAddress, link, domainName)\n };\n };\n\n const requestSent = () => {\n const potentialJobIds = selectedJobsData.jobs.map((job) => job.id);\n const message = selectedJobsData.message.replace(/\\n/g, ' ');\n sendRequestToBuilder({ variables: { ids: potentialJobIds, message: message } });\n };\n\n const handleChange = (e) => {\n const { name, value } = e.target;\n if (name.includes('Range')) {\n setNewPotentialJob({ ...newPotentialJob, [name]: value ? Number(value) : null });\n } else {\n setNewPotentialJob({ ...newPotentialJob, [name]: value });\n }\n };\n\n // const testJobs = [\n // {\n // lotNumber: 12,\n // unitNumber: 101,\n // streetNumber: 100,\n // streetName: 'Main St',\n // roadType: 'Rd',\n // suburb: 'Suburbia',\n // state: 'State',\n // postCode: '12345'\n // },\n // {\n // lotNumber: 12,\n // unitNumber: 102,\n // streetNumber: 100,\n // streetName: 'Main St',\n // roadType: 'Rd',\n // suburb: 'Suburbia',\n // state: 'State',\n // postCode: '12345'\n // }\n // ];\n\n // const testJobs = [\n // { lotNumber: 12, streetName: 'Main St', roadType: 'Rd', suburb: 'Suburbia', state: 'State', postCode: '12345' },\n // { lotNumber: 13, streetName: 'Main St', roadType: 'Rd', suburb: 'Suburbia', state: 'State', postCode: '12345' }\n // ];\n\n //console.log('getAddressRange', getAddressRange(testJobs));\n\n return (\n <>\n setShowPotentialJobModal(!showPotentialJobModal)} size=\"lg\">\n {!!jobData ? 'Process Potential Job' : 'New Potential Job'}\n {!selectedJobsData && (\n \n
\n {!!jobData && (\n
\n \n
{newPotentialJob.addressFromField}
\n
\n
\n )}\n \n {builderList !== null && (\n \n )}\n \n \n \n \n \n \n \n {/* \n status.value === potentialJob.status)}\n onChange={(selectedOption) => {\n if (selectedOption) {\n setPotentialJob({ ...potentialJob, status: selectedOption.value });\n } else {\n setPotentialJob({ ...potentialJob, status: '' });\n }\n }}\n isClearable\n placeholder=\"Select a status\"\n classNamePrefix=\"react-select\"\n />\n */}\n {!showFullAddress && (\n \n \n \n )}\n {showFullAddress && (\n <>\n
\n \n \n \n
\n\n \n
\n \n -\n \n
\n
\n \n \n \n \n
\n \n -\n \n
\n
\n \n \n \n \n
\n \n -\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n\n {attachments && attachments.length > 0 && (\n \n
\n {attachments.map((attachment, index) => (\n \n ))}\n
\n
\n )}\n
\n
\n )}\n {!!selectedJobsData && (\n \n \n \n \n \n \n \n \n \n \n {selectedJobsData.jobs.map((job, index) => (\n \n \n \n \n \n ))}\n \n
AddressBuilderSite Contact
{job.needsOfficeApproval ? job.addressFromField : getAddress(job)}{job.builder}{(job.siteContactName ?? '') + ' ' + (job.siteContactPhone ?? '')}
\n
\n )}\n \n
\n
\n {!selectedJobsData && !fullAddressOnly && !jobData && (\n {\n const showFullAddressNewValue = !showFullAddress;\n setShowFullAddress(showFullAddressNewValue);\n setNewPotentialJob({ ...newPotentialJob, needsOfficeApproval: !showFullAddressNewValue });\n }}\n >\n {showFullAddress ? 'Hide Detailed Address Fields' : 'Show Detailed Address Fields'}\n \n )}\n
\n
\n setShowPotentialJobModal(!showPotentialJobModal)}\n >\n {selectedJobsData ? 'Done' : 'Cancel'}\n \n {!selectedJobsData && (\n <>\n {!jobData && !showFullAddress && (\n \n Take Photo\n \n )}\n \n {!!jobData ? 'Submit' : 'Save'}\n \n \n )}\n {selectedJobsData && isValidPhoneNumber && !jobData && !fullAddressOnly && (\n \n )}\n
\n
\n
\n
\n\n {showPhotoCapture && (\n setShowPhotoCapture(false)}\n size=\"xl\"\n className=\"modal-fullscreen\" // Add this class\n style={{\n maxWidth: '100%',\n margin: '0',\n height: '100vh',\n width: '100vw'\n }} // Add these styles\n >\n setShowPhotoCapture(false)}>Take Photo\n \n {' '}\n {/* Add height style */}\n setShowPhotoCapture(false)}\n />\n \n \n )}\n\n {showBuilderApproval && selectedJobsData && (\n \n )}\n \n );\n};\n\nexport default NewPotentialJob;\n\nconst BuilderSelect = ({ builderList, selectedBuilder, setSelectedBuilder }) => {\n const [options, setOptions] = useState(\n builderList.map((builder) => ({\n label: builder,\n value: builder\n }))\n );\n\n const handleChange = (selectedOption) => {\n if (selectedOption) {\n setSelectedBuilder(selectedOption.value);\n } else {\n setSelectedBuilder('');\n }\n };\n\n const handleInputChange = (inputValue, { action }) => {\n if (action === 'input-change') {\n setSelectedBuilder(inputValue);\n }\n };\n\n const handleBlur = () => {\n if (selectedBuilder && !options.find((option) => option.value === selectedBuilder)) {\n const newOption = { label: selectedBuilder, value: selectedBuilder };\n setOptions([...options, newOption]);\n }\n };\n\n return (\n
\n \n
\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { Container, Col, Row, Table, Button } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport { getAddress } from '../../utils/utilFunctions';\nimport { useCompletedWork } from './DataHooks';\nimport { useAuth } from '../../auth/AuthProvider';\n\nconst TaskHistory = ({ structuredAddressWorkTypes, groupId }) => {\n const { me, hasClaim } = useAuth();\n const [expandedRows, setExpandedRows] = useState([]);\n const [pastMonths, setPastMonths] = useState('1');\n const [searchFilter, setSearchFilter] = useState(null);\n\n const isFinanceOrSub = me.isSubcontractor || hasClaim('CAN_VIEW_FINANCIAL_INFORMATION');\n\n const { completedWork, loading } = useCompletedWork(groupId, pastMonths);\n\n const getDisplayStatus = (task) => {\n if (task.paid) return 'Paid';\n if (task.approved) return 'Approve for Payment';\n return 'Completed';\n };\n\n const toggleRowExpand = (id) => {\n const index = expandedRows.indexOf(id);\n if (index !== -1) {\n expandedRows.splice(index, 1);\n } else {\n expandedRows.push(id);\n }\n\n setExpandedRows([...expandedRows]);\n };\n\n const getTotal = (item) => {\n return item.completedQty\n ? item.completedQty * (item.rate ?? 0)\n : item.quantity\n ? item.quantity * (item.rate ?? 0)\n : 0;\n };\n\n const isSubcontractor = useMemo(() => {\n return completedWork.tasks?.[0]?.isSubcontractor ?? false;\n }, [completedWork.tasks]);\n\n const filteredTasks = useMemo(() => {\n if (!completedWork || !completedWork.tasks) return;\n\n let tasks = completedWork.tasks;\n\n // Filter task items based on isSubcontractor\n tasks = tasks.map((task) => ({\n ...task,\n items: task.items.filter((item) => (isSubcontractor ? !!item.childCode : !item.childCode))\n }));\n\n const lowerCaseSearchFilter = searchFilter?.toLowerCase();\n if (lowerCaseSearchFilter) {\n tasks = tasks.filter((task) => {\n const taskName = task.name.toLowerCase();\n const taskAddress = structuredAddressWorkTypes?.includes(task.workType)\n ? getAddress(task)?.toLowerCase()\n : task.address?.toLowerCase();\n const taskWorkOrder = task.workOrder?.toLowerCase();\n const displayStatus = getDisplayStatus(task).toLowerCase();\n\n return (\n taskName?.includes(lowerCaseSearchFilter) ||\n taskAddress?.includes(lowerCaseSearchFilter) ||\n taskWorkOrder?.includes(lowerCaseSearchFilter) ||\n displayStatus?.includes(lowerCaseSearchFilter)\n );\n });\n }\n\n return tasks;\n }, [completedWork, searchFilter, isSubcontractor]);\n\n const getComments = (task, item) => {\n const payment = task.payments.find((x) => x.name === task.name && x.owner === task.resource);\n return payment?.paymentItems?.find((x) => x.itemCode === item.childCode)?.comments;\n };\n\n if (loading) {\n return
Loading...
;\n }\n\n return (\n <>\n \n \n setSearchFilter(e.target.value)}\n />\n \n \n setPastMonths(e.target.value)}\n >\n \n \n \n \n \n \n \n Completed tasks for the past {pastMonths === '1' ? 'month' : pastMonths + ' months'}\n \n \n {filteredTasks && structuredAddressWorkTypes && (\n \n {filteredTasks.map((task) => (\n \n \n \n \n
\n {' '}\n {task.dp} -{' '}\n {task.workOrder} (\n {getDisplayStatus(task)}) -{' '}\n {structuredAddressWorkTypes?.includes(task.workType) ? getAddress(task) : task.address} -{' '}\n {isFinanceOrSub &&\n Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(\n task.items.reduce((p, c) => p + getTotal(c), 0)\n )}\n - {task.name} - {task.completedDate.substr(0, 10)}\n
\n \n
\n {expandedRows.includes(task.id) ? (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {task.items\n .filter((x) => !!x.childCode)\n .map((item) => {\n const boq = task.boqs.find((b) => b.id === item.boqId);\n return (\n \n \n \n \n \n \n \n \n \n \n );\n })}\n \n \n \n \n \n
CodeTypeQty/UOMDescriptionRateTotalVariation ReasonComments
{item.childCode}{boq?.itemType}\n {item.completedQty ?? item.quantity ?? 0} {boq.unitOfMeasure}\n {boq.description}\n {isFinanceOrSub &&\n Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(item.rate)}\n \n {isFinanceOrSub &&\n Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(\n getTotal(item)\n )}\n {item.variationReason}{getComments(task, item)}
\n {Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(\n task.items.filter((x) => !!x.childCode).reduce((p, c) => p + getTotal(c), 0)\n )}\n
\n ) : null}\n \n
\n ))}\n
\n )}\n \n );\n};\n\nexport default TaskHistory;\n","import React, { useEffect, useState } from 'react';\nimport { useAuth } from '../../auth/AuthProvider';\n\nexport function useFieldWork(group) {\n const [fieldwork, setFieldwork] = useState({});\n const [loading, setLoading] = useState(false);\n const { token } = useAuth();\n\n useEffect(() => {\n const fetchData = async () => {\n setLoading(true);\n var url = group ? `/api/dashboard/fieldwork/${group}` : `/api/dashboard/fieldwork`;\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json', authorization: `Bearer ${token}` }\n });\n const body = await response.json();\n if (response.status !== 200) throw Error(body.message);\n setFieldwork(body);\n } catch (error) {\n console.error('Fetching fieldwork data failed:', error.message);\n } finally {\n setLoading(false);\n }\n };\n fetchData();\n }, [group, token]);\n\n return { fieldwork, loading };\n}\n\nexport function useCompletedWork(group, months) {\n const [completedWork, setCompletedWork] = useState({});\n const [loading, setLoading] = useState(false);\n const { token } = useAuth();\n\n useEffect(() => {\n const fetchData = async () => {\n setLoading(true);\n var url = group ? `/api/dashboard/completed/${group}/${months}` : `/api/dashboard/completed/${months}`;\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json', authorization: `Bearer ${token}` }\n });\n const body = await response.json();\n if (response.status !== 200) throw Error(body.message);\n setCompletedWork(body);\n } catch (error) {\n console.error('Fetching completed work data failed:', error.message);\n } finally {\n setLoading(false);\n }\n };\n fetchData();\n }, [group, months]);\n\n return { completedWork, loading };\n}\n","import React, { useState, useEffect, useMemo, useRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Table, Button, Badge } from 'reactstrap';\nimport ErrorBoundary from './ErrorBoundary';\nimport { useFieldWork } from './DataHooks';\nimport moment from 'moment';\nimport gql from 'graphql-tag';\nimport { useMutation } from '@apollo/react-hooks';\nimport { getFields } from '../SystemSettings/StaticFieldLists';\nimport { getAddress, formatDate, formatDateTime } from '../../utils/utilFunctions';\nimport { toast } from 'react-toastify';\nimport { useAuth } from '../../auth/AuthProvider';\nimport { CSVLink } from 'react-csv';\nimport { debounce } from 'lodash';\nimport NewPotentialJob from './NewPotentialJob';\nimport DraftBuilderApprovalMessage from '../BuilderApprovals/DraftBuilderApprovalMessage';\nimport { generateBuilderSlug, generateBuilderMessage } from '../BuilderApprovals/BuilderSlug';\n\nconst UPDATE_CUSTOMTASKS = gql`\n mutation UpdateCustomTasks($tasks: [CustomTaskInput!]) {\n updateCustomTasks(tasks: $tasks) {\n id\n }\n }\n`;\n\nconst UPDATE_JOB_STATUS = gql`\n mutation UpdateJobStatus($id: ID!, $status: String!) {\n updateJobStatus(id: $id, status: $status) {\n id\n }\n }\n`;\n\nconst UPDATE_FIELD_COMMENT = gql`\n mutation UpdateFieldComment($fieldComment: FieldCommentInput!) {\n updateFieldComment(fieldComment: $fieldComment) {\n id\n scheduleId\n comments\n createdUtc\n user {\n id\n displayName\n }\n }\n }\n`;\n\nconst DELETE_FIELD_COMMENT = gql`\n mutation DeleteFieldComment($id: ID!) {\n deleteFieldComment(id: $id)\n }\n`;\n\nconst UPDATE_DEVELOPER_AND_SITE_CONTACT = gql`\n mutation UpdateDeveloperAndSiteContact(\n $id: ID!\n $developer: String!\n $siteContact: String!\n $siteContactPhone: String!\n ) {\n updateDeveloperAndSiteContact(\n id: $id\n developer: $developer\n siteContact: $siteContact\n siteContactPhone: $siteContactPhone\n )\n }\n`;\n\nconst SEND_REQUEST = gql`\n mutation SendRequest($ids: [Int]!, $message: String!) {\n sendRequest(ids: $ids, message: $message)\n }\n`;\n\nconst FieldWorkList = ({ settings, structuredAddressWorkTypes, groupId }) => {\n const auth = useAuth();\n const [customTaskList, setCustomTaskList] = useState();\n const [editCustomTask, setEditCustomTask] = useState(null);\n const [customDisplayNames, setCustomDisplayNames] = useState(null);\n const [optionalFieldWorkColumns, setOptionalFieldWorkColumns] = useState([]);\n const [optionalFieldWorkColumnCount, setOptionalFieldWorkColumnCount] = useState(0);\n const [customFieldHeaders, setCustomFieldHeaders] = useState([]);\n const [customFieldCount, setCustomFieldCount] = useState(0);\n const [fieldJobStatusSettings, setFieldJobStatusSettings] = useState([]);\n const [workTypesJobStatusOrder, setWorkTypesJobStatusOrder] = useState([]);\n const [showJobStatusCol, setShowJobStatusCol] = useState();\n const [searchFilter, setSearchFilter] = useState('');\n const [searchData, setSearchData] = useState('');\n const [editJobStatus, setEditJobStatus] = useState(null);\n const [editFieldComment, setEditFieldComment] = useState(null);\n // ToDo: The editing of developer and site contact has been combined on the one modal\n // but the system settings may have either one hidden and or editable.\n // A combined system setting should be created for this.\n const [canEditDeveloper, setCanEditDeveloper] = useState([]); // string array of workTypes\n const [canEditSiteContact, setCanEditSiteContact] = useState([]); // string array of workTypes\n const [builderList, setBuilderList] = useState([]);\n const [fieldWorkTasks, setFieldWorkTasks] = useState([]);\n const [columnSearchFilter, setColumnSearchFilter] = useState({});\n const [inputKey, setInputKey] = useState(0);\n const [showPotentialJobModal, setShowPotentialJobModal] = useState(false);\n const [editDeveloperAndContact, setEditDeveloperAndContact] = useState(null);\n const [selectedForBuilderApproval, setSelectedForBuilderApproval] = useState(null);\n\n const { fieldwork, loading } = useFieldWork(groupId, true);\n\n const [updateCustomTasks] = useMutation(UPDATE_CUSTOMTASKS);\n const [updateJobStatus] = useMutation(UPDATE_JOB_STATUS);\n const [updateDeveloperAndSiteContact] = useMutation(UPDATE_DEVELOPER_AND_SITE_CONTACT);\n const [updateFieldComment] = useMutation(UPDATE_FIELD_COMMENT);\n const [deleteFieldComment] = useMutation(DELETE_FIELD_COMMENT);\n const [sendRequestToBuilder] = useMutation(SEND_REQUEST);\n\n const taskGroupings = [\n { name: 'completed', title: 'Completed' },\n { name: 'previouslyScheduled', title: 'Previously Scheduled' },\n { name: 'monday', title: 'Monday', day: 1 },\n { name: 'tuesday', title: 'Tuesday', day: 2 },\n { name: 'wednesday', title: 'Wednesday', day: 3 },\n { name: 'thursday', title: 'Thursday', day: 4 },\n { name: 'friday', title: 'Friday', day: 5 },\n { name: 'saturday', title: 'Saturday', day: 6 },\n { name: 'sunday', title: 'Sunday', day: 0 },\n { name: 'byStatus', title: 'By Status' }\n ];\n\n const getDisplayStatus = (task) => {\n if (!task.acceptedDate && !task.completedDate) return 'New Job';\n if (!task.onsiteDate && !task.completedDate) return 'Accepted';\n if (!task.completedDate) return 'Work In Progress';\n return 'Completed';\n };\n\n const getShowJobStatus = (task) => {\n const fieldJobStatusSetting = fieldJobStatusSettings.find((x) => x.workType === task.workType);\n if (!fieldJobStatusSetting) return false;\n return true;\n };\n\n const filteredTasks = useMemo(() => {\n if (!fieldWorkTasks || !fieldwork?.customTasks) return {};\n\n let remainingTasks = fieldWorkTasks.filter((task) => task.status?.indexOf('On Hold') === -1);\n let remainingCustomTasks = fieldwork.customTasks.filter((task) => task.isCompleted === false);\n\n const searchFilterLower = searchFilter?.toLowerCase();\n\n // Apply the search filter\n if (searchFilterLower) {\n remainingTasks = remainingTasks.filter((task) => {\n const taskName = task.name?.toLowerCase();\n const taskAddress = structuredAddressWorkTypes?.includes(task.workType)\n ? getAddress(task)?.toLowerCase()\n : task.address?.toLowerCase();\n const taskWorkOrder = task.workOrder?.toLowerCase();\n const developer = task.developer?.toLowerCase();\n const siteContact = task.siteContact?.toLowerCase();\n const status = getDisplayStatus(task).toLowerCase();\n const showJobStatus = getShowJobStatus(task);\n const statusFilter = showJobStatus ? task.status?.toLowerCase() : '';\n\n return (\n taskName?.includes(searchFilterLower) ||\n taskAddress?.includes(searchFilterLower) ||\n taskWorkOrder?.includes(searchFilterLower) ||\n developer?.includes(searchFilterLower) ||\n siteContact?.includes(searchFilterLower) ||\n status?.includes(searchFilterLower) ||\n statusFilter?.includes(searchFilterLower)\n );\n });\n\n remainingCustomTasks = remainingCustomTasks.filter((task) => {\n const taskName = task.name?.toLowerCase();\n return taskName?.includes(searchFilterLower);\n });\n }\n\n // Apply the column search filter\n if (Object.keys(columnSearchFilter).length > 0) {\n remainingTasks = remainingTasks.filter((task) => {\n const taskName = task.name?.toLowerCase();\n const taskAddress = structuredAddressWorkTypes?.includes(task.workType)\n ? getAddress(task)?.toLowerCase()\n : task.address?.toLowerCase();\n const taskWorkOrder = task.workOrder?.toLowerCase();\n const developer = task.developer?.toLowerCase();\n const siteContact = task.siteContact?.toLowerCase();\n const status = getDisplayStatus(task).toLowerCase();\n const showJobStatus = getShowJobStatus(task);\n const statusFilter = showJobStatus ? task.status?.toLowerCase() : '';\n\n return (\n (!columnSearchFilter.task || taskName?.includes(columnSearchFilter.task.toLowerCase())) &&\n (!columnSearchFilter.address || taskAddress?.includes(columnSearchFilter.address.toLowerCase())) &&\n (!columnSearchFilter.workOrder || taskWorkOrder?.includes(columnSearchFilter.workOrder.toLowerCase())) &&\n (!columnSearchFilter.developer || developer?.includes(columnSearchFilter.developer.toLowerCase())) &&\n (!columnSearchFilter.siteContact || siteContact?.includes(columnSearchFilter.siteContact.toLowerCase())) &&\n (!columnSearchFilter.status || status?.includes(columnSearchFilter.status.toLowerCase())) &&\n (!columnSearchFilter.jobStatus || statusFilter?.includes(columnSearchFilter.jobStatus.toLowerCase())) &&\n (columnSearchFilter.onsiteDate === 'Yes'\n ? task.onsiteDate != null\n : columnSearchFilter.onsiteDate === 'No'\n ? task.onsiteDate == null\n : true)\n );\n });\n remainingCustomTasks = [];\n }\n\n let tasksByCategory = {\n completed: [],\n previouslyScheduled: [],\n monday: [],\n tuesday: [],\n wednesday: [],\n thursday: [],\n friday: [],\n saturday: [],\n sunday: [],\n byStatus: [],\n nextWeek: [],\n nextMonth: [],\n onHold: []\n };\n\n const startOfWeek = moment().startOf('isoWeek').toDate(); // Monday as the start of the week\n const newEndOfWeek = moment().endOf('isoWeek').toDate(); // Sunday as the end of the week\n const nextWeekEnd = moment().add(1, 'week').endOf('isoWeek').toDate();\n\n const isInFieldJobStatusSettings = (task) =>\n fieldJobStatusSettings.some((settings) => settings.workType === task.workType);\n\n tasksByCategory.onHold = remainingTasks.filter((task) => task.status === 'On Hold');\n remainingTasks = remainingTasks.filter((task) => task.status !== 'On Hold');\n\n tasksByCategory.completed = remainingTasks.filter((task) => task.completedDate);\n remainingTasks = remainingTasks.filter((task) => !tasksByCategory.completed.includes(task));\n\n tasksByCategory.previouslyScheduled = remainingTasks.filter((task) => {\n const taskDate = moment.utc(task.scheduledStartTime).tz(moment.tz.guess());\n return taskDate < startOfWeek && task.status !== 'Complete' && !isInFieldJobStatusSettings(task);\n });\n remainingTasks = remainingTasks.filter((task) => !tasksByCategory.previouslyScheduled.includes(task));\n\n tasksByCategory.previouslyScheduled = tasksByCategory.previouslyScheduled.concat(\n remainingCustomTasks.filter((task) => {\n const taskDate = moment.utc(task.scheduledStartTime).tz(moment.tz.guess());\n return taskDate < startOfWeek;\n })\n );\n remainingCustomTasks = remainingCustomTasks.filter((task) => !tasksByCategory.previouslyScheduled.includes(task));\n\n const getTasksForDay = (dayOfWeek) => {\n const dayDate = moment()\n .startOf('isoWeek')\n .add(dayOfWeek === 0 ? 6 : dayOfWeek - 1, 'days')\n .toDate();\n const jobTasks = remainingTasks.filter((task) => {\n const taskDate = moment.utc(task.scheduledStartTime).tz(moment.tz.guess());\n return (\n taskDate.day() === dayOfWeek &&\n taskDate >= startOfWeek &&\n taskDate <= newEndOfWeek &&\n !isInFieldJobStatusSettings(task)\n );\n });\n\n const custTasks = remainingCustomTasks.filter((task) => {\n const taskDate = moment.utc(task.scheduledStartTime).tz(moment.tz.guess());\n return taskDate.day() === dayOfWeek && taskDate >= startOfWeek && taskDate <= newEndOfWeek;\n });\n\n return { tasks: jobTasks.concat(custTasks), date: dayDate };\n };\n\n taskGroupings.forEach((grouping) => {\n if (grouping.day !== undefined) {\n const data = getTasksForDay(grouping.day);\n tasksByCategory[grouping.name] = data.tasks;\n grouping.date = data.date;\n }\n });\n\n remainingTasks = remainingTasks.filter(\n (task) =>\n ![\n tasksByCategory.monday,\n tasksByCategory.tuesday,\n tasksByCategory.wednesday,\n tasksByCategory.thursday,\n tasksByCategory.friday,\n tasksByCategory.saturday,\n tasksByCategory.sunday,\n tasksByCategory.previouslyScheduled\n ]\n .flat()\n .includes(task)\n );\n\n remainingCustomTasks = remainingCustomTasks.filter(\n (task) =>\n ![\n tasksByCategory.monday,\n tasksByCategory.tuesday,\n tasksByCategory.wednesday,\n tasksByCategory.thursday,\n tasksByCategory.friday,\n tasksByCategory.saturday,\n tasksByCategory.sunday,\n tasksByCategory.previouslyScheduled\n ]\n .flat()\n .includes(task)\n );\n\n tasksByCategory.byStatus = remainingTasks.filter(\n (task) => isInFieldJobStatusSettings(task) && task.status !== 'Complete'\n );\n remainingTasks = remainingTasks.filter((task) => !tasksByCategory.byStatus.includes(task));\n\n tasksByCategory.nextWeek = remainingTasks.filter((task) => {\n const taskDate = moment.utc(task.scheduledStartTime).tz(moment.tz.guess());\n return taskDate > newEndOfWeek && taskDate <= nextWeekEnd;\n });\n\n const nextWeekCustomeTasks = remainingCustomTasks.filter((task) => {\n const taskDate = moment.utc(task.scheduledStartTime).tz(moment.tz.guess());\n return taskDate > newEndOfWeek && taskDate <= nextWeekEnd;\n });\n\n tasksByCategory.nextWeek = tasksByCategory.nextWeek.concat(nextWeekCustomeTasks);\n\n tasksByCategory.nextMonth = remainingTasks.filter((task) => new Date(task.scheduledStartTime) > nextWeekEnd);\n\n const nextMonthCustomTasks = remainingCustomTasks.filter((task) => new Date(task.scheduledStartTime) > nextWeekEnd);\n\n tasksByCategory.nextMonth = tasksByCategory.nextMonth.concat(nextMonthCustomTasks);\n\n return tasksByCategory;\n }, [fieldWorkTasks, searchFilter, fieldJobStatusSettings, structuredAddressWorkTypes, fieldwork, columnSearchFilter]);\n\n const headers = useMemo(() => {\n let baseHeaders = [\n { key: 'address', label: 'Address' },\n { key: 'task', label: 'Task' },\n { key: 'workOrder', label: 'Work Order' },\n { key: 'status', label: 'Status' }\n ];\n\n if (showJobStatusCol) {\n baseHeaders.push({ key: 'jobStatus', label: 'Job Status' });\n }\n\n const optionalHeaders = [\n {\n key: 'developer',\n label: customDisplayNames?.find((field) => field.fieldName === 'developer')?.displayName || 'Developer'\n },\n { key: 'scheduledStartTime', label: 'Scheduled Start' },\n { key: 'issuedDate', label: 'Issued Date' },\n { key: 'dueDate', label: 'Due Date' },\n { key: 'owner', label: 'Issued By' },\n { key: 'onsiteDate', label: 'Onsite Date' },\n { key: 'siteContact', label: 'Site Contact' },\n { key: 'customerRef', label: 'Customer Ref' }\n ];\n\n baseHeaders = baseHeaders\n .concat(optionalHeaders.filter((header) => optionalFieldWorkColumns.includes(header.key)))\n .concat(customFieldHeaders);\n\n return baseHeaders;\n }, [showJobStatusCol, optionalFieldWorkColumns, customDisplayNames, customFieldHeaders]);\n\n const excelHeaders = useMemo(() => {\n const fieldCommentHeader = { key: 'fieldComment', label: 'Field Comment' };\n const headersWithFieldComments = headers.concat(fieldCommentHeader);\n\n return headersWithFieldComments;\n }, [headers]);\n\n useEffect(() => {\n if (fieldwork) {\n const scrollPosition = sessionStorage.getItem('fieldworkListScrollPosition');\n if (scrollPosition) {\n setTimeout(() => {\n window.scrollTo(0, parseInt(scrollPosition, 10));\n sessionStorage.removeItem('fieldworkListScrollPosition');\n }, 400);\n }\n }\n }, [fieldwork]);\n\n useEffect(() => {\n const rejectedSchedules = Array.isArray(fieldwork.rejectedSchedules) ? fieldwork.rejectedSchedules : [];\n const workSchedule = Array.isArray(fieldwork.workSchedule) ? fieldwork.workSchedule : [];\n\n const workTypesInData = [...new Set([...rejectedSchedules, ...workSchedule].map((x) => x.workType))];\n\n const _customDisplayNames = [];\n settings.customDisplayNames.forEach((setting) => {\n if (workTypesInData.includes(setting.workType)) {\n const fields = JSON.parse(setting.config).fields;\n if (fields) {\n _customDisplayNames.push(...fields);\n }\n }\n });\n\n setCustomDisplayNames([...new Set(_customDisplayNames)]);\n\n let showJobStatus = false;\n const _fieldJobStatusSettings = [];\n settings.fieldJobStatusSettings.forEach((setting) => {\n const config = JSON.parse(setting.config);\n if (config?.useJobStatus) {\n if (workTypesInData.includes(setting.workType)) {\n _fieldJobStatusSettings.push({ config: config, workType: setting.workType });\n showJobStatus = true;\n }\n }\n });\n\n // Accumulate all visible fields based on work types in data\n const _optionalFieldWorkColumns = JSON.parse(JSON.stringify(getFields('Constructions').concat(getFields('Tasks'))))\n .filter((f) => f.isOptionalFieldWorkList)\n .map((f) => ({\n fieldName: f.fieldName,\n show: settings.optionalFieldWorkColumns.length === 0\n }));\n\n // manually add \"siteContact\" as we're concatenating name and number\n _optionalFieldWorkColumns.push({ fieldName: 'siteContact', show: false });\n\n const canEditDeveloperWorkTypes = [];\n const canEditSiteContactWorkTypes = [];\n\n settings.optionalFieldWorkColumns.forEach((setting) => {\n const config = JSON.parse(setting.config);\n\n if (!workTypesInData.includes(setting.workType)) return;\n\n const fields = config.fields;\n\n if (!fields) return;\n\n _optionalFieldWorkColumns.forEach((field) => {\n const storedField = fields.find((x) => x.fieldName === field.fieldName);\n\n if (storedField && storedField.show) {\n field.show = true;\n }\n\n if (storedField && storedField.fieldName === 'developer' && storedField.show && storedField.canEdit) {\n canEditDeveloperWorkTypes.push(setting.workType);\n }\n\n if (storedField && storedField.fieldName === 'siteContact' && storedField.show && storedField.canEdit) {\n canEditSiteContactWorkTypes.push(setting.workType);\n }\n });\n\n setCanEditDeveloper(canEditDeveloperWorkTypes);\n setCanEditSiteContact(canEditSiteContactWorkTypes);\n });\n\n setOptionalFieldWorkColumns(_optionalFieldWorkColumns.filter((x) => x.show).map((x) => x.fieldName));\n setOptionalFieldWorkColumnCount(_optionalFieldWorkColumns.filter((x) => x.show).length);\n\n const _customFieldHeaders = settings.customFieldTemplates.flatMap((template) => {\n try {\n const config = JSON.parse(template.config);\n return config.fields\n .filter((field) => field.isFieldWork)\n .map((field) => ({\n key: `customField_${field.fieldName}`,\n label: field.fieldName,\n fieldType: field.fieldType\n }));\n } catch (e) {\n console.error('Error parsing custom field template:', e);\n return [];\n }\n });\n\n setCustomFieldCount(_customFieldHeaders.length);\n\n const _workTypesJobStatusOrder = [];\n settings.jobStatusSettings.forEach((setting) => {\n const config = JSON.parse(setting.config);\n if (\n _fieldJobStatusSettings.some((fieldJobStatusSetting) => fieldJobStatusSetting.workType === setting.workType)\n ) {\n const statuses = config.statuses;\n const sortedStatuses = statuses.sort((a, b) => a.sortOrder - b.sortOrder);\n _workTypesJobStatusOrder.push({ workType: setting.workType, statuses: sortedStatuses });\n }\n });\n\n if (settings.lookups) {\n const builderLookup = settings.lookups.filter((lookup) => lookup.name === 'Builder Lookup')[0];\n if (builderLookup) {\n setBuilderList(builderLookup.data);\n }\n }\n\n setCustomFieldHeaders(_customFieldHeaders);\n setColumnSearchFilter({});\n setShowJobStatusCol(showJobStatus);\n setFieldJobStatusSettings(_fieldJobStatusSettings);\n setWorkTypesJobStatusOrder(_workTypesJobStatusOrder);\n setFieldWorkTasks(workSchedule);\n }, [fieldwork, settings]);\n\n useEffect(() => {\n if (fieldwork?.customTasks) {\n setCustomTaskList(fieldwork.customTasks);\n }\n }, [fieldwork.customTasks]);\n\n const SearchInput = ({ headerKey, setColumnSearchDataDebounced, defaultValue }) => {\n const [inputValue, setInputValue] = useState(defaultValue || '');\n const inputRef = useRef(null);\n\n const handleInputChange = (e) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n\n setColumnSearchDataDebounced((prev) => {\n const newState = { ...prev };\n if (newValue.trim() === '') {\n delete newState[headerKey];\n } else {\n newState[headerKey] = newValue;\n }\n return newState;\n });\n };\n\n //ToDo: Work out how to keep focus when all text is deleted\n useEffect(() => {\n if (defaultValue) {\n inputRef.current.focus();\n }\n }, [defaultValue]);\n\n return (\n \n );\n };\n\n const getDisplayName = (email) => {\n const user = settings.users.find((x) => x.email === email);\n return user?.displayName;\n };\n\n const isOverDue = (task) => {\n if (task.completedDate || !task.dueDate) {\n return false;\n }\n if (new Date(task.dueDate) < new Date()) {\n return true;\n }\n return false;\n };\n\n const handleEditCustomTask = () => {\n const customTask = customTaskList.find((x) => x.id === editCustomTask.id);\n if (customTask) {\n customTask.isCompleted = editCustomTask.isCompleted;\n setCustomTaskList([...customTaskList]);\n try {\n updateCustomTasks({\n variables: { tasks: customTaskList },\n operationName: 'UpdateCustomTasks'\n });\n } catch (error) {\n toast('Error Updating Custom Tasks', { type: 'error' });\n }\n }\n setEditCustomTask(null);\n };\n\n const getJobStatusColour = (task) => {\n let defaultReturn = task.completedDate ? '#cdedd8' : null; //default to green if completed\n\n const fieldJobStatusSetting = fieldJobStatusSettings.find((x) => x.workType === task.workType);\n if (!fieldJobStatusSetting) return defaultReturn;\n const fieldJobStatusColour = fieldJobStatusSetting.config.fieldJobStatusColours.find(\n (x) => x.statusName === task.status\n );\n if (!fieldJobStatusColour) return defaultReturn;\n return fieldJobStatusColour.colour;\n };\n\n const getStatusOptions = () => {\n const statusOptions =\n workTypesJobStatusOrder\n .find((x) => x.workType === editJobStatus.workType)\n ?.statuses.filter((x) => x.fieldEdit)\n .map((status) => status.statusName) || [];\n statusOptions.unshift(editJobStatus.status);\n\n const distinctStatusOptions = [...new Set(statusOptions)];\n\n return distinctStatusOptions.map((statusName) => (\n \n ));\n };\n\n const getFieldComments = (task) => {\n const fieldComments = task.fieldComments\n ?.filter((x) => x.scheduleId === task.id && !!x.comments)\n .sort((a, b) => new Date(b.createdUtc) - new Date(a.createdUtc));\n return fieldComments;\n };\n\n const handleUpdateJobStatus = () => {\n try {\n updateJobStatus({\n variables: { id: parseInt(editJobStatus.constructionId), status: editJobStatus.status },\n operationName: 'UpdateJobStatus'\n });\n const task = filteredTasks.byStatus.find((x) => x.id === editJobStatus.id);\n if (task) {\n task.status = editJobStatus.status;\n }\n } catch (error) {\n toast('Error Updating Job Status', { type: 'error' });\n }\n setEditJobStatus(null);\n };\n\n const handleUpdateDeveloperAndContact = () => {\n try {\n updateDeveloperAndSiteContact({\n variables: {\n id: editDeveloperAndContact.constructionId,\n developer: editDeveloperAndContact.developer,\n siteContact: editDeveloperAndContact.siteContact,\n siteContactPhone: editDeveloperAndContact.siteContactPhone\n },\n operationName: 'UpdateDeveloperAndSiteContact'\n });\n const task = filteredTasks.byStatus.find((x) => x.id === editDeveloperAndContact.id);\n if (task) {\n task.developer = editDeveloperAndContact.developer;\n task.siteContact = editDeveloperAndContact.siteContact;\n task.siteContactPhone = editDeveloperAndContact.siteContactPhone;\n }\n } catch (error) {\n toast('Error Updating Developer and Site Contact', { type: 'error' });\n }\n setEditDeveloperAndContact(null);\n };\n\n const handleUpdateFieldComment = () => {\n try {\n const { createdUtc, user, ...fieldCommentToUpdate } = editFieldComment;\n const updateData = {\n id: fieldCommentToUpdate.id,\n userId: auth.me.id,\n scheduleId: fieldCommentToUpdate.scheduleId,\n comments: fieldCommentToUpdate.comments\n };\n\n updateFieldComment({\n variables: { fieldComment: updateData },\n operationName: 'UpdateFieldComment'\n }).then((response) => {\n const updatedComment = response.data.updateFieldComment;\n setFieldWorkTasks((prevFieldWorkTasks) => {\n return prevFieldWorkTasks.map((task) => {\n if (task.id === editFieldComment.scheduleId) {\n const index = task.fieldComments.findIndex((x) => x.id === updatedComment.id);\n let updatedFieldComments = [...task.fieldComments];\n\n if (index > -1) {\n updatedFieldComments[index] = {\n ...updatedFieldComments[index],\n comments: updatedComment.comments,\n createdUtc: updatedComment.createdUtc.toString().replace('Z', ''),\n userDisplayName: updatedComment.user.displayName,\n userId: updatedComment.user.id\n };\n } else {\n updatedFieldComments = [\n {\n id: updatedComment.id,\n scheduleId: updatedComment.scheduleId,\n comments: updatedComment.comments,\n createdUtc: updatedComment.createdUtc.toString().replace('Z', ''),\n userDisplayName: updatedComment.user.displayName,\n userId: updatedComment.user.id\n },\n ...updatedFieldComments\n ];\n }\n\n return { ...task, fieldComments: updatedFieldComments };\n }\n\n return task;\n });\n });\n });\n } catch (error) {\n toast('Error Updating Field Comment', { type: 'error' });\n }\n setEditFieldComment(null);\n };\n\n const handleDeleteFieldComment = (id) => {\n try {\n deleteFieldComment({\n variables: { id: id },\n operationName: 'DeleteFieldComment'\n }).then(() => {\n setFieldWorkTasks((prevFieldWorkTasks) => {\n return prevFieldWorkTasks.map((task) => {\n const index = task.fieldComments.findIndex((comment) => comment.id === id);\n if (index > -1) {\n const updatedFieldComments = [\n ...task.fieldComments.slice(0, index),\n ...task.fieldComments.slice(index + 1)\n ];\n return { ...task, fieldComments: updatedFieldComments };\n }\n return task;\n });\n });\n });\n } catch (error) {\n toast('Error Deleting Field Comment', { type: 'error' });\n }\n setEditFieldComment(null);\n };\n\n const handleTaskClick = () => {\n const scrollPosition = window.scrollY;\n sessionStorage.setItem('fieldworkListScrollPosition', scrollPosition);\n };\n\n const exportData = useMemo(() => {\n if (!filteredTasks) return [];\n const exportData = [];\n\n Object.keys(filteredTasks).forEach((key) => {\n if (Array.isArray(filteredTasks[key])) {\n filteredTasks[key].forEach((task) => {\n const row = {};\n excelHeaders.forEach((header) => {\n if (header.key === 'address') {\n row[header.key] = getAddress(task);\n } else if (header.key === 'task') {\n row[header.key] = task['name'];\n } else if (header.key === 'status') {\n row[header.key] = getDisplayStatus(task);\n } else if (header.key === 'jobStatus') {\n row[header.key] = getShowJobStatus(task) ? task['status'] : '';\n } else if (header.key === 'siteContact') {\n row[header.key] =\n task['siteContact'] + (task['siteContactPhone'] ? ` (${task['siteContactPhone']})` : '');\n } else if (header.key === 'fieldComment') {\n const fieldComments = getFieldComments(task);\n if (fieldComments && fieldComments.length > 0) {\n row[header.key] = fieldComments[0].comments;\n } else {\n row[header.key] = '';\n }\n } else {\n if ((header.key.includes('Date') || header.key.includes('Time')) && task[header.key]) {\n row[header.key] = task[header.key].substring(0, 10);\n } else {\n row[header.key] = task[header.key];\n }\n }\n });\n\n exportData.push(row);\n });\n }\n });\n\n return exportData;\n }, [filteredTasks, excelHeaders]);\n\n const uniqueSelectOptions = useMemo(() => {\n const uniqueOptions = {\n task: [...new Set(fieldWorkTasks.map((task) => task.name).filter((name) => name != null && name !== ''))].sort(),\n status: [...new Set(fieldWorkTasks.map((task) => getDisplayStatus(task)))]\n };\n\n if (optionalFieldWorkColumns.includes('developer')) {\n uniqueOptions.developer = [\n ...new Set(\n fieldWorkTasks.map((task) => task.developer).filter((developer) => developer != null && developer !== '')\n )\n ].sort();\n }\n\n if (optionalFieldWorkColumns.includes('owner')) {\n uniqueOptions.owner = [\n ...new Set(\n fieldWorkTasks.map((task) => getDisplayName(task.owner)).filter((owner) => owner != null && owner !== '')\n )\n ].sort();\n }\n\n if (optionalFieldWorkColumns.includes('onsiteDate')) {\n uniqueOptions.onsiteDate = ['Yes', 'No'];\n }\n\n if (showJobStatusCol) {\n uniqueOptions.jobStatus = [\n ...new Set(\n fieldWorkTasks\n .map((task) => {\n if (getShowJobStatus(task)) {\n return task.status;\n }\n return null;\n })\n .filter((jobStatus) => jobStatus != null && jobStatus !== '')\n )\n ].sort();\n }\n\n return uniqueOptions;\n }, [fieldWorkTasks, optionalFieldWorkColumns]);\n\n const groupedDisplayTasks = (grouping) => {\n const displayTasks = filteredTasks[grouping.name];\n\n if (grouping.name !== 'byStatus') {\n return [...displayTasks]\n .sort((a, b) => new Date(a.scheduledStartTime) - new Date(b.scheduledStartTime))\n .sort((a, b) => (a.isCurrentlyOnsite === b.isCurrentlyOnsite ? 0 : a.isCurrentlyOnsite ? -1 : 1));\n }\n\n displayTasks.sort((a, b) => {\n if (a.isCurrentlyOnsite !== b.isCurrentlyOnsite) {\n return a.isCurrentlyOnsite ? -1 : 1;\n }\n\n if (a.workType !== b.workType) {\n return a.workType.localeCompare(b.workType);\n }\n\n const aWorkType = workTypesJobStatusOrder.find((x) => x.workType === a.workType);\n const bWorkType = workTypesJobStatusOrder.find((x) => x.workType === b.workType);\n\n const aStatusOrder = aWorkType?.statuses.find((x) => x.statusName === a.status)?.fieldOrder || 0;\n const bStatusOrder = bWorkType?.statuses.find((x) => x.statusName === b.status)?.fieldOrder || 0;\n\n if (aStatusOrder !== bStatusOrder) {\n return aStatusOrder - bStatusOrder;\n }\n\n return new Date(a.scheduledStartTime) - new Date(b.scheduledStartTime);\n });\n\n return displayTasks;\n };\n\n const CurrentTasksRows = ({ grouping }) => {\n const displayTasks = groupedDisplayTasks(grouping);\n\n return (\n <>\n {displayTasks.length > 0 && (\n \n \n
{grouping.title + (grouping.date !== undefined ? ' - ' + formatDate(grouping.date) : '')}
\n \n \n )}\n \n \n );\n };\n\n const setColumnSearchDebounced = useMemo(() => {\n return debounce((updateFunction) => {\n setColumnSearchFilter(updateFunction);\n }, 800);\n }, [setColumnSearchFilter]);\n\n // #region Builder Approval\n\n const handleSelectForBuilderApproval = (task) => {\n const fullAddress = getAddress(task);\n const jobIds = [task.constructionId];\n\n const { link, domainName } = generateBuilderSlug(task.siteContact, task.siteContactPhone, jobIds);\n\n setSelectedForBuilderApproval({\n ...selectedForBuilderApproval,\n jobs: [{ ...task, address: fullAddress, selected: true }],\n addressText: fullAddress,\n message: generateBuilderMessage(fullAddress, link, domainName),\n siteContact: task.siteContact,\n phoneNumber: task.siteContactPhone\n });\n };\n\n const handleCloseApproval = () => {\n setSelectedForBuilderApproval(null);\n };\n\n const requestSent = () => {\n const jobIds = selectedForBuilderApproval.jobs.map((job) => job.constructionId);\n const message = selectedForBuilderApproval.message.replace(/\\n/g, ' ');\n sendRequestToBuilder({\n variables: { ids: jobIds, message: message }\n }).then(() => {\n // Update the local state to reflect the builder approval sent date\n setFieldWorkTasks((prevFieldWorkTasks) => {\n return prevFieldWorkTasks.map((task) => {\n if (jobIds.includes(task.constructionId)) {\n return {\n ...task,\n builderApprovalSentDate: new Date().toISOString()\n };\n }\n return task;\n });\n });\n setSelectedForBuilderApproval(null);\n });\n };\n\n // #endregion\n\n const SearchRow = () => {\n const textsearch = ['address', 'workOrder', 'siteContact'];\n return (\n \n {headers.map((header) => {\n const isSelectField = uniqueSelectOptions.hasOwnProperty(header.key);\n if (isSelectField || header.key === 'jobStatus') {\n return (\n \n {\n const value = e.target.value;\n setColumnSearchFilter((prev) => {\n const newState = { ...prev };\n if (value === '') {\n delete newState[header.key];\n } else {\n newState[header.key] = value;\n }\n return newState;\n });\n }}\n >\n \n {uniqueSelectOptions[header.key]?.map((option, index) => (\n \n ))}\n \n \n );\n } else if (textsearch.includes(header.key)) {\n return (\n \n \n \n );\n }\n return ;\n })}\n \n );\n };\n\n const TaskRows = ({ displayTasks, groupingName = '' }) => {\n return (\n <>\n {displayTasks.map((task) => {\n const key = task.isCompletable ? 'c_' + task.id : 't_' + task.id;\n return (\n \n {task.isCompletable ? (\n \n setEditCustomTask(task)}\n >\n {task.name}\n \n {optionalFieldWorkColumns.includes('scheduledStartTime') && (\n {formatDate(task.scheduledStartTime)}\n )}\n \n ) : (\n <>\n \n \n {structuredAddressWorkTypes?.includes(task.workType) ? getAddress(task) : <>{task.address}}\n {task.isCurrentlyOnsite && Onsite}\n \n \n \n {task.name}\n \n \n {task.workOrder}\n {getDisplayStatus(task)}\n {showJobStatusCol && (\n \n {getShowJobStatus(task) && (\n setEditJobStatus(task)} style={{ cursor: 'pointer' }}>\n {workTypesJobStatusOrder\n .find((x) => x.workType === task.workType)\n ?.statuses.filter((x) => x.fieldEdit).length > 0 && }{' '}\n {task.status}\n \n )}\n \n )}\n {optionalFieldWorkColumns.includes('developer') && (\n \n <>\n {canEditDeveloper.includes(task.workType) ? (\n setEditDeveloperAndContact(task)} style={{ cursor: 'pointer' }}>\n {task.developer}\n \n ) : (\n task.developer\n )}\n \n \n )}\n {optionalFieldWorkColumns.includes('scheduledStartTime') && (\n {formatDate(task.scheduledStartTime)}\n )}\n {optionalFieldWorkColumns.includes('issuedDate') && {formatDate(task.issuedDate)}}\n {optionalFieldWorkColumns.includes('dueDate') && (\n {formatDate(task.dueDate)}\n )}\n {optionalFieldWorkColumns.includes('owner') && {getDisplayName(task.owner)}}\n {optionalFieldWorkColumns.includes('onsiteDate') && {formatDate(task.onsiteDate)}}\n {optionalFieldWorkColumns.includes('siteContact') && (\n \n <>\n {canEditSiteContact.includes(task.workType) ? (\n setEditDeveloperAndContact(task)} style={{ cursor: 'pointer' }}>\n {task.siteContact}\n {task.siteContactPhone ? ` (${task.siteContactPhone})` : ''}\n \n ) : (\n <>\n {task.siteContact}\n {task.siteContactPhone ? ` (${task.siteContactPhone})` : ''}\n \n )}\n \n \n )}\n {optionalFieldWorkColumns.includes('customerRef') && {task.customerRef}}\n {headers.map((header) => {\n if (header.key.startsWith('customField_')) {\n const fieldName = header.key.replace('customField_', '');\n const value = task.customFields?.fields?.[fieldName];\n return {header.fieldType === 'date' ? formatDate(value) : value};\n }\n return null;\n })}\n \n {task.comments && (\n \n \n
\n Office Comment: \n {task.comments}\n
\n \n \n )}\n \n \n
\n
\n \n setEditFieldComment({\n ...editFieldComment,\n scheduleId: task.id,\n groupingName: groupingName\n })\n }\n size=\"sm\"\n className=\"mr-2\"\n >\n Add Field Comment\n \n {/* Show Builder Approval button or status based on priority */}\n {task.builderApprovedDate ? (\n
\n Builder Approved: {formatDate(task.builderApprovedDate)}\n
\n ) : task.builderApprovalSentDate ? (\n
\n Builder Approval Sent: {formatDate(task.builderApprovalSentDate)}\n
\n ) : (\n task.streetName &&\n task.suburb &&\n task.siteContact &&\n task.siteContactPhone &&\n task.developer && (\n \n )\n )}\n
\n
\n {task.attachmentCount > 0 && {task.attachmentCount} Attachments}\n
\n
\n \n \n\n {getFieldComments(task)?.map((fieldComment) => {\n const isCommentOwner = auth.me.id === fieldComment.userId;\n\n return (\n \n \n
\n \n isCommentOwner && setEditFieldComment({ ...fieldComment, groupingName: groupingName })\n }\n style={{\n background: 'none',\n border: 'none',\n color: 'black',\n padding: 0,\n margin: 0,\n textDecoration: 'none',\n boxShadow: 'none',\n cursor: isCommentOwner ? 'pointer' : 'default'\n }}\n className=\"p-0 text-left font-weight-bold\"\n disabled={!isCommentOwner}\n >\n {isCommentOwner && }{' '}\n {formatDateTime(fieldComment.createdUtc) + ': '}\n {' '}\n {fieldComment.comments}\n
\n \n \n );\n })}\n \n )}\n
\n );\n })}\n \n );\n };\n\n const ScheduleTableHeaders = ({ isCurrent = false }) => {\n return (\n \n \n {headers.map((header) => (\n {header.label}\n ))}\n \n {isCurrent && }\n \n );\n };\n\n if (loading) {\n return <>Loading...;\n }\n\n return (\n <>\n
\n
\n setSearchData(e.target.value)}\n onKeyPress={(e) => {\n if (e.key === 'Enter') {\n setSearchFilter(e.target.value);\n }\n }}\n />\n
\n
\n {\n setSearchFilter(searchData);\n }}\n >\n Search\n \n
\n
\n {filteredTasks && exportData && (\n \n Export\n \n )}\n
\n
\n {\n setShowPotentialJobModal(true);\n }}\n >\n Add Potential Job\n \n
\n
\n 0 || searchFilter !== '' ? 'btn-warning' : 'btn-secondary'\n } ml-2`}\n onClick={() => {\n setColumnSearchFilter({});\n setSearchFilter('');\n setInputKey((prevKey) => prevKey + 1);\n }}\n disabled={Object.keys(columnSearchFilter).length === 0 && searchFilter === ''}\n >\n Clear Filters\n \n
\n
\n {structuredAddressWorkTypes && fieldwork.rejectedSchedules && fieldwork.rejectedSchedules.length > 0 && (\n
\n
\n
Please correct item quantities for the following tasks
\n
\n \n \n \n \n \n
\n
\n )}\n {filteredTasks && Object.keys(filteredTasks).length > 0 && (\n <>\n
\n
Current
\n \n \n \n {taskGroupings.map((grouping) => (\n \n ))}\n \n
\n
\n {filteredTasks.nextWeek.length > 0 && (\n
\n
Next Week
\n \n \n \n \n \n
\n
\n )}\n {filteredTasks.nextMonth.length > 0 && (\n
\n
Next Month
\n \n \n \n \n \n
\n
\n )}\n {filteredTasks.onHold.length > 0 && (\n
\n
On Hold
\n \n \n \n \n \n
\n
\n )}\n \n )}\n {editCustomTask && (\n setEditCustomTask(null)}>\n Edit Custom Task\n \n
{editCustomTask.name}
\n
\n
\n setEditCustomTask({ ...editCustomTask, isCompleted: e.target.checked })}\n />{' '}\n \n
\n
\n \n \n \n
\n )}\n {editJobStatus && (\n setEditJobStatus(null)}>\n Update Job Status\n \n
\n {structuredAddressWorkTypes?.includes(editJobStatus.workType) ? (\n getAddress(editJobStatus)\n ) : (\n <>{editJobStatus.address}\n )}\n
\n
\n
\n setEditJobStatus({ ...editJobStatus, status: e.target.value })}\n >\n {getStatusOptions()}\n \n
\n
\n \n \n {\n handleUpdateJobStatus();\n }}\n >\n Update\n \n \n
\n )}\n {editDeveloperAndContact && (\n setEditDeveloperAndContact(null)}\n >\n Edit Developer and Site Contact\n \n
\n {structuredAddressWorkTypes?.includes(editDeveloperAndContact.workType) ? (\n getAddress(editDeveloperAndContact)\n ) : (\n <>{editDeveloperAndContact.address}\n )}\n
\n
\n {canEditDeveloper.includes(editDeveloperAndContact.workType) && (\n
\n \n \n setEditDeveloperAndContact({\n ...editDeveloperAndContact,\n developer: e.target.value\n })\n }\n >\n \n {builderList.map((builder) => (\n \n ))}\n \n
\n )}\n {canEditSiteContact.includes(editDeveloperAndContact.workType) && (\n <>\n
\n \n \n setEditDeveloperAndContact({\n ...editDeveloperAndContact,\n siteContact: e.target.value\n })\n }\n />\n
\n
\n \n \n setEditDeveloperAndContact({\n ...editDeveloperAndContact,\n siteContactPhone: e.target.value\n })\n }\n />\n
\n \n )}\n
\n \n \n {\n handleUpdateDeveloperAndContact();\n }}\n >\n Update\n \n \n \n )}\n {editFieldComment && (\n setEditFieldComment(null)}>\n Edit Field Comment\n \n
\n \n setEditFieldComment({\n ...editFieldComment,\n comments: e.target.value\n })\n }\n />\n
\n
\n \n {editFieldComment.id && (\n {\n handleDeleteFieldComment(editFieldComment.id);\n }}\n className=\"mr-auto\"\n >\n Delete\n \n )}\n \n {\n handleUpdateFieldComment();\n }}\n >\n Update\n \n \n
\n )}\n {showPotentialJobModal && (\n \n )}\n {selectedForBuilderApproval && (\n \n )}\n \n );\n};\n\nconst WrappedFieldWorkList = (props) => {\n return (\n \n \n \n );\n};\n\nexport default WrappedFieldWorkList;\n","import React, { useState, useEffect } from 'react';\nimport { Link, useParams } from 'react-router-dom';\nimport Sync from './Sync';\nimport ErrorBoundary from './ErrorBoundary';\nimport gql from 'graphql-tag';\nimport { useQuery } from '@apollo/react-hooks';\nimport TaskHistory from './TaskHistory';\nimport FieldWorkList from './FieldWorkList';\nimport { useAuth } from '../../auth/AuthProvider';\n\nconst GET_FIELD_DATA = gql`\n query GetFieldData {\n addressTypeSetting: systemSettings(where: { path: \"Name\", comparison: equal, value: \"Address Type\" }) {\n id\n name\n workType\n config\n }\n customDisplayNames: systemSettings(\n where: { path: \"Name\", comparison: equal, value: \"Optional Construction Fields\" }\n ) {\n id\n name\n workType\n config\n }\n optionalFieldWorkColumns: systemSettings(where: { path: \"Name\", comparison: equal, value: \"Field Work List\" }) {\n id\n name\n workType\n config\n }\n customFieldTemplates: systemSettings(\n where: { path: \"Name\", comparison: equal, value: \"Custom Construction Fields\" }\n ) {\n id\n name\n workType\n config\n }\n fieldJobStatusSettings: systemSettings(where: { path: \"Name\", comparison: equal, value: \"Field Job Status\" }) {\n id\n name\n workType\n config\n }\n jobStatusSettings: systemSettings(where: { path: \"Name\", comparison: equal, value: \"Job Status Settings\" }) {\n id\n name\n workType\n config\n }\n lookups {\n name\n data\n }\n fieldGroups {\n id\n name\n }\n users {\n id\n displayName\n email\n }\n }\n`;\n\nconst FieldWork = () => {\n const [settings, setSettings] = useState(null);\n const [structuredAddressWorkTypes, setStructuredAddressWorkTypes] = useState(null);\n const [fieldGroups, setFieldGroups] = useState(null);\n const [selectedGroup, setSelectedGroup] = useState(localStorage.getItem('field-selectedGroup'));\n\n const auth = useAuth();\n\n const { tab } = useParams();\n\n const { data: settingsData, loading } = useQuery(GET_FIELD_DATA, {\n fetchPolicy: 'cache-and-network'\n });\n\n useEffect(() => {\n if (!settingsData) return;\n\n setStructuredAddressWorkTypes(() => {\n return settingsData.addressTypeSetting\n .filter((setting) => {\n const config = JSON.parse(setting.config);\n return config?.addressSetting?.addressType === 'structured';\n })\n .map((setting) => setting.workType);\n });\n\n setFieldGroups(() => {\n return settingsData.fieldGroups;\n });\n\n setSettings({\n customDisplayNames: settingsData.customDisplayNames,\n optionalFieldWorkColumns: settingsData.optionalFieldWorkColumns,\n customFieldTemplates: settingsData.customFieldTemplates,\n fieldJobStatusSettings: settingsData.fieldJobStatusSettings,\n jobStatusSettings: settingsData.jobStatusSettings,\n lookups: settingsData.lookups,\n users: settingsData.users\n });\n }, [settingsData]);\n\n useEffect(() => {\n localStorage.setItem('field-selectedGroup', selectedGroup);\n }, [selectedGroup]);\n\n if (loading) return
Loading...
;\n\n return (\n <>\n \n
\n
\n
    \n
  • \n \n Tasks\n \n
  • \n
  • \n \n Completed\n \n
  • \n
\n
\n
\n setSelectedGroup(e.target.value)}\n >\n \n {auth.hasClaim('CAN_VIEW_ALL_GROUPS') && }\n {fieldGroups?.map((g) => {\n return (\n \n );\n })}\n \n
\n
\n {(tab === 'cards' || tab === 'construction') && settings && structuredAddressWorkTypes && (\n \n )}\n {tab === 'completed' && (\n \n )}\n \n );\n};\n\nconst WrappedFieldWork = (props) => {\n return (\n \n \n \n );\n};\n\n// wrap Fieldwork in an error boundary\nexport default WrappedFieldWork;\n","import React, { useEffect, useState, useRef, useCallback } from 'react';\nimport useGeoLocation from 'react-hook-geolocation';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport { useAuth } from '../../auth/AuthProvider';\nimport { GET_CONSTRUCTION } from './Construction';\nimport { useQuery } from '@apollo/react-hooks';\nimport { db } from '../../utils/db';\nimport Sync from './Sync';\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport {Helmet} from \"react-helmet\";\n\nconst navPlatform = navigator.userAgentData?.platform ?? navigator.platform;\nconst isIOS = /iPad|iPhone|iPod/.test(navPlatform)\n|| (navPlatform === 'MacIntel' && navigator.maxTouchPoints > 1)\n\nconst stopMediaStream = (video) => {\n try {\n if (video) {\n video.pause();\n\n if (video.srcObject) {\n video.srcObject.getTracks().forEach((track) => track.stop());\n video.srcObject = null; // will this clear it?\n video.src = \"\";\n video.load();\n }\n }\n } catch (e) {\n console.log('error stopping video', e);\n }\n};\n\nconst Capture = (props) => {\n const { id, taskId } = useParams();\n const [construction, setConstruction] = useState(null);\n const [captureError, setCaptureError] = useState(null);\n\n const { data } = useQuery(GET_CONSTRUCTION, { variables: { constructionId: id }, fetchPolicy: 'cache-and-network' });\n\n useEffect(() => {\n if (data && data.construction) {\n setConstruction(data.construction);\n setTags([...data.construction.schedules.filter((s) => s.id == taskId).map((s) => s.name)]);\n }\n }, [data]);\n\n const history = useHistory();\n\n const auth = useAuth();\n\n const videoRef = useRef(null);\n const canvasRef = useRef(null);\n\n const [image, setImage] = useState(null);\n const [tags, setTags] = useState([]);\n\n const [comments, setComments] = useState('');\n const [filename, setFileName] = useState('');\n const [flash, setFlash] = useState(false);\n const [valid, setValid] = useState(false);\n const [showTitle, setShowTitle] = useState(true);\n const [useMulti, setUseMulti] = useState(true);\n const [imageNumber, setImageNumber] = useState(1);\n const [isPortrait, setIsPortrait] = useState(true);\n const [preview, setPreview] = useState(false);\n const [readyFlag, setReadyFlag] = useState(true);\n const [successFlag, setSuccessFlag] = useState(false);\n\n const geolocation = useGeoLocation({ enableHighAccuracy: true, maximumAge: 15000, timeout: 12000 });\n\n const lastComment = JSON.parse(sessionStorage.getItem('last-image-comment'));\n let storedComment = '';\n if (lastComment?.taskId === taskId) {\n storedComment = lastComment.comments;\n }\n\n useEffect(() => {\n getVideo();\n\n return () => {\n // Make sure the video is stopped when unmounted\n if (videoRef.current) {\n try {\n stopMediaStream(videoRef.current);\n videoRef.current = null;\n canvasRef.current = null;\n } catch (e) {\n }\n }\n }\n }, [videoRef]);\n\n useEffect(() => {\n let video = videoRef.current;\n\n if (video !== null && video.srcObject !== null) {\n const track = video.srcObject.getTracks()[0];\n track.applyConstraints({ advanced: [{ torch: flash }] });\n }\n }, [flash]);\n\n // https://jsfiddle.net/39puneug/4/\n\n const getVideo = () => {\n if (videoRef.current && videoRef.current.srcObject && videoRef.current.srcObject.active) {\n // Only start the video if it's not already started\n return;\n }\n navigator.mediaDevices\n .getUserMedia({ video: { width: 480, facingMode: { exact: 'environment' } }, audio: false })\n .then((stream) => {\n let video = videoRef.current;\n video.srcObject = stream;\n video.play();\n })\n .catch((err) => {\n if (err?.constraint === 'facingMode') {\n // If exact: \"environment\" unavailable, just ignore facingMode constraint (allows working on desktop)\n navigator.mediaDevices\n .getUserMedia({ video: { width: 480 }, audio: false })\n .then((stream) => {\n let video = videoRef.current;\n video.srcObject = stream;\n video.play();\n })\n .catch((err) => {\n console.error('error:', err);\n });\n } else {\n console.error('error:', err);\n }\n });\n };\n\n useEffect(() => {\n var good = true;\n\n if (!filename || /^\\s*$/.test(filename)) {\n good = false;\n }\n\n setValid(good);\n\n const canvas = canvasRef.current;\n if (image) {\n const context = canvas.getContext('2d');\n drawDeets(context, isPortrait);\n drawTitle(context, filename, isPortrait);\n const data = canvas.toDataURL('image/png');\n setImage(data);\n }\n }, [filename, tags, image, isPortrait]);\n\n useEffect(() => {\n if (successFlag) {\n const timer = setTimeout(() => {\n setSuccessFlag(false);\n }, 250);\n return () => clearTimeout(timer);\n }\n }, [successFlag]);\n\n const drawTitle = (context, title, portrait) => {\n // update the file name\n let width = portrait ? 480 : 700;\n context.fillStyle = '#000000';\n context.fillRect(0, 0, width, 20);\n context.fillStyle = '#ffffff';\n context.font = '16px Arial';\n\n const text = `${title ?? ''} - [${tags.join(', ').trim()}]`;\n context.fillText(text, 5, 16);\n };\n\n const capture = async (btn) => {\n if (btn) {\n btn.disabled = true;\n }\n setReadyFlag(false);\n try {\n const video = videoRef.current;\n let portrait = video.clientWidth < video.clientHeight;\n setIsPortrait(portrait);\n const canvas = canvasRef.current;\n\n const context = canvas.getContext('2d');\n context.canvas.height = portrait ? 700 : 480;\n context.canvas.width = portrait ? 480 : 700;\n\n if (portrait) {\n context.drawImage(video, 0, 40, 480, 680);\n } else {\n context.drawImage(video, 0, 40, 700, 460);\n }\n\n drawDeets(context, portrait);\n\n if (useMulti && filename && imageNumber) {\n const name = `${filename} #${imageNumber}`;\n drawTitle(context, name, portrait);\n const data = canvas.toDataURL('image/png');\n await checkImage(data, name);\n //saveImage(data, name);\n //setImageNumber(imageNumber + 1);\n } else {\n const data = canvas.toDataURL('image/png');\n setFlash(false);\n stopCamera();\n setImage(data);\n }\n } finally {\n setTimeout(() => {\n if (btn) {\n btn.disabled = false;\n }\n }, 250);\n\n setReadyFlag(true);\n }\n };\n\n const checkImage = async (image, name) => {\n var imageData = dataURItoBlob(image);\n // a blank image is about 11kB\n if (imageData.size > 30000) {\n await saveImage(image, name);\n } else {\n setPreview({ image: image, name: name });\n }\n };\n\n const imageIsOk = () => {\n //var imageData = dataURItoBlob(preview.image);\n saveImage(preview.image, preview.name);\n setPreview(null);\n };\n\n const toggleStatus = (tag) => {\n if (tags.includes(tag)) {\n setTags(tags.filter((t) => t !== tag));\n } else {\n setTags(tags.concat(tag));\n }\n };\n\n const updateTitle = async () => {\n setShowTitle(false);\n };\n\n const deleteOldPhotoHistory = () => {\n db.photoHistory\n .toArray()\n .then((x) => {\n return x[x.length - 1].id;\n })\n .then((lastId) => {\n db.photoHistory\n .where('id')\n .below(lastId - 99)\n .delete();\n });\n };\n\n const saveImage = async (image, name) => {\n var imageData = dataURItoBlob(image);\n\n try {\n await db.photos.add({\n name: name + '.png',\n description: comments,\n blob: image,\n url: null,\n tags: tags,\n size: imageData.size,\n constructionId: construction.id\n });\n\n const photo = await db.photos.orderBy('id').last();\n const createdDate = new Date().toISOString().split('.')[0];\n db.photoHistory.add({\n id: photo.id,\n name: name,\n size: imageData.size,\n constructionId: construction.id,\n createdDate: createdDate,\n lastUpdated: createdDate\n });\n deleteOldPhotoHistory();\n setSuccessFlag(true);\n } catch (e) {\n setCaptureError(e.message);\n } finally {\n setImage(null);\n getVideo();\n setImageNumber((prev) => prev + 1);\n }\n\n // var imageData = dataURItoBlob(image);\n\n // const {attachment, uploadUrl} = await getPresignedUploadParams({name: filename.length === 0 ? 'field.png' : filename + '.png', type: 'image/png', size: imageData.size, tags: tags, comments: comments });\n\n // uploadAttachment(uploadUrl, imageData).then(result => {\n // toast('Image saved', { type: 'success' });\n\n // setImage(null);\n // getVideo(); // which starts camera again\n\n // }).catch(err => {\n // toast('Issue saving image, try again', { type: 'warning' });\n // });\n };\n\n function dataURItoBlob(dataURI) {\n // convert base64 to raw binary data held in a string\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n var byteString = atob(dataURI.split(',')[1]);\n\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n\n // create a view into the buffer\n var ia = new Uint8Array(ab);\n\n // set the bytes of the buffer to the correct values\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n // write the ArrayBuffer to a blob, and you're done\n var blob = new Blob([ab], { type: mimeString });\n return blob;\n }\n\n const getPresignedUploadParams = ({ name, size, tags, comments }) => {\n return fetch('/api/attachments/getPresignedUploadParams', {\n method: 'POST',\n body: JSON.stringify({ name, sizeBytes: size, constructionId: construction.id, tags: tags, comments: comments }),\n headers: { 'Content-Type': 'application/json', authorization: `Bearer ${auth.token}` }\n }).then((res) => res.json());\n };\n\n const uploadAttachment = (uploadUrl, imageData) => {\n return fetch(uploadUrl, {\n method: 'PUT',\n body: imageData,\n headers: { 'Content-Type': 'image/png' }\n });\n };\n\n useEffect(() => {\n // drawDeets();\n }, [geolocation]);\n\n const drawDeets = (context, portrait) => {\n context.fillStyle = '#000000';\n if (portrait) {\n context.fillRect(0, 0, 480, 40);\n context.fillRect(0, 680, 480, 20);\n } else {\n context.fillRect(0, 0, 700, 40);\n context.fillRect(0, 460, 700, 20);\n }\n\n context.fillStyle = '#ffffff';\n context.font = '16px Arial';\n\n let bottomTextLocationY = portrait ? 696 : 476;\n let bottomTextLocationX = portrait ? 310 : 530;\n\n let text = `${construction.workOrder} - ${construction.address}`;\n context.fillText(text, 5, 36);\n\n var location =\n Math.round(geolocation.latitude * 10000) / 10000 +\n ' ' +\n Math.round(geolocation.longitude * 10000) / 10000 +\n ' Accuracy: ' +\n Math.round(geolocation.accuracy) +\n 'm';\n context.fillText(location || '', 5, bottomTextLocationY);\n\n var date = new Date();\n context.fillText(\n date.toLocaleDateString() + ' ' + date.toLocaleTimeString(),\n bottomTextLocationX,\n bottomTextLocationY\n );\n };\n\n const cancelImage = () => {\n setImage(null);\n setPreview(null);\n getVideo(); // which starts camera again\n };\n\n const stopCamera = useCallback(\n () => {\n stopMediaStream(videoRef.current);\n },\n [videoRef],\n );\n\n const done = useCallback(() => {\n stopCamera();\n setTimeout(() => {\n history.push('/field/construction/' + id + '/' + taskId);\n }, 100);\n }, [history, id, taskId, stopCamera]);\n\n const onModeClick = () => {\n setShowTitle(!showTitle);\n setUseMulti(!useMulti);\n };\n\n return (\n <>\n