{"version":3,"sources":["Images/logo-small.png","Images/logo_dark.png","RestClient/FetchClient.ts","RestClient/AuthHandler.ts","RestClient/RestClient.ts","redux/actions/ConfigurationActions.ts","Constants/EnvironmentVariables.ts","RestClient/RestClientFactory.ts","Utils.js","redux/TimesheetStore.js","redux/TimesheetEntryStore.js","redux/WorkerStore.js","redux/SiteStore.js","redux/TimesheetNoteStore.js","redux/TimesheetReportStore.js","redux/UiStore.js","redux/MeReducer.js","redux/ZonesStore.js","Components/Auth/Auth.js","redux/actions/AllActions.ts","redux/actions/CovidCaseActions.ts","redux/actions/ActionTypes.ts","API.ts","RestClient/RestApiMicroFormat.ts","redux/reducers/CovidCaseReducer.ts","redux/actions/WorkersCovidActions.ts","redux/reducers/WorkersCovidReducer.ts","redux/reducers/ConfigurationReducer.ts","redux/actions/ContactTracingActions.ts","redux/reducers/ContactTraceReducer.ts","redux/reducers/DeviceFirmwareReducer.ts","redux/UnpaidTimesheetEntryStore.js","redux/WorkerGroupReducer.js","redux/ShiftReducer.js","redux/WorkerShiftReducer.js","redux/store/rootReducer.ts","redux/ApiMiddleware.ts","redux/store/rootStore.ts","Images/logo.js","Constants/Constants.js","Components/Nav/Links.js","Components/Nav/SuperAdminForm.js","Components/Nav/MainTopNav.js","Components/Nav/NoAuthNavBar.js","Components/Common/Snackbar.js","Components/Common/Loading.js","Container.js","Components/FormComponents.js","Models/BaseModelList.js","Models/BaseModel.js","Models/Worker.js","Models/WorkerList.js","Models/TimesheetEntry.js","Models/Site.js","Models/SiteList.js","Models/TimesheetEntryList.js","HelperClasses/HTMLTimesheet.js","Models/Timesheet.js","Models/TimesheetList.js","redux/selectors/common.js","redux/selectors/timesheetList.js","redux/selectors/approvalCurrentTimesheet.js","Components/Approvals/ApprovalsForm.js","Components/Approvals/ApprovalsFormMobile.js","Components/Approvals/PrintTimesheetButton.js","Components/Common/UserAvatars.js","Components/Approvals/ApprovalsFormLarge.js","Components/Approvals/TimesheetNotesForm.js","Components/Approvals/TimesheetNotesList.js","Components/Approvals/TimesheetEntryEditor.js","Components/Common/FormStyles.js","Components/Approvals/TimesheetForm.js","Components/Approvals/TimesheetFormModal.js","Components/Common/SiteM8Logo.js","Components/Approvals/TimesheetTableHeader.js","Components/Approvals/TimesheetTable.js","Components/Approvals/TimesheetPanel.js","Components/Approvals/TimesheetPanelList.js","Components/SuperAdmin/RawDeviceLogs.js","Components/SuperAdmin/WorkerTimeline.tsx","Components/Approvals/Approvals.js","GeoFunctions.js","Components/ReportingDevices/DevicesReportMap.js","Components/ReportingDevices/ReportingDevicesForm.js","Components/Common/GlobalStyles.js","Components/ReportingDevices/DevicesReport.js","Components/ReportingTimesheet/ReportingTable.js","Components/ReportingTimesheet/TimesheetsForm.js","Components/ReportingTimesheet/ReportingTimesheets.js","Components/Dashboard/WorkerLocationTable.js","Components/Dashboard/DashboardMapBase.js","Components/Dashboard/WorkerLocationMap.js","Components/Dashboard/SitePickerTile.js","Components/Dashboard/SitePicker.js","Components/Dashboard/Dashboard.js","Components/MyTimesheet/MyTimesheetForm.js","Components/MyTimesheet/MyTimesheetTable.js","Components/MyTimesheet/MyTimesheet.js","Components/SetUpManageUsers/UsersTable.js","Components/SetUpManageUsers/UsersTableColumns.js","Components/Common/ObjectEditForm.js","Components/SetUpManageUsers/UsersForm.js","Components/SetUpManageUsers/ManageUsers.js","Components/Common/DurationInput.js","Components/Settings/SettingsForm.js","Components/Sites/SiteForm.js","Components/Sites/SitesList.js","Components/Sites/UpdateSiteMap.js","Components/Sites/SetupSite.js","Components/Zones/ZoneForm.js","Components/Zones/ZonesList.js","Components/Zones/UpdateZonesMap.js","Components/Zones/SetupZone.js","Components/SuperAdmin/Reports.tsx","Components/SuperAdmin/AddSystemAdminForm.tsx","Components/SuperAdmin/CreateCompanyForm.js","Components/SuperAdmin/DeviceFirmwareForm.tsx","Components/SuperAdmin/WifiBeacons/WifiBeaconForm.js","Components/SuperAdmin/WifiBeacons/WifiBeaconMap.js","Components/SuperAdmin/WifiBeacons/WifiBeaconList.js","Components/SuperAdmin/WifiBeacons/WifiBeaconPage.js","Components/SuperAdmin/LabourAgencies.js","Components/SuperAdmin/CompanyList.js","Components/SuperAdmin/ManageCompanys.js","Components/SuperAdmin/ManualEmailSender.js","Components/SuperAdmin/SMSSendingPage.js","Components/SuperAdmin/SMSInterface.js","Components/SuperAdmin/WorkerNotes.js","Components/SuperAdmin/SupportDashboard.js","Components/SuperAdmin/SuperAdminPage.js","Components/ContactTracing/ContactTracingMap.js","Components/ContactTracing/ContactTracingResultList.js","Components/ContactTracing/ContactTracingForm.tsx","Components/Utils/PrintPdf.js","Components/ContactTracing/HTMLContactTrace.js","Components/ContactTracing/ContactReportPrintButton.js","Components/ContactTracing/ContactTracingPage.tsx","Components/CovidCase/HistoryItem.tsx","Components/CovidCase/CovidCaseHistoryList.tsx","Components/CovidCase/CovidCaseForm.tsx","Components/CovidCase/CovidCasesPage.tsx","Components/WorkerGroups/CreateWorkerGroupForm.js","Components/WorkerGroups/WorkerGroupList.js","Components/WorkerGroups/SetWorkersForGroupForm.js","Components/WorkerGroups/WorkerGroupsPage.js","Components/Shifts/CreateShiftForm.js","Components/Shifts/ShiftsList.js","Components/Shifts/ShiftsPage.js","Components/WorkerShifts/ScheduleWeekControl.js","Components/WorkerShifts/ScheduleShiftsModal.js","Components/WorkerShifts/ClearDayButton.js","Components/WorkerShifts/ScheduleCell.js","Components/WorkerShifts/ScheduleRow.js","Components/WorkerShifts/ScheduleTable.js","Components/WorkerShifts/WorkerShiftsPage.js","Components/Auth/Logout.js","Components/MobileDashboard/MobileDashboardPage.js","Components/IncidentReport/logoDataUrl.js","Components/IncidentReport/HTMLIncidentReport.js","Components/IncidentReport/IncidentReportPage.js","Components/ZoneReport/ZoneReportMap.js","Components/ZoneReport/HTMLZoneReport.js","Components/ZoneReport/ZoneReportPage.js","Components/TotalsReport/HTMLWorkerTotalsReport.js","Components/TotalsReport/WorkerTotalsReportPage.js","Components/Auth/Login.js","RouterProvider.js","App.js","index.js"],"names":["module","exports","makeFetchHttpClient","hostUrl","makeHttpResponse","requestUri","requestVerb","response","headers","Array","from","map","x","key","value","text","then","responseText","status","bodyText","catch","e","message","makeUrl","uri","Error","startsWith","makeRequest","method","body","request","forEach","get","requestHeaders","fetch","undefined","post","makeHttpAuthHandler","httpClient","options","makeAuthorizationHeader","auth","bearerToken","handleAndRetry","onAuthFailed","token","retry","Promise","resolve","authHeader","push","makeDefaultGetHttpHeaders","makeDefaultPostHttpHeaders","defaultOptions","client","console","error","makeRestClient","httpOptions","authHandler","validateStatus","validateBody","makeRepresentation","getFeedItems","feed","all","items","item","find","searchCriteria","JSON","stringify","findItems","create","createFormUri","bodyContent","form","createResourceUri","parseJsonResponse","update","updateFormUri","representation","parse","HttpResponseError","trim","length","RESTCLIENT_ActionTypes","superagent","require","localForage","getEnvVariables","a","getItem","envVars","obj","envVariables","backendServer","auth0Domain","audience","auth0Audience","clientID","auth0ClientId","callbackUri","logoutUri","encodeURIComponent","setItem","RestClientActions","type","ENVIRONMENT","promise","RESTCLIENT","url","toLowerCase","t","baseUrl","makeFetchHttpRestClient","replaceInArray","array","newItem","findKey","newArr","index","findIndex","formatUtcDateAsNZTime","dt","fmt","moment","tz","format","utcToNZT","isoDateStringToDayFormat","isostring","removeLeadingZero","str","slice","assign","oldpairs","newpairs","Object","weekOfDates","startDate","finishDate","numberOfDays","Math","abs","diff","i","add","toDate","dynamicSort","property","sortOrder","substr","b","localeCompare","areSameDay","d1","d2","d1m","d2m","year","dayOfYear","uniqInArray","arrArg","filter","elem","pos","arr","indexOf","formatDuration","hours","mins","totalMins","duration","formatTimeDiff","start","end","asMinutes","setTimeFromString","date","timeStr","nums","split","n","parseInt","momentDate","minutes","seconds","dateRangeOverlaps","astart","aend","bstart","bend","rangeA","range","rangeB","overlaps","downloadCSVContent","content","link","document","createElement","setAttribute","appendChild","click","fixImageRotaionUsingExif","file","fixRotation","fixedBlob","base64FromFile","blob","reject","reader","FileReader","readAsDataURL","onload","result","onerror","resizeB64Image","base64","width","height","ext","quality","img","Image","imageToSizedDataUri","src","canvas","ctx","getContext","drawImage","toDataURL","validateMobile","test","validateEmail","randomColor","color","floor","random","parseUrlQueryParameters","prop","name","location","tupple","search","decodeURIComponent","ISODateTimeOffsetToDisplayDate","parseZone","utc","local","timeSpanStringToTotalMinutes","timespanStr","num","round","getNextWeek","currentWeek","c","getPreviousWeek","isNowDuringOrBeforePeriod","now","isBetween","isBefore","momentDurationFormatSetup","extendMoment","initialState","approvalCurrentTimesheetId","workerShifts","metroLocations","prisonLocations","genLocation","coords","workerId","desc","siteId","Latitude","LocationDateTime","LocationDateTimeDescription","LocationStatus","LocationTimestampId","Longitude","WorkerId","ClosestSiteDescription","ClosestSiteDistance","ClosestSiteId","CompanyId","BatteryDescription","locations","acrowFakeLocations","dateChoices","currentDateChoice","snackbar","openTime","loading","pathname","me","apiRoot","company","Name","StartDayOfWeek","MinimumWorkingDayDuration","DailyTimesheetProcessing","DailyApprovalReminder","WorkingDayEarliestStart","WorkingDayDefaultStart","WorkingDayDefaultFinish","WorkingDayLatestFinish","MinimumLunchStart","DefaultLunchStart","DefaultLunchEnd","MaximumLunchEnd","MinimumWorkingTimeToRemoveLunchBreak","PrivateMode","PrivateModeStart","PrivateModeFinish","BufferDistanceMetres","GlitchRemovalPeriod","devices","Auth","makeOptionsForWebAuth","optionsForWebAuth","domain","redirectUri","responseType","scope","nonce","auth0","WebAuth","login","removeItem","authorize","handleAuthentication","res","rej","parseHash","err","authResult","window","replace","setSession","this","expiresAt","expiresIn","Date","getTime","accessToken","idToken","logout","isAuthenticated","expiresAtJson","removeAttribute","COVIDCASE_ActionTypes","setWorkerGroups","payload","setPathname","setSnackbar","setLoading","setCompany","editTimesheetEntry","deleteTimesheetEntry","addTimesheetEntry","setTimesheetEntries","entries","sort","StartDateTime","setUnpaidTimesheetEntries","p","totalMinutes","UnpaidTime","setTimesheets","setApprovalTimesheet","setSites","setZones","setTimesheetNotes","setDevices","setShifts","setWorkerShifts","setApprovalsWorkerShifts","WorkerActions","authPost","path","set","send","authGet","route","authGetFullUri","awaitRequestBody","statusCode","alert","getTimesheetEntries","id","getApprovedTimesheetCount","regenerateTimesheetEntries","getApprovalsData","getTimesheetNotes","timesheetId","updateTimesheetEntries","Entries","TimesheetId","getDevicesReport","reportDate","ReportDate","getDistinctTimesheets","getMyDistinctTimesheets","getTimesheetReport","getExportTimesheet","lockTimesheets","getWorkers","worker","getAllSites","getSitesByCompany","companyId","getBatteryConsumptionReport","siteIds","endDate","site","getAllZones","zone","getMe","getCompanyName","getCompany","updateCompany","getMyTimesheetData","getMyTimesheetEntries","getMyTimesheetNotes","note","getWorkerLocations","getAvailableDevices","getAllDevicesAllCompanies","getCompanies","switchCompany","createCompany","params","getAllUsersAllCompanies","getCloseContacts","timeBuffer","distanceBuffer","startTime","endTime","StartDate","EndDate","TimeBuffer","DistanceBuffer","StartTime","EndTime","getWorkerLocationsByDateRange","dateRangeParams","postAddSystemAdmin","email","getApiRoot","root","getCovidCaseHistoryItems","getDeviceVersions","updateDevicesVersion","deviceId","versionId","startDatetime","endDatetime","getUnpaidTimesheetEntries","updateUnpaidTimesheetEntry","worktimesetting","getWorkerGroups","mode","interval","workerGroupId","shift","shiftId","getShifts","getWorkerShifts","postWorkerShift","workerShift","day","getRawData","startDateTime","endDateTime","macAddress","lat","lng","getSetDeviceConfigRequired","getSetDeviceRebootRequired","deactivateSite","reactivateSite","postManualLocation","loc","postManualOffsiteEvent","eventTimeLocal","getLabourAgencies","postAddLabourAgency","getWorkerShiftsForWorkerAndRange","getEmailPreview","sendManualEmail","getWorkerTimesheets","approvalAllTimesheets","getWorkerEmailData","getAgencyConsultants","agencyId","getAllAgencyConsultants","postAgencyConsultant","deleteAgencyConsultant","agcid","getMobileViewPayload","getMobileViewWorkerStatus","getSupportWorkerStatus","getSupportWorkerLatestIncomingSMS","getGeneratedTextmessages","postTextmessage","getIncomingMessages","getNotificationsByWorkerId","getWorkerNotes","addWorkerNote","workerNote","getZoneReport","getWorkerTotals","supervisorId","startDatetimeUtc","endDatetimeUtc","makeRestclient","state","configuration","FormFieldType","CovidCaseActions","supervisorUrl","dispatch","restClient","GET_SUPERVISOR","formUrl","GET_CASE_FORM","GET_UPDATE_FORM","GET_CASE","FIND_WORKERS_CASE","data","CREATE_CASE","resourceUri","UPDATE_CASE","companyUri","SET_COVIDCASE_LIST","covidCasesUri","CLEAR_SELECTED_COVID_CASE","GET_HISTORY_LIST","makeSubmittFormData","formModel","formData","attributes","reduce","previous","attribute","formValue","OPTIONS","selectedOption","option","description","DATETIME","DATETIME_OLD","getTimezoneOffset","sign","offset","toFixed","validateFormField","WORKER_ActionTypes","debugLastCommand","isLoading","covidCaseList","covidCase","covidStatusList","WorkerCovidActions","workerUrl","SET_SELECTED_WORKER","SET_WORKER_LIST","workersUri","workersList","selectedWorker","CONTACTTRACING_ActionTypes","ContactTracingActions","SET_WORKER_TRACK","SET_CONTACT_GEOJSON","SET_CONTACT_TRACING_FORM_VALUES","contactGeojson","features","workerTrack","fromDate","editingWorkerGroup","editingShift","uiState","week","weekStart","clone","startOf","days","hour","minute","second","getCurrentWeek","showGroups","rootReducer","combineReducers","timesheets","action","ts","Id","tsheets","Status","sites","workers","timesheetEntries","TimesheetEntryId","newList","timesheetNotes","timesheetReport","CustomSettings","customSettings","needSave","ui","selectedDashboardWorkerId","zones","commonOnStartHandler","s","commonErrorHandler","handlerActions","failure","success","supervisor","handle","optionField","createForm","updateForm","covidCaseHistory","makeNewState","workersCovid","env","contactTracing","deviceFirmware","unpaidTimesheetEntries","workerGroups","shifts","siteParams","WKT","SiteId","Active","SitePayrollId","SiteDeviceSettings","MinimumBreakTimeMinsForWorkDay","MinimumWorkingTimeHoursForBreak","DistanceBufferMeters","zoneParams","ZoneId","store","createStore","RootReducer","applyMiddleware","thunk","reduxPackMiddleware","middleware","next","postMyTimesheetNote","postSetTimesheetStatus","editWorker","createWorker","workerList","setWorkers","createSite","updateSite","createZone","updateZone","comped","MAPBOX_TOKEN","STREET_MAP_URI","SAT_MAP_URI","SITEM8_MAP_URI","RACE_MAP_URI","SITE_FILL_STYLE","ZONE_FILL_STYLE","CSV_FORMAT_MAP","0","1","2","LINK_NAMES","dashboard","approvals","users","superAdmin","contact","covidcases","workergroups","schedule","mobile","incident","productivity","supervisorTotals","iconMap","ListItemLink","props","to","href","ListItem","button","children","renderLinks","l","onClick","ListItemIcon","ListItemText","primary","allowedForSupervisor","filterLinks","links","user","IsSupervisor","IsAdmin","includes","withStyles","theme","maxWidth","backgroundColor","palette","background","paper","withRouter","classes","companyName","admin","mainLinks","reportingLinks","setups","IsAdministrator","setupLinks","className","List","component","logo","style","maxHeight","Typography","variant","Divider","subheader","ListSubheader","SuperAdminPage","companies","initData","setState","IsArchived","handleSelectChange","reload","FormControl","minWidth","InputLabel","Select","onChange","input","FilledInput","MenuItem","Component","MenuAppBar","anchorEl","drawerOpen","handleMenu","currentTarget","handleClose","toggleDrawer","open","forceOut","parts","userImg","Boolean","closeDrawer","Drawer","onClose","tabIndex","role","onKeyDown","AppBar","position","appbarYellow","Toolbar","IconButton","menuButton","aria-label","grow","getTitle","aria-owns","aria-haspopup","alt","anchorOrigin","vertical","horizontal","transformOrigin","flexGrow","marginLeft","marginRight","top","SimpleSnackbar","handleClick","event","reason","Snackbar","autoHideDuration","ContentProps","close","prevState","React","connect","ownProps","padding","spacing","unit","RoutedNavBar","MainTopNav","RoutedNoAuthNavBar","history","hash","Container","handleTokenAuth","setAuth","setMe","setApiRoot","authorise","handleLoggedIn","tokenAuth","IsEnabled","isUser","IsSuperAdministrator","Base64Image","Grid","container","paddingTop","ws","SelectInput","list","textKey","o","OutlinedInput","labelWidth","autoWidth","BaseModelList","objects","idKey","ObjectClass","findById","filterBy","findBy","filterByFunction","func","BaseModel","dataKeys","updateData","keys","k","setMomentDates","setMomentDate","dateStr","m","Worker","WorkerList","TimesheetEntry","getTotalStr","getTableRow","siteName","mStartDateTime","Flag","Travel","mFinishDateTime","siteStr","Description","ModifiedWorkerId","iconColor","fontWeight","Site","SiteList","getSelectOptions","TimesheetEntryList","getLiveEntries","deleted","setUnpaidEntries","setSiteList","siteList","getTotalTimeStr","formatTotalTimeStr","formatStartTimeStr","formatEndTimeStr","getSiteDescription","matchingEntries","join","getEntriesForPost","tse","newDates","FinishDateTime","toSend","isNew","getEntriesByDay","total","unpaidMins","DateTime","formatEntryRow","startStr","endStr","formatTimesheetEntryDay","dayEntry","dayStr","lunchTotalStr","workTotalStr","scheduledStartTime","scheduledEndTime","formatDayRow","HTMLTimesheet","values","workerName","endDateStr","totalWorkTimeStr","timesheetEntryDays","printDateStr","entryRows","imageDataURI","logoTxt","Timesheet","setTimesheetEntryList","timesheetEntryList","setWorker","getDateDescription","sTime","fTime","getMyTimesheetTableRows","getTableRows","r","rows","mDay","unpaidEntry","dayRow","getTimesheetDayTableRow","d","genTimesheetEntry","modWorkerId","getNewTimesheetEntry","workStartStr","workEndStr","lunchStartStr","lunchEndStr","entry","setNewTSEntryTime","printMyself","printParams","tableRows","tr","_isAMomentObject","matchingShift","w","EndDateTime","todaysEntries","previousEntryRow","eRow","getFilename","totalStr","breakStr","setTimeStr","TimesheetList","setWorkerList","includeName","getters","getTimesheetList","createSelector","tsl","getActiveApprovalTimesheet","timesheet","tsEntries","mapStateToProps","timesheetList","mapDispatchToProps","_setApprovalTimesheet","_editTimesheet","_setTimesheetEntries","_setTimesheetNotes","_setTimesheetStatus","_setUnpaidTimesheetEntries","_setApprovalsWorkerShifts","_setLoading","ApprovalsForm","changeTimesheet","updateEntries","timesheetnotes","wdts","onNextClick","getIndex","onBackClick","onSelectChange","target","handleSwitchClick","handleRegenerateClick","ApprovalsFormMobile","tsOptions","xs","sm","md","lg","Button","disabled","paddingLeft","siteDescription","marginTop","Switch","checked","paddingBottom","PrintTimesheetButton","handlePrintClick","htmlToPrint","iframe","setTimeout","contentWindow","write","iframedoc","contentDocument","html2canvas","imgDataUrl","pdf","jspdf","addImage","save","LargeAvatar","margin","ApprovalsFormLarge","onWorkerSelectChange","Hidden","only","timesheetWorkerIds","workersForList","justify","onApproveAllTimesheetsPress","totalTimeStr","renderUserImage","TimesheetNotesForm","noteText","onTextChange","onSendClick","userId","timesheetNote","Details","addTimesheetNote","TextField","label","placeholder","Fab","size","addNote","textField","TimesheetNotesList","renderNote","CreationDateTime","Priority","secondary","notes","_addTimesheetEntry","_deleteTimesheetEntry","_editTimesheetEntry","TimesheetEntryEditor","handleInputChange","tsEntry","val","changes","onDeleteClick","confirm","onSaveClick","handleAddPress","createNewTimesheetEntry","handleChange","args","timesheetEntry","parsedArgs","isValid","startDateStr","newEntry","display","flex","formControl","selectEmpty","switchLabel","durationInputWrapper","durationInput","textAlign","paddingRight","durationInputFormControl","durationInputLabel","transform","durationInputLabelInline","styles","padTop","TimesheetForm","onTimeChange","tsTime","hrs","changeEvt","onInputChange","handleDelete","onClosePress","sitesPlus","startTimeStr","finishTimeStr","warningStyle","warning","main","siteWarningStyle","InputLabelProps","shrink","FormControlLabel","control","FormHelperText","Input","inputProps","textOverflow","float","fab","formStyles","withTheme","TimesheetFormModal","origTimesheetEntry","handleCancelPress","timesheetEntryId","Modal","Paper","gutterBottom","siteNames","TimesheetTableHeader","dateDesc","SiteM8Logo","tableStyle","overflow","minHeight","renderDateSiteCell","tableMeta","updateValue","setting","dayString","daynum","wt","getCorrespondingWorkerShift","iconProps","opacity","fontSize","icon","Tooltip","title","bottom","verticalAlign","renderSiteCell","renderWorkTimes","getLabels","onAddClick","openBreakTimeEditor","customBodyRender","rowData","renderUnpaidTime","getOptions","toolbar","onRowClick","filterType","selectableRows","rowsPerPageOptions","rowsPerPage","fixedHeader","print","viewColumns","download","customToolbar","TimesheetTableClass","timesheetEntryEditingId","showWorkTimePopup","unpaidHours","unpaidMinutes","editingUnpaidTimesheetEntry","handleUnpaidTimeEntrySaveClick","minStr","hourStr","_editUnpaidTimesheetEntry","handleOpenUnpaidTimeEditor","addRow","mStartDate","handleCloseModal","handleRowClick","workDayTimeSettings","onBackdropClick","disablePortal","disableEnforceFocus","disableAutoFocus","aria-labelledby","aria-describedby","modalStyle","innerModal","evt","max","columns","alignItems","justifyContent","border","editUnpaidTimesheetEntry","TimesheetPanel","handleClosePress","timeSheetEntry","notDeleted","warnStyle","forms","canSave","edited","breakTime","formatTotalBreakStr","ExpansionPanel","ExpansionPanelSummary","expandIcon","right","ExpansionPanelDetails","TimesheetPanelList","handleSaveClick","panels","eventNames","3","4","5","6","7","8","9","DeviceLog","log","timestamp","gps","eventid","battery","signal","satnum","lon","time","momenttz","batpct","rawbatt","voltage","makeBatteryChargeFromVoltage","useState","setData","useEffect","logs","eventTypeDescriptions","eventTypeIcons","useStyles","makeStyles","secondaryTail","EventItemRender","displayDate","EventTime","displayCreationDate","displayOnsiteOffsiteCreatedDate","CreatedAtUtc","EventType","eventTypeDescription","TimelineItem","TimelineOppositeContent","TimelineSeparator","TimelineDot","TimelineConnector","TimelineContent","elevation","SiteName","WorkerTimelineForm","handleDateChange","handleEndDateChange","handleShowHide","showhide","showLogs","onLogsChange","fullWidth","Autocomplete","getOptionLabel","getOptionSelected","renderInput","required","defaultValue","EventItems","Fragment","EventsList","Timeline","align","EventTimeline","selectedWorkerId","setSelectedWorkerId","eventItems","setEventItems","showDeviceEvents","setShowDeviceEvents","deviceEventItems","setDeviceEventItems","setStartDate","setEndDate","setShowLogs","allEvents","concat","ad","reverse","_","opt","getEventItemsByWorkerAndDate","evts","getDeviceEventItemsByWorkerAndDate","overflowX","RawDeviceLogs","overflowY","innerGrid","heading","mixins","gutters","headingNotes","typography","pxToRem","fontWeightRegular","drawer","flexShrink","drawerPaper","ApprovalsClass","loaded","events","getData","_setWorkers","usefulWorkers","getTimesheetData","onNotesPanelChange","expanded","handleApprovalAllPress","nextProps","nextState","tsId","_setSites","_setTimesheets","numNotes","notesOpen","data-loaded","CssBaseline","TimesheetTable","snapLocationTimestampsToSite","locs","line","turf","GeoJSON","point","snapped","units","geometry","coordinates","snapGeoJSONFeaturesToSite","geojson","f","properties","feat","clusteriseContactTracingResults","points","wkt_point","ContactName","NumberOfSatellites","wkt","toISOString","compositeId","featureCollection","workerSiteZoneIds","Set","clustered","numberOfClusters","ceil","sqrt","clusters","apply","locationTimestampsToPoints","nzBbox","nzBounds","Map","MapGL","CIRCLE_STYLE","CIRCLE_STYLE_RAW","LINE_STYLE","DevicesReportMap","lines","polygons","bounds","bboxPadding","popup","getLocationLinesFeatures","getLocationPointsFeatures","lt","getSiteFeatures","getBounds","bbox","getBBoxPadding","locationTimestamps","handleStyleLoad","resize","handleLocationHover","lngLat","labels","previousDiff","currentDiff","pop","Battery","handleRawHover","dateStrr","snappedLocs","dispatchEvent","Event","rawlocs","rawdats","parseFloat","raw","eventType","rawCol","z","zoneColl","fitBounds","fitBoundsOptions","onZoomEnd","handleZoom","onMove","handleMove","containerStyle","onStyleLoad","fillPaint","circlePaint","circleOnMouseEnter","circleOnMouseLeave","linePaint","ReportingDevicesForm","handleDeviceSelectChange","handleStartTimeChange","handleEndTimeChange","handleToggleTimeFilter","isTimeFiltering","timeFiltering","buttonText","buttonType","ww","__MUI_USE_NEXT_TYPOGRAPHY_VARIANTS__","useNextVariants","suppressDeprecationWarnings","hide","fullPageDrawer","whiteSpace","transition","transitions","easing","sharp","enteringScreen","drawerOpenWide","drawerClose","leavingScreen","breakpoints","up","drawerHidden","modalPaper","boxShadow","shadows","left","DevicesReport","reportData","handleSearch","sDate","setAllSites","setAllWorkers","setAllTimesheets","setAllTimesheetEntries","setCurrentTimesheet","renderDrawerContent","openDrawer","getReportData","startParts","endParts","startTimeFilter","endTimeFilter","isAfter","filterRawDats","datenz","classNames","reportTableColumns","sortDirection","table","TimesheetsForm","selectedTimesheetId","onDateChange","onExportClick","onLockClick","opts","FormGroup","row","fullwidth","FormLabel","RadioGroup","group","csvFormat","onCsvFormatChange","Radio","statuses","countStatus","report","PayrollId","ReportContainer","timesheetRows","datesSpan","statusCounts","setInitialData","getReport","approvedCount","draft","locked","draftTimesheets","DayWorked","approved","exportCSV","showAfterCSVModal","showLockModal","afterModalClose","renderAfteCSVModal","showNotExport","renderLockModal","msg1","msg2","bind","breaktime","HoursBreak","workTime","HoursWorked","updateTimesheetReportTable","setTimesheetRange","setReportDate","COLUM_INDEXS","timesort","colIndex","order","orderedData","tableLabels","WorkerLocationTable","onChangeRowsPerPage","setRowProps","onColumnsChanged","columName","column","responsive","customSort","onViewColumnsChange","onColumnViewChange","onRowsSelect","onRowsDelete","DashboardMapBase","getSiteFeatureCollection","getWorkerMarkers","workerLocations","wl","getSiteCenter","center","setCenter","getMapURI","map_uri","buffer","setFitboundsFromNextProps","siteSelected","getWorkerFeature","fitBoundsSet","extraLayer","extraLayer2","extraLayer3","mapProps","getMapProps","fillExtrusionPaint","extruded","WorkerLocationMap","zoom","pitch","bearing","handleCircleHover","toShow","getBearing","workerFeat","selectWorker","setSelectedDashboardWorker","SitePickerTile","getStrokeWidth","newProps","isSelected","getStyle","geojson3857","reproject","proj4","defs","geojsonbounds","extent","svgElements","geojson2svg","mapExtent","viewportSize","explode","output","convert","svgMap","getElementById","svgStr","svg","div","createElementNS","innerHTML","frag","createDocumentFragment","firstChild","parseSVG","GridListTile","xmlns","y","GridListTileBar","gridList","flexWrap","leftPicker","zIndex","rightPicker","leftChevron","scrollGridLeft","glist","scrollTo","scrollLeft","scrollGridRight","SiteGridList","gList","scrollWidth","offsetWidth","removeUnusedIcons","tiles","GridList","cols","Dashboard","rowsSelected","workerGeo","loadData","setWorkerLocations","activeSites","filteredLocs","isSame","workerFeatures","warn","rowMeta","setSelectedWorker","rowIndex","selectedRows","stateIndex","splice","getTableRecords","DeviceId","onSiteTileClick","timer","setInterval","clearInterval","records","itemxs","MyTimesheetForm","alignContent","emptyness","TimesheetsTable","MyTimesheet","requested","mytimesheet","MyTimesheetTable","UsersTable","handleChangeRowsPerPage","usersTableColumns","v","Checkbox","customFilterListOptions","render","filterOptions","names","ObjectEditForm","handleComplete","originalObj","initialObj","onComplete","toSave","editingObj","handleTextChange","handleCheckboxChange","colStlye","UserForm","rawImage","sending","handleDeviceSelect","device","handleIsWorkerChange","Supervisor","IsWorker","onFileUpload","acceptedFiles","rejectedFiles","blobFixed","b64","resizedImgB64","deletePhoto","supervisors","onCancel","extraDevices","agencyConsultants","labourAgencies","Email","EmailNotifications","Mobile","MobileNotifications","AgencyConsultantId","mobileValid","emailValid","payrollValid","nameValid","workerRoleValid","notifsValid","supervisorValid","allValid","supervisorOptions","agencyOptions","LabourAgencyId","selectedDevice","autoComplete","onSubmit","helperText","newValue","onDrop","getRootProps","getInputProps","isDragActive","propTypes","PropTypes","object","isRequired","initialUser","ManageUsersContainer","editingUser","snackOpen","showArchived","u","currentUser","allDevicesAllCompanies","allCompanies","allWorkersAllCompanies","createSuperUserDeviceDescription","pollNewDevices","newDevice","Assigned","selectChange","filterUsers","onEditClick","onAddUserClick","tablerr","openClass","UsersForm","DurationInput","parseTimeDuration","change","durationStr","minVal","hrsVal","min","SettingsForm","handleSwitchChange","Timezone","IsSmsEnabled","IsEmailEnabled","DEEP_SLEEP_INTERVAL_MODE","GPS_SLEEP_MODE","GPS_ALWAYS_ON_MODE","POWER_SAVING_MODE","SiteForm","MinsBeforeStart","MinsAfterStart","StartMode","StartInterval","DuringMode","DuringInterval","MinsBeforeFinish","MinsAfterFinish","FinishMode","FinishInterval","OvertimeMode","OvertimeInterval","SleepMode","SleepInterval","ShouldUseSkyhook","getOptionsForRegularModes","getOptionsForSleepModes","polygon","onCancelClick","Geom","Geography","WellKnownText","getSiteDeviceSettings","siteDeviceSettings","_state","_ownProps","newSite","SitesList","onSiteClick","onNewSiteClick","nested","ReactMapboxGl","UpdateSiteMap","createFeature","deleteDrawFeatures","draw","getAll","delete","onDrawModeChange","editingSite","addDraw","_controls","MapboxDraw","displayControlsDefault","controls","trash","addControl","on","drawCreate","drawDelete","drawUpdate","lastFeature","onDrawCreate","onDrawDelete","feature","onDrawUpdate","featts","feats","geom","handleMapClick","queryRenderedFeatures","onMapClick","handleMouseMove","mapelem","getElementsByClassName","source","cursor","prevProps","prevSite","enableClick","onError","baseMapUri","onRender","onMouseMove","onMouseOut","onMouseEnter","hideDrawControls","elems","el","classList","showDrawControls","remove","SetupSite","showInactive","handleBaseMapChange","handleDrawCreate","wktPolygon","handleDrawDelete","handleDrawUpdate","handleSiteClick","handleCancelClick","handleNewSiteClick","handleActivationClick","showForm","ZoneForm","ZonePayrollId","newZone","ZonesList","onZoneClick","onNewZoneClick","SITE_STYLE","UpdateZonesMap","getZoneFeatureCollection","editingZone","g","prevZone","DeviceMode","SetupZone","isMobile","selectedSiteId","handleZoneClick","zoneId","handleNewZoneClick","setAllZones","onSiteChange","AddSystemAdminForm","emailIsValid","handleEmailInputChange","handleButtonClick","newAdmin","CreateCompanyForm","handleButton","DeviceFirmwareForm","selectedDeviceFirmware","_setDevices","_setDeviceVersions","deviceFirmwares","deviceFirmwareVersionId","ExpectedDeviceFirmwareVersionId","handleDeviceFirmwareVersionChange","sequence","prompt","handleRequestRconf","handleRequestReboot","version","ConfigMsgRequired","RebootRequired","Reports","earliestStartDate","latestFinishDate","batteryConsumptionReport","rowList","userName","WorkerName","Location","earlyStartTime","EarlyStartTime","earlyStartMode","EarlyStartMode","earlyStartInterval","EarlyStartInterval","defaultStartTime","DefaultStartTime","defaultStartMode","DefaultStartMode","defaultStartInterval","DefaultStartInterval","defaultFinishTime","DefaultFinishTime","defaultFinishMode","DefaultFinishMode","defaultFinishInterval","DefaultFinishInterval","lateFinishTime","LateFinishTime","battPercentageFirstUpdate","BatteryPercentageFirstUpdate","battPercentageLastUpdate","BatteryPercentageLastUpdate","startFirstUpdate","StartFirstUpdate","finishLastUpdate","FinishLastUpdate","battUsed","BatteryUsed","hourWorked","battDrainPerHour","BatteryDrainPerHour","comps","handleCompanyChange","handleSiteChange","handleEarliestStartDateChange","handleLatestFinishDateChange","onGenerateReportClick","downloadOptions","useDisplayedColumnsOnly","useDisplayedRowsOnly","textLabels","noMatch","macAddressRegex","newWifiBeacon","setNewWifiBeacon","beaconId","setBeaconId","handleFieldChange","lnglat","updateableWifiBeacon","MacAddress","WifiBeaconId","macOk","latOk","lngOk","InputProps","postUpdateWifiBeacon","handleNewWifiBeacon","postNewWifiBeacon","handleCancel","setZoom","getZoom","onMoveEnd","getCenter","paint","layout","onListClick","handleListClick","beacons","light","wifiBeacons","setWifiBeacons","setUpdateableWifiBeacon","setLnglat","getWifiBeacons","WifiBeaconForm","WifiBeaconList","beacon","WifiBeaconMap","AgencyConsulant","CellPhone","ShouldReceiveAllContact","sx","LabourAgencies","agencies","newAgencyName","newConsultant","selectedAgency","onDeleteConsultantClick","onNewAgencyNameChange","saveNewAgency","saveNewConsultant","onConsultantInputChange","onLabourAgencySelect","labourAgency","consultants","renderLabourAgency","canSaveConsultant","canSaveNewAgencty","ac","CompaniesList","renderCompany","selected","ManageCompanies","question","archiveCompany","WorkerStatusRow","workerStatus","onsite","sn","ManualEmailSender","workerStatuses","setWorkerStatus","toName","subject","emailDets","setEmailDets","setSiteNames","preview","setPreview","onChangeWorkerStatus","wss","onChangeEmailDets","genEmailPayload","onSiteWorkers","offSiteWorkers","getPreview","previewHtml","sendEmail","workerData","canSend","SmsForm","Category","MobileNumber","SmsStatus","onTextAreaChange","TextareaAutosize","rowsMin","SMSSendingPage","textMesssages","msgs","handleTextAreaChange","newMessage","handleSendClick","Content","NotificationId","fromNow","SMSInterface","messages","notifs","NotificationStatus","NotesForm","newNote","WorkerNotes","workerNotes","CreatedAt","WorkerNoteId","problems","solutions","problemsorder","problemsColor","latestSMS","messageTime","LastKnownLocationTime","workerStatusProblem","checkMsgForOrder","LastDeviceUpdateTime","LastDistanceToSite","LastDistanceUpdateTime","ClosestShift","BatteryPercentage","shiftStart","shiftEnd","lastUpdated","hoursAgo","isScheduled","minutesAgo","statusRow","LastClosestSite","LatestEvent","Company","LatestCharge","problem","ActionModal","selectedStatus","handleModalClose","selectedRow","SupportDashboard","dataIndex","goodCompanies","selectedTab","handleTabSelect","tab","Tabs","scrollButtons","Tab","hidden","WifiBeaconPage","ManageCompanys","preserveDrawingBuffer","ContactTracingMap","e1","e2","handleTrackHover","popup2","isWorkerTrackChange","isContactChange","isSiteChange","isPopupChange","colorStops","setMapRef","workerTrackRender","stops","buffered","snappedGeo","getZoneNamesFromContact","contactLogEntry","contactLog","makeContactLog","colorMap","cl","zoneNames","zonesText","contactWith","aa","bb","ContactTracingFormComponent","handleFromDateChange","handleToDateChange","handledistanceBufferChange","handleTimeBufferChange","showAdvanced","ContactTracingForm","setContactTracingFormValues","printToPDF","htmlString","html2pdf","formatContactRow","supervisorName","supervisorMobile","makeContactTraceHTML","dataUrl","printDate","covidCaseStatus","firstSymptomDate","payrollId","contacts","superVisorMobile","ContactReportPrintButton","printCovidReport","mapInstanceRef","details","filename","jsPDF","orientation","mapRef","getCanvas","canPrint","ContactTracingPageComponent","hasResult","mapColorStops","ref","handleFormChange","formState","_setAllZones","_setAllSites","_setSelectedWorker","getCloseContactData","_setContactGeojson","getCloseContactTrack","contactData","handleNoContactResult","_setSnackbar","clearResult","formCallback","fromTime","toTime","distancBuffer","StartDateTimeUTC","EndDateTimeUTC","_setWorkerTrack","newState","loadWorkerCovidCase","loadCreateCovidCaseForm","covidCaseCreateFormUri","covidStatusStyle","caseStatusColor","noWrap","buttonTypography","warningIcon","ContactTracingResultList","caseStatus","caseDateTime","findWorkersCovidCase","getUpdateCovidCaseForm","setContactGeojson","setWorkerTrack","transformY","inline","fieldName","changeType","createdBy","prefix","header","renderHeader","renderBody","direction","ListItemSecondaryAction","createStyles","covidCaseState","historyListUri","historyUri","historyList","loadHistoryList","getcovidCaseHistory","historyLoaded","setHistoryLoaded","HistoryItem","buttonBox","marginBottom","large_avitar","groupedContainer","groupedContainerRHS","textarea","iconField","grayText","CovidCaseForm","caseState","loadingState","isReady","supervisorUri","noteHistory","saveAction","avitarUri","workerImageUrl","workerEmail","phoneNumber","caseStatusOption","stateProps","dispatchProps","loadWorker","loadSupervisor","getSupervisor","loadCreateCaseForm","getCreateCovidCaseForm","loadUpdateCaseForm","loadExistingCase","submitCreateForm","postCovidCaseForm","submitUpdateForm","putCovidCaseForm","clearSelectedCovidCase","setStatus","workerUri","Avatar","preventDefault","formFields","elements","goBack","Box","rowsMax","modal","workerCovidTableHeaders","readOnly","workerToTableRow","covidCases","formOptions","latestMatchingCase","dt1","createdAt","dt2","isActive","updatedAt","workersState","firstWorker","getWorkersList","getCovidCasesList","getCovidCaseList","clearCovidCase","modalOpen","openModal","loadedCases","setCasesLoaded","loadedWorkers","setLoadedWorkers","loadedForm","setLoadedForm","_setWorkerGroups","groupName","setGroupName","deviceInterval","setDeviceInterval","deviceMode","setDeviceMode","step","createWorkerGroup","_setEditingWorkerGroup","WorkerGroupId","wg","addWorker","addWorkerToGroup","removeWorker","removeWorkerFromGroup","workersInGroup","workersOutOfGroup","deleteWorkerGroup","fieldPadding","_setShifts","selectedSite","setSelectedSite","setStartTime","setEndTime","setName","multiSite","setMultiSite","noName","maxLength","saveShift","Archived","archiveShift","ShiftId","createShift","MultiSite","showCopyWeek","_setWorkerShifts","_setScheduleNextWeek","_setSchedulePreviousWeek","_setScheduleGroupView","copyWorkerShifts","getSiteName","newShift","allShifts","workerGroup","toClose","afterSave","_a","_b","_c","_d","stopPropagation","clearWorkerShifts","ScheduleCell","setOpen","showClear","setShowClear","usedDisplay","cellStyle","onMouseLeave","WorkerShiftId","cellTextStyle","renderWorkerShift","renderNamedShift","marginBlockStart","marginBlockEnd","workerIds","workerShiftsToDisplay","theShifts","ready","setReady","sh","workerRows","groupRows","OptionsModal","setSelectedSiteId","setLocation","ScheduledSiteId","batteryPercentage","deviceCharging","locationDateTime","sosButton","altitude","rawDeviceData","numberOfSatellites","signalStrength","latitude","longitude","createCenterLocationTimestampFromSite","msg","DeviceLastSeenOnsite","renderRow","timeDesc","latestEvent","getWorkerTimeDescription","siteDesc","batpercentage","icons","Battery30","Battery50","Battery60","Battery80","Battery90","BatteryFull","renderBatteryIcon","scheduledTime","closestShift","getScheduleTimeDescription","data-rel","Phone","setWorkerStatuses","navValue","setNavValue","refreshData","innerHeight","visibleWorkers","BottomNavigation","showLabels","BottomNavigationAction","Visibility","VisibilityOff","makeIncidentReportHTML","mapImgDataUrl","incidentDate","incidentTime","printTime","within50m","Distance","within200m","logoDataUrl","WitnessListItem","Color","IncidentReportPage","handleTimeChange","handleWorkerSelectChange","handleSubmit","sortBySmallestDiff","aDiff","bDiff","utcdt","closestContactFeatures","contats","distance","printReport","pagebreak","avoid","contactProperties","ZoneReportMap","zoneLayers","makeZoneReportHTML","zoneReports","workerListItem","timeText","zoneReportsHtml","workerReports","colorlabelStyle","zoneName","minsToStr","ZoneReportPage","results","handleStartDateChange","usefulResults","totalMin","sortByTotalMins","zr","centroid","numLocs","zoneReportRow","makeSupervisorTotalsReportHTML","workerReportsHtml","reportRow","paidHours","paidMinutes","WorkerTotalsReportPage","labourAgencys","selectedSupervisorId","selectedAgencyId","handleSupervisorChange","handleLabourAgencyChange","enabledWorkers","Login","RouterProvider","new","forcerender","pushState","arguments","replaceState","locationpathname","exact","Logout","Approvals","ReportingTimesheets","ManageUsers","myprops","renderHangfireForm","muiTheme","createMuiTheme","tertiary","overrides","MUIDataTable","responsiveScroll","App","getEnvironment","getRestClient","ReactDOM"],"mappings":"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","file":"static/js/main.186bee5e.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/logo_dark.4df158f5.png\";","import {HttpClient, HttpHeader, HttpResponse} from './RestClientTypes';\n\nexport function makeFetchHttpClient(hostUrl: string) : HttpClient {\n\n function makeHttpResponse(requestUri: string, requestVerb: string, response: Response): Promise {\n\n const headers = Array.from(response.headers)\n .map((x:Array) => ({ key: x[0], value: x[1] })) as Array;\n\n return response.text()\n .then(responseText => ({\n requestVerb: requestVerb,\n requestUri: requestUri,\n status: response.status,\n bodyText: responseText,\n headers: headers\n }))\n .catch(e => ({\n requestVerb: requestVerb,\n requestUri: requestUri,\n status: response.status,\n bodyText: e.message,\n headers: headers\n }));\n }\n\n function makeUrl(uri:string): string{\n if(!uri){\n debugger;\n throw new Error(\"Empty Rest Request Url encountered\")\n }\n \n if(!hostUrl){\n return uri;\n }\n\n if(uri.startsWith('http')){\n return uri;\n }\n\n return `${hostUrl}/${uri}`;\n }\n\n function makeRequest(method, headers, body): RequestInit { \n var request = { method, headers: {}, body:body, };\n headers.forEach(x => request.headers[x.key] = x.value); \n return request; \n }\n\n return { \n get: ( uri, requestHeaders) => \n fetch(makeUrl(uri), makeRequest('GET', requestHeaders, undefined))\n .then(response => makeHttpResponse(uri, 'GET', response)),\n \n post: (uri: string, body: any, requestHeaders) => \n fetch(makeUrl(uri), makeRequest('POST', requestHeaders, body))\n .then(response => makeHttpResponse(uri, 'POST', response))\n }\n}","import {AuthClient, HttpClient, Options} from './RestClientTypes';\n\nexport function makeHttpAuthHandler(httpClient: HttpClient, options: Options): AuthClient {\n\n const makeAuthorizationHeader = (options: Options) => options.auth && options.auth.bearerToken\n ? {\n key: 'Authorization',\n value: `Bearer ${options.auth.bearerToken}`,\n }\n : undefined;\n\n const makeDefaultGetHttpHeaders = function (options: Options) {\n const headers = [{ key: 'Accept', value: 'application/json' }]\n const authHeader = makeAuthorizationHeader(options);\n if (authHeader) {\n headers.push(authHeader);\n }\n return headers\n }\n\n const makeDefaultPostHttpHeaders = function (options: Options) {\n const headers = [{ key: 'Content-Type', value: 'application/json' }]\n const authHeader = makeAuthorizationHeader(options);\n if (authHeader) {\n headers.push(authHeader); \n }\n return headers\n } \n\n const handleAndRetry = makeRequest =>\n makeRequest().then(response =>\n response.status === 401 && options.auth && options.auth.onAuthFailed\n ? options.auth\n .onAuthFailed(options.auth.bearerToken, httpClient)\n .then(token => options.auth.bearerToken = token)\n .then(retry => (retry ? makeRequest() : Promise.resolve(response)))\n : Promise.resolve(response)\n )\n\n return { \n get: uri =>\n handleAndRetry(() => httpClient.get(uri, makeDefaultGetHttpHeaders(options))),\n\n post: (uri, body) =>\n handleAndRetry(() => httpClient.post(uri, body, makeDefaultPostHttpHeaders(options))),\n }\n}\n","import {HttpClient, HttpResponse, Options, RestClient } from './RestClientTypes';\nimport {FormModelBase, RestModelBase, RestFeedModel, CreateFormResult } from './RestApiMicroFormat';\nimport {makeHttpAuthHandler} from './AuthHandler';\n\n\nconst defaultOptions: Options = {\n auth: {\n bearerToken: \"\",\n onAuthFailed: (token:string, client: HttpClient) => {\n console.error('!!You must override this function to retrieve an access token!!!'); \n return Promise.resolve(\"put your token here\");\n }\n }\n}; \n\nexport function makeRestClient(httpClient: HttpClient, options: Partial = {}): RestClient {\n const httpOptions = {...defaultOptions, ...options};\n const authHandler = makeHttpAuthHandler(httpClient, httpOptions);\n \n function get(uri: string) : Promise\n {\n return authHandler\n .get(uri)\n .then(validateStatus)\n .then(validateBody)\n .then(response => makeRepresentation(response));\n }\n\n function getFeedItems(feed: RestFeedModel) : Promise>{\n return Promise.all(feed.items.map(item => get(item.uri)));\n }\n\n function find(uri: string, searchCriteria: any): Promise {\n return authHandler\n .post(uri, JSON.stringify(searchCriteria))\n .then(response => makeRepresentation(response));\n }\n\n function findItems(uri: string, searchCriteria: any) : Promise> {\n return find(uri, searchCriteria)\n .then(feed => getFeedItems(feed)); \n }\n\n function create(createFormUri: string , bodyContent: any): Promise {\n return get(createFormUri)\n .then(form => authHandler.post(form.createResourceUri, JSON.stringify(bodyContent)))\n .then(x => parseJsonResponse(x));\n }\n\n function update(updateFormUri: string, bodyContent: any): Promise {\n return authHandler.post(updateFormUri, JSON.stringify(bodyContent))\n .then(x => parseJsonResponse(x));\n }\n\n const client: RestClient = { \n get, \n getFeedItems, \n find, \n findItems, \n create,\n update,\n };\n\n return client;\n}\n\nfunction makeRepresentation(response) : T {\n const representation = parseJsonResponse(response);\n if (!representation.uri) {\n throw new Error(`${response.requestVerb} '${response.requestUri}' response has no uri`);\n }\n \n return representation;\n }\n\n function parseJsonResponse(response: HttpResponse): T {\n try {\n return JSON.parse(response.bodyText);\n } catch {\n throw new Error(`${response.requestVerb} '${response.requestUri}' response json could not be parsed`);\n }\n }\n\n function validateStatus(response: HttpResponse) {\n if (response.status < 400) {\n return response;\n }\n \n throw new HttpResponseError(response);\n }\n \n function validateBody(response: HttpResponse) {\n if (!response.bodyText || response.bodyText.trim().length === 0) {\n throw new Error(`${response.requestVerb} '${response.requestUri}' response doesnt have any content`);\n }\n \n return response;\n }\n\n class HttpResponseError extends Error {\n constructor(public response: HttpResponse) {\n super(`${response.requestVerb} '${response.requestUri}' returned status code: ${response.status}`); \n }\n}\n","import { Options , RestClient } from '../../RestClient/RestClientTypes';\nimport { makeFetchHttpRestClient, LocalStorageAccessToken} from '../../RestClient/RestClientFactory'\nimport { PromiseAction } from './types'\nimport { getEnvVariables } from '../../Constants/EnvironmentVariables';\n\nexport enum RESTCLIENT_ActionTypes {\n ENVIRONMENT = \"REST_CLIENT.ENVIRONMENT\",\n RESTCLIENT = \"REST_CLIENT.RESTCLIENT\", \n};\n\nexport class RestClientActions {\n\n static getEnvironment() : PromiseAction {\n return({\n type: RESTCLIENT_ActionTypes.ENVIRONMENT, \n promise: getEnvVariables()\n });\n };\n\n static getRestClient() : PromiseAction {\n return({\n type: RESTCLIENT_ActionTypes.RESTCLIENT, \n promise: initialise()\n });\n };\n}\n\nfunction initialise(): Promise {\n return getEnvVariables()\n .then(e => {\n const url = e.backendServer.toLowerCase();\n\n const options : Partial = {\n auth:{\n bearerToken: \"\",\n onAuthFailed: LocalStorageAccessToken(e)\n }\n };\n\n return makeFetchHttpRestClient(url, options);\n }) \n}","const superagent = require('superagent');\nconst localForage = require('localforage');\nexport interface EnvironmentVariables {\n backendServer: string,\n auth0Domain: string,\n audience: string,\n clientID: string,\n callbackUri: string,\n logoutUri: string\n}\n\n/*\nexport async function getEnvVariables() {\n const e:any = {\n backendServer: 'http://localhost:3010',\n callbackUri:'http://localhost:5000',\n auth0Domain:'sitem8-uat.au.auth0.com',\n audience:'https://uat.sitem8.com/api/',\n clientID:'8jy0jH9Q6br10box6od6WJBHMfTIpbkN',\n };\n\n let envVars = await localForage.getItem('env_vars');\n if(!envVars) {\n console.log('get env vars');\n const logoutUri = `https://${e.auth0Domain}/logout?client_id=${e.auth0ClientId}&returnTo=${encodeURIComponent(e.callbackUri)}/`;\n e.logoutUri = logoutUri;\n await localForage.setItem('env_vars', e);\n return e;\n } else {\n return e;\n }\n}\n*/\n\n\nexport async function getEnvVariables(): Promise {\n \n let envVars = await localForage.getItem('env_vars');\n if(envVars) {\n return envVars;\n }\n\n const response = await superagent.get(\"/Env\");\n const obj = JSON.parse(response.text);\n const envVariables = {\n backendServer: obj.backendServer,\n auth0Domain: obj.auth0Domain,\n audience: obj.auth0Audience,\n clientID: obj.auth0ClientId,\n callbackUri: obj.callbackUri,\n logoutUri: `https://${obj.auth0Domain}/logout?client_id=${obj.auth0ClientId}&returnTo=${encodeURIComponent(obj.callbackUri)}/`,\n }; \n await localForage.setItem('env_vars', envVariables);\n return envVariables;\n \n};\n\n\n","import {makeFetchHttpClient} from './FetchClient';\nimport {makeRestClient} from './RestClient';\nimport {Options, RestClient, HttpClient} from './RestClientTypes';\nimport { EnvironmentVariables } from '../Constants/EnvironmentVariables';\nimport localForage from 'localforage';\n\nexport function makeFetchHttpRestClient(baseUrl: string, options:Partial = {}) : RestClient {\n const url = baseUrl.toLowerCase();\n const httpClient = makeFetchHttpClient(url);\n return makeRestClient(httpClient, options);\n}\n\nexport function LocalStorageAccessToken(env:EnvironmentVariables) : (token:string, client: HttpClient) => Promise{\n\n return (token:string, client: HttpClient) : Promise => {\n return localForage.getItem('access_token')\n .then(t => t ? t : \"No Token\")\n }\n}","// @ts-nocheck\n\n/* eslint-disable no-undef */\nimport moment from 'moment';\nimport fixRotation from 'fix-image-rotation';\nimport momentDurationFormatSetup from 'moment-duration-format';\nimport { extendMoment } from 'moment-range';\n\n\n/* tslint:disable-next-line */\nmomentDurationFormatSetup(moment);\n/* tslint:disable-next-line */\nextendMoment(moment);\n\n\nexport function replaceInArray(array, newItem, findKey) {\n const newArr = [...array];\n // I wan't types not to matter here\n // eslint-disable-next-line eqeqeq\n const index = newArr.findIndex(x => x[findKey] == newItem[findKey]);\n newArr[index] = newItem;\n return newArr;\n}\n\nexport function formatUtcDateAsNZTime(dt, fmt) {\n return moment.tz(dt, 'Pacific/Auckland').format(fmt)\n}\n\nexport function utcToNZT(dt) {\n return moment.tz(dt, 'Pacific/Auckland');\n}\n\nexport function isoDateStringToDayFormat(isostring) {\n return moment(isostring).format('YYYY-MM-DD');\n}\n\nexport function removeLeadingZero(str = '') {\n if (str.length > 1 && str[0] === '0') {\n return str.slice(1, str.length);\n }\n return str;\n}\n\nexport function removeFromArray(array, toRemove, findKey) {\n const newArr = [...array];\n // I wan't types not to matter here\n // eslint-disable-next-line eqeqeq\n const index = newArr.findIndex(x => x[findKey] == toRemove[findKey]);\n newArr.splice(index, 1);\n return newArr;\n}\n\nexport function assign(oldpairs, newpairs) {\n return Object.assign({}, oldpairs, newpairs);\n}\n\nexport function assignWithTimestamp(oldpairs, newpairs) {\n return Object.assign({}, oldpairs, newpairs, { timestamp: new Date().getTime() });\n}\n\nexport function weekOfDates(startDate, finishDate) {\n const numberOfDays = Math.abs(moment(startDate).diff(moment(finishDate), 'days'));\n return Array.from({ length: numberOfDays },\n (x, i) => i).map(i => moment(startDate).add(i, 'days').toDate());\n}\n\n// timeStr like HH:mm:ss or HH:mm becomes HH:mm\nexport function trimTimeStr(timeStr) {\n return timeStr.split(':').slice(0, 2).join(':');\n}\n\nexport function dynamicSort(property) {\n let sortOrder = 1;\n\n if (property[0] === '-') {\n sortOrder = -1;\n // eslint-disable-next-line no-param-reassign\n property = property.substr(1);\n }\n\n // eslint-disable-next-line func-names\n return function (a, b) {\n if (sortOrder == -1) {\n return b[property].localeCompare(a[property]);\n }\n return a[property].localeCompare(b[property]);\n };\n}\n\nexport function areSameDay(d1, d2) {\n const d1m = moment(d1);\n const d2m = moment(d2);\n return d1m.year() === d2m.year() && d1m.dayOfYear() === d2m.dayOfYear();\n}\n\nexport function uniqInArray(arrArg) {\n return arrArg.filter((elem, pos, arr) => arr.indexOf(elem) === pos);\n}\n\nexport function formatDuration(hours = 0, mins = 0) {\n const totalMins = (hours * 60) + mins;\n const str = moment.duration(totalMins, 'minutes').format('HH:mm');\n if (totalMins < 60) {\n return `0:${str}`;\n }\n return str;\n}\n\nexport function formatTimeDiff(start, end) {\n return formatDuration(0, moment.duration(end.diff(start)).asMinutes());\n}\n\nexport function setTimeFromString(date, timeStr) {\n const nums = timeStr.split(':').map(n => parseInt(n, 0));\n const momentDate = moment(date);\n momentDate.hours(nums[0]);\n momentDate.minutes(nums[1]);\n momentDate.seconds(nums[2]);\n return momentDate;\n}\n\nexport function dateRangeOverlaps(astart, aend, bstart, bend) {\n const rangeA = moment.range(astart, aend);\n const rangeB = moment.range(bstart, bend);\n return rangeB.overlaps(rangeA) || rangeA.overlaps(rangeB);\n}\n\nexport function downloadCSVContent(content) {\n // eslint-disable-next-line no-undef\n const link = document.createElement('a');\n link.setAttribute('href', `data:text/csv;charset=utf-8,${content}`);\n link.setAttribute('download', 'my_data.csv');\n // eslint-disable-next-line no-undef\n document.body.appendChild(link); // Required for FF\n link.click(); // This will download the data file named \"my_data.csv\".\n}\n\nexport function capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport async function fixImageRotaionUsingExif(file) {\n const fixedBlob = await fixRotation.fixRotation([file]);\n return fixedBlob[0];\n}\n\nexport async function base64FromFile(blob) {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line no-undef\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n}\n\nexport async function textFromFile(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(blob);\n reader.onload = () => resolve(reader.result);\n reader.onerror = e => reject(e);\n });\n}\n\nexport function jsonFromCsv(csvAsText) {\n const rows = csvAsText.split('\\n');\n const attrs = rows[0].split(',');\n return rows.slice(1, rows.length).map((r) => {\n const item = {};\n const vals = r.split(',');\n attrs.forEach((a, i) => {\n item[a.trim()] = (vals[i] || '').trim();\n });\n return item;\n });\n}\n\nexport function base64ToDataUri(base64, imgext) {\n return `data:image/${imgext};base64,${base64}`;\n}\n\nexport function resizeB64Image(base64, width, height, ext = 'jpeg', quality = 1) {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line no-undef\n const img = new Image();\n // eslint-disable-next-line no-use-before-define\n img.onload = () => resolve(imageToSizedDataUri(img, width, height, ext, quality));\n img.onerror = reject;\n img.src = base64;\n });\n}\n\nexport function imageToSizedDataUri(img, width, height, ext, quality) {\n // create an off-screen canvas\n // eslint-disable-next-line no-undef\n const canvas = document.createElement('canvas');\n\n\n const ctx = canvas.getContext('2d');\n\n // set its dimension to target size\n canvas.width = width;\n canvas.height = height;\n\n // draw source image into the off-screen canvas:\n ctx.drawImage(img, 0, 0, width, height);\n\n // encode image to data-uri with base64 version of compressed image\n return canvas.toDataURL(`image/${ext}`, quality);\n}\n\nexport function sortTimesheetEntries(entries) {\n if(!entries)\n {\n return [];\n }\n entries.sort((a, b) => {\n if (moment(a.StartDateTime).toDate() < moment(b.StartDateTime).toDate()) {\n return -1;\n }\n return 1;\n });\n return entries;\n}\n\nexport function combineTimespansToTotal(timespanStrs) {\n let totalHrs = 0;\n let totalMins = 0;\n timespanStrs.forEach((ts) => {\n const parts = ts.split(':');\n const hours = parseInt(parts[0], 0);\n const mins = parseInt(parts[1], 0);\n totalHrs += hours;\n totalMins += mins;\n });\n return formatDuration(totalHrs, totalMins);\n}\n\nexport function validateMobile(value) {\n return value && /[0-9]{7,}/.test(value);\n}\n\nexport function validateEmail(value) {\n return value && /(.+)@(.+){2,}\\.(.+){2,}/.test(value);\n}\n\nexport function downloadText(filename, data) {\n const blob = new Blob([data], { type: 'text/csv' });\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveBlob(blob, filename);\n } else {\n const elem = window.document.createElement('a');\n elem.href = window.URL.createObjectURL(blob);\n elem.download = filename;\n document.body.appendChild(elem);\n elem.click();\n document.body.removeChild(elem);\n }\n}\n\nexport function randomColor() {\n var letters = '0123456789ABCDEF';\n var color = '#';\n for (var i = 0; i < 6; i++) {\n color += letters[Math.floor(Math.random() * 16)];\n }\n return color;\n}\n\nexport function parseUrlQueryParameters(prop, name) {\n const { location } = prop;\n if(!location){\n return undefined;\n }\n\n const query = location.search || \"\";\n const queryTubles = query\n .substr(1)\n .split(\"&\")\n .map(x => x.split(\"=\"))\n .map(x => ({key:x[0], value:x[1] }));\n\n const tupple = queryTubles.find(x => name === x.key);\n\n return tupple ? decodeURIComponent(tupple.value) : undefined;\n}\n\nexport function ISODateTimeOffsetToDisplayDate(date) {\n if(!date){\n return undefined;\n }\n\n const utcDate = moment.parseZone(date).utc();\n const result = utcDate.local(false).format(\"YYYY-MM-DDTHH:mm:ss\");\n return result;\n}\n\nexport function IsoStringIsBeforeIsoString(dt1, dt2) {\n return moment(dt1).isBefore(moment(dt2));\n}\n\nexport function timeSpanStringToTotalMinutes(timespanStr) {\n const [hours, mins, seconds] = timespanStr.split(':').map((num) => parseInt(num));\n return Math.round((hours * 60) + mins + (seconds / 60));\n}\n\nexport function caseStatusColor(status) {\n switch(status) {\n case 'Suspect':\n case 'Confirmed':\n case 'Probable':\n return { \n backgroundColor: 'rgba(232, 46, 105, 0.2)',\n color: '#d10026',\n }\n case 'UnderInvestigation':\n return {\n backgroundColor: 'rgba(252, 186, 3, 0.2)',\n color: 'rgba(252, 186, 3, 1)',\n }\n default:\n return {\n backgroundColor: 'rgba(62, 171, 50, 0.2)',\n color: 'rgba(62, 171, 50, 1)',\n }\n };\n};\n\nexport function getCurrentWeek() {\n var currentDate = moment();\n\n var weekStart = currentDate.clone().startOf('isoWeek');\n var days = [];\n for (var i = 0; i <= 6; i++) {\n days.push(moment(weekStart).add(i, 'days'));\n }\n days[6].hour(23).minute(59).second(59);\n return days;\n}\n\nexport function getNextWeek(currentWeek) {\n return currentWeek.map(c => c.add(7, 'days'));\n}\n\nexport function getPreviousWeek(currentWeek) {\n return currentWeek.map(c => c.add(-7, 'days'));\n}\n\nexport function isNowBetweenMoments(start, end) {\n const now = moment();\n return now.isBetween(start, end);\n}\n\nexport function isNowDuringOrBeforePeriod(start, end) {\n const now = moment();\n return now.isBetween(start, end) || now.isBefore(end);\n}\n\nexport function arrayUniqueByKey(array, key) {\n return [...new Map(array.map(item => [item[key], item])).values()];\n}\n\nexport function hslToHex(h, s, l) {\n l /= 100;\n const a = s * Math.min(l, 1 - l) / 100;\n const f = n => {\n const k = (n + h / 30) % 12;\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return Math.round(255 * color).toString(16).padStart(2, '0'); // convert to Hex and prefix \"0\" if needed\n };\n return `#${f(0)}${f(8)}${f(4)}`;\n}\n\nexport function selectColor(i, total) {\n if (total < 1) total = 1; // defaults to one color - avoid divide by zero\n return {h: ((i + Math.random()) * (360 / total) % 360), s:100, l:50 };\n}\n\n\n\n\n\n","import {\n SET_TIMESHEETS,\n SET_APPROVAL_TIMESHEET,\n EDIT_TIMESHEET,\n SET_TIMESHEET_STATUS,\n SET_WORK_DAY_TIME_SETTINGS,\n SET_APPROVALS_WORKER_SHIFTS,\n} from './actions/ActionTypes';\nimport { assign, replaceInArray } from '../Utils';\n\nconst id = 'TimesheetId';\n\nconst initialState = {\n all: [],\n approvalCurrentTimesheetId: null,\n workerShifts: [],\n};\n\nexport default function (state = initialState, action) {\n const { all } = state;\n const { payload } = action;\n switch (action.type) {\n case SET_TIMESHEETS: {\n return assign(state, { all: payload });\n }\n case SET_APPROVAL_TIMESHEET: {\n return assign(state, { approvalCurrentTimesheetId: payload });\n }\n case EDIT_TIMESHEET: {\n return assign(state, { all: replaceInArray(all, payload, id) });\n }\n case SET_TIMESHEET_STATUS: {\n const ts = state.all.find(t => t.TimesheetId === payload.Id);\n const tsheets = replaceInArray(all, assign(ts, { Status: payload.Status }), id);\n return assign(state, { all: tsheets });\n }\n case SET_APPROVALS_WORKER_SHIFTS: {\n return assign(state, { workerShifts: payload });\n }\n\n default:\n return state;\n }\n}\n","import {\n EDIT_TIMESHEET_ENTRY,\n SET_TIMESHEET_ENTRIES,\n DELETE_TIMESHEET_ENTRY,\n ADD_TIMESHEET_ENTRY,\n} from './actions/ActionTypes';\nimport { assign, replaceInArray } from '../Utils';\n\nconst id = 'TimesheetEntryId';\n\nconst initialState = {\n all: [],\n};\n\nexport default function (state = initialState, action) {\n const { all } = state;\n const { payload } = action;\n switch (action.type) {\n case EDIT_TIMESHEET_ENTRY: {\n return assign(state, { all: replaceInArray(all, payload, id) });\n }\n case DELETE_TIMESHEET_ENTRY: {\n return assign(state, { all: state.all.filter(t => t.TimesheetEntryId !== payload.TimesheetEntryId) });\n }\n case ADD_TIMESHEET_ENTRY: {\n const newList = [...state.all, payload];\n return assign(state, { all: newList });\n }\n case SET_TIMESHEET_ENTRIES: {\n return assign(state, { all: payload });\n }\n default:\n return state;\n }\n}\n","import {\n SET_WORKERS,\n EDIT_WORKER,\n UPDATE_WORKERS_TABLE,\n SET_LOCATIONS,\n} from './actions/ActionTypes';\nimport { assign, replaceInArray, dynamicSort } from '../Utils';\n\nconst id = 'WorkerId';\n\nconst metroLocations = [\n [172.626296, -43.537566],\n [172.626361, -43.537986],\n [172.626897, -43.536757],\n];\n\nconst prisonLocations = [\n [172.477911, -43.515063],\n [172.474135, -43.520291],\n [172.470186, -43.515685],\n];\n\nconst conventionLocations = [\n [172.636129, -43.529030],\n [172.636032, -43.528975],\n];\n\nconst genLocation = (coords, workerId, desc, siteId) => ({\n Latitude: coords[1],\n LocationDateTime: '2019-08-15 13:20:27',\n LocationDateTimeDescription: '3 min ago',\n LocationStatus: 4,\n LocationTimestampId: 2061198,\n Longitude: coords[0],\n WorkerId: workerId,\n ClosestSiteDescription: `${desc} since 7:00am`,\n ClosestSiteDistance: 0,\n ClosestSiteId: siteId,\n CompanyId: 17,\n BatteryDescription: '100%',\n});\n\nconst acrowFakeLocations = [\n genLocation(metroLocations[0], 789, 'On Site', 275),\n genLocation(metroLocations[1], 788, 'On Site', 275),\n genLocation(metroLocations[2], 787, 'On Site', 275),\n genLocation(prisonLocations[0], 786, 'On Site', 273),\n genLocation(prisonLocations[1], 785, 'On Site', 273),\n genLocation(prisonLocations[2], 784, 'On Site', 273),\n genLocation(conventionLocations[0], 783, 'On Site', 274),\n];\n\nconst initialState = {\n all: [],\n locations: [],\n acrowFakeLocations,\n};\n\n\nexport default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case SET_WORKERS: {\n payload.sort(dynamicSort('Name'));\n return assign(state, { all: payload });\n }\n case SET_LOCATIONS: {\n return assign(state, { locations: payload });\n }\n case EDIT_WORKER: {\n return assign(state, { all: replaceInArray(state.all, payload, id) });\n }\n case UPDATE_WORKERS_TABLE: {\n return assign(state, { all: payload });\n }\n default:\n return state;\n }\n}\n","import {\n SET_SITES,\n CREATE_SITE,\n UPDATE_SITE,\n} from './actions/ActionTypes';\nimport { assign, replaceInArray } from '../Utils';\n\nconst initialState = {\n all: [],\n};\nconst id = 'SiteId';\nexport default function (state = initialState, action) {\n const { all } = state;\n const { payload } = action;\n switch (action.type) {\n case SET_SITES: {\n return assign(state, { all: payload });\n }\n case CREATE_SITE: {\n return assign(state, { all: [...state.all, payload] });\n }\n case UPDATE_SITE: {\n return assign(state, { all: replaceInArray(all, payload, id) });\n }\n default:\n return state;\n }\n}\n","import {\n ADD_TIMESHEET_NOTE,\n SET_TIMESHEET_NOTES,\n} from './actions/ActionTypes';\nimport { assign } from '../Utils';\n\nconst initialState = {\n all: [],\n};\n\nexport default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case SET_TIMESHEET_NOTES: {\n return assign(state, { all: payload });\n }\n case ADD_TIMESHEET_NOTE: {\n const newList = [...state.all, payload];\n return assign(state, { all: newList });\n }\n default:\n return state;\n }\n}\n","import {\n UPDATE_TIMESHEET_REPORTTABLE,\n SET_TIMESHEET_RANGE,\n SET_REPORT_DATE,\n} from './actions/ActionTypes';\nimport { assign } from '../Utils';\n\nconst initialState = {\n all: [],\n dateChoices: [],\n currentDateChoice: null,\n};\n\nexport default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case UPDATE_TIMESHEET_REPORTTABLE: {\n return assign(state, { all: payload });\n }\n case SET_TIMESHEET_RANGE: {\n return assign(state, { dateChoices: payload });\n }\n case SET_REPORT_DATE: {\n return assign(state, { currentDateChoice: payload });\n }\n default:\n return state;\n }\n}\n","import {\n SET_SNACKBAR,\n SET_LOADING,\n SET_PATHNAME,\n SET_DASHBOARD_WORKER_ID,\n} from './actions/ActionTypes';\nimport { assign } from '../Utils';\n\nconst initialState = {\n snackbar: {\n openTime: null,\n loading: false,\n pathname: '',\n },\n};\n\nexport default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case SET_SNACKBAR: {\n return assign(state, { snackbar: payload });\n }\n case SET_LOADING: {\n return assign(state, { loading: payload });\n }\n case SET_PATHNAME: {\n return assign(state, { pathname: payload });\n }\n case SET_DASHBOARD_WORKER_ID: {\n return assign(state, { selectedDashboardWorkerId: payload });\n }\n default:\n return state;\n }\n}\n","import {\n SET_AUTH,\n SET_ME,\n SET_COMPANY,\n SET_DEVICES,\n SET_API_ROOT,\n} from './actions/ActionTypes';\nimport { assign } from '../Utils';\n\nconst initialState = {\n auth: {},\n me: {},\n apiRoot: null,\n company: {\n Name: '',\n StartDayOfWeek: '',\n MinimumWorkingDayDuration: '',\n DailyTimesheetProcessing: '',\n DailyApprovalReminder: '',\n WorkingDayEarliestStart: '',\n WorkingDayDefaultStart: '',\n WorkingDayDefaultFinish: '',\n WorkingDayLatestFinish: '',\n MinimumLunchStart: '',\n DefaultLunchStart: '',\n DefaultLunchEnd: '',\n MaximumLunchEnd: '',\n MinimumWorkingTimeToRemoveLunchBreak: '',\n PrivateMode: '',\n PrivateModeStart: '',\n PrivateModeFinish: '',\n BufferDistanceMetres: '',\n GlitchRemovalPeriod: '',\n },\n devices: [],\n};\n\nexport default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case SET_ME: {\n return assign(state, { me: payload });\n }\n case SET_AUTH: {\n return assign(state, { auth: payload });\n }\n case SET_API_ROOT: {\n return assign(state, { apiRoot: payload});\n }\n case SET_COMPANY: {\n const company = { ...payload };\n if (company.CustomSettings) {\n try {\n company.customSettings = JSON.parse(company.CustomSettings);\n } catch (e) {\n company.customSettings = null;\n }\n } else {\n company.customSettings = null;\n }\n return assign(state, { company: assign(company, { needSave: false }) });\n }\n case SET_DEVICES: {\n return assign(state, { devices: payload });\n }\n default:\n return state;\n }\n}\n","import {\n SET_ZONES,\n CREATE_ZONE,\n UPDATE_ZONE,\n} from './actions/ActionTypes';\nimport { assign, replaceInArray } from '../Utils';\n\nconst initialState = {\n all: [],\n};\nconst id = 'ZoneId';\nexport default function (state = initialState, action) {\n const { all } = state;\n const { payload } = action;\n switch (action.type) {\n case SET_ZONES: {\n return assign(state, { all: payload });\n }\n case CREATE_ZONE: {\n return assign(state, { all: [...state.all, payload] });\n }\n case UPDATE_ZONE: {\n return assign(state, { all: replaceInArray(all, payload, id) });\n }\n default:\n return state;\n }\n}\n","import auth0 from 'auth0-js';\nimport localForage from 'localforage';\nimport { getEnvVariables } from '../../Constants/EnvironmentVariables';\n\nexport default class Auth {\n \n auth0;\n\n makeOptionsForWebAuth = async() => {\n const envVariables = await getEnvVariables();\n const optionsForWebAuth = {\n domain: envVariables.auth0Domain,\n audience: envVariables.audience,\n clientID: envVariables.clientID,\n redirectUri: `${envVariables.callbackUri}/`,\n responseType: 'token id_token',\n scope: 'openid email profile',\n nonce: `${parseInt(Math.random() * 100000, 0)}`,\n };\n this.auth0 = new auth0.WebAuth(optionsForWebAuth);\n }\n\n\n login = async () => {\n await this.makeOptionsForWebAuth();\n /* eslint-disable */\n await localForage.removeItem('access_token');\n await localForage.removeItem('id_token');\n await localForage.removeItem('expires_at');\n await this.auth0.authorize();\n }\n\n handleAuthentication = async () => {\n if(!this.auth0) {\n await this.makeOptionsForWebAuth(); \n }\n return new Promise(async (res, rej) => {\n this.auth0.parseHash(async (err, authResult) => {\n if(err) {\n rej(err);\n window.location.replace('/');\n return;\n }\n if(authResult) {\n await this.setSession(authResult);\n }\n res(authResult);\n });\n });\n }\n\n setSession = async (authResult) => {\n // Set the time that the Access Token will expire at\n const expiresAt = JSON.stringify((authResult.expiresIn * 1000) + new Date().getTime());\n /* eslint-disable */\n await localForage.setItem('access_token', authResult.accessToken);\n await localForage.setItem('id_token', authResult.idToken);\n await localForage.setItem('expires_at', expiresAt);\n // navigate to the home route\n }\n\n logout = async () => {\n // Clear Access Token and ID Token from local storage\n await localForage.removeItem('access_token');\n await localForage.removeItem('id_token');\n await localForage.removeItem('expires_at');\n window.location.replace('/');\n // navigate to the home route\n }\n\n isAuthenticated = async () => {\n // Check whether the current time is past the\n // Access Token's expiry time\n const accessToken = await localForage.getItem('access_token');\n const expiresAtJson = await localForage.getItem('expires_at');\n const idToken = await localForage.getItem('id_token');\n const expiresAt = JSON.parse(expiresAtJson);\n if(expiresAt && accessToken && new Date().getTime() < expiresAt) {\n document.body.removeAttribute(\"style\");\n return { accessToken, expiresAt, idToken };\n } else {\n document.body.setAttribute(\"style\", \"display: none\");\n return {};\n }\n }\n}\n","import {PayloadAction } from './types'\nimport {Worker} from '../../API'\nimport {\n WEEKDAY_NUMBERS,\n} from '../../Constants/Constants';\nimport DEVICE_MODES from '../../Constants/DeviceModes';\nimport { timeSpanStringToTotalMinutes } from '../../Utils';\nimport {\n EDIT_TIMESHEET_ENTRY,\n SET_TIMESHEETS,\n SET_APPROVAL_TIMESHEET,\n SET_WORKERS,\n SET_TIMESHEET_ENTRIES,\n DELETE_TIMESHEET_ENTRY,\n ADD_TIMESHEET_ENTRY,\n SET_UNPAID_TIMESHEET_ENTRIES,\n EDIT_UNPAID_TIMESHEET_ENTRY,\n SET_SITES,\n EDIT_TIMESHEET,\n ADD_TIMESHEET_NOTE,\n SET_TIMESHEET_NOTES,\n SET_TIMESHEET_RANGE,\n UPDATE_TIMESHEET_REPORTTABLE,\n SET_REPORT_DATE,\n SET_TIMESHEET_STATUS,\n SET_DASHBOARD_WORKER_ID,\n UPDATE_WORKERS_TABLE,\n EDIT_WORKER,\n CREATE_WORKER,\n SET_AUTH,\n SET_ME,\n SET_COMPANY,\n CREATE_SITE,\n UPDATE_SITE,\n SET_LOCATIONS,\n SET_SNACKBAR,\n SET_DEVICES,\n SET_LOADING,\n SET_PATHNAME,\n CREATE_ZONE,\n SET_ZONES,\n UPDATE_ZONE,\n SET_API_ROOT,\n SET_DEVICE_VERSIONS,\n SET_WORKER_GROUPS,\n SET_EDITING_WORKERGROUP,\n SET_SHIFTS,\n SET_WORKER_SHIFTS,\n SET_SCHEDULE_GROUP_VIEW,\n SET_SCHEDULE_NEXT_WEEK,\n SET_SCHEDULE_PREVIOUS_WEEK,\n SET_APPROVALS_WORKER_SHIFTS,\n} from './ActionTypes';\nimport {\n sortTimesheetEntries,\n} from '../../Utils';\nimport { time } from 'console';\n\n\n\nfunction getCompanyAssignmentDefaults(company) {\n const {\n WorkingDayEarliestStart,\n WorkingDayDefaultStart,\n WorkingDayDefaultFinish,\n WorkingDayLatestFinish,\n MinimumLunchStart,\n DefaultLunchStart,\n DefaultLunchEnd,\n MaximumLunchEnd,\n DefaultAfterShiftInterval,\n DefaultBeforeShiftInterval,\n DefaultDeviceRunningMode,\n DefaultDuringShiftInterval,\n } = company;\n return {\n WorkingDayEarliestStart,\n WorkingDayDefaultStart,\n WorkingDayDefaultFinish,\n WorkingDayLatestFinish,\n MinimumLunchStart,\n DefaultLunchStart,\n DefaultLunchEnd,\n MaximumLunchEnd,\n AfterShiftDeviceMode: DEVICE_MODES[DefaultDeviceRunningMode],\n AfterShiftTrackInterval: DefaultAfterShiftInterval,\n BeforeShiftDeviceMode: DEVICE_MODES[DefaultDeviceRunningMode],\n BeforeShiftTrackInterval: DefaultBeforeShiftInterval,\n DuringShiftDeviceMode: DEVICE_MODES[DefaultDeviceRunningMode],\n DuringShiftTrackInterval: DefaultDuringShiftInterval,\n };\n}\n\nexport const setWorkerGroups = payload => ({\n type: SET_WORKER_GROUPS,\n payload,\n});\n\nexport const setPathname = payload => ({\n type: SET_PATHNAME,\n payload,\n});\n\nexport const setSnackbar = payload => ({\n type: SET_SNACKBAR,\n payload,\n});\n\n\nexport const setLoading = payload => ({\n type: SET_LOADING,\n payload,\n});\n\nexport const setAuth = payload => ({\n type: SET_AUTH,\n payload,\n});\n\nexport const setMe = payload => ({\n type: SET_ME,\n payload,\n});\n\nexport const setCompany = payload => ({\n type: SET_COMPANY,\n payload,\n});\n\nexport const editTimesheetEntry = payload => ({\n type: EDIT_TIMESHEET_ENTRY,\n payload,\n});\n\nexport const deleteTimesheetEntry = payload => ({\n type: DELETE_TIMESHEET_ENTRY,\n payload,\n});\n\nexport const addTimesheetEntry = payload => ({\n type: ADD_TIMESHEET_ENTRY,\n payload,\n});\n\nexport const setTimesheetEntries = payload => ({\n type: SET_TIMESHEET_ENTRIES,\n payload: sortTimesheetEntries(payload),\n});\n\nexport const editUnpaidTimesheetEntry = (payload) => {\n var totalMinutes = timeSpanStringToTotalMinutes(payload.UnpaidTime);\n return {\n type: EDIT_UNPAID_TIMESHEET_ENTRY,\n payload: { totalMinutes, ...payload },\n };\n};\n\nexport const setUnpaidTimesheetEntries = (payload) => {\n var unpaidEntries = payload.map(p => {\n var totalMinutes = timeSpanStringToTotalMinutes(p.UnpaidTime);\n return { totalMinutes, ...p };\n });\n return {\n type: SET_UNPAID_TIMESHEET_ENTRIES,\n payload: unpaidEntries,\n };\n};\n\nexport const setTimesheets = payload => ({\n type: SET_TIMESHEETS,\n payload,\n});\n\nexport const setApprovalTimesheet = payload => ({\n type: SET_APPROVAL_TIMESHEET,\n payload,\n});\n\n\nexport const setSites = payload => ({\n type: SET_SITES,\n payload,\n});\n\n\nexport const setZones = payload => ({\n type: SET_ZONES,\n payload,\n});\n\nexport const editTimesheet = payload => ({\n type: EDIT_TIMESHEET,\n payload,\n});\n\nexport const addTimesheetNote = (payload, token) => ({\n type: ADD_TIMESHEET_NOTE,\n payload,\n token,\n});\n\nexport const setTimesheetNotes = payload => ({\n type: SET_TIMESHEET_NOTES,\n payload,\n});\n\nexport const setTimesheetRange = payload => ({\n type: SET_TIMESHEET_RANGE,\n payload,\n});\n\nexport const updateTimesheetReportTable = payload => ({\n type: UPDATE_TIMESHEET_REPORTTABLE,\n payload,\n});\n\nexport const setReportDate = payload => ({\n type: SET_REPORT_DATE,\n payload,\n});\n\nexport const setTimesheetStatus = payload => ({\n type: SET_TIMESHEET_STATUS,\n payload,\n});\n\nexport const createSite = payload => ({\n type: CREATE_SITE,\n payload,\n});\n\nexport const updateSite = payload => ({\n type: UPDATE_SITE,\n payload,\n});\n\nexport const setDevices = payload => ({\n type: SET_DEVICES,\n payload,\n});\n\nexport const createZone = payload => ({\n type: CREATE_ZONE,\n payload,\n});\n\nexport const updateZone = payload => ({\n type: UPDATE_ZONE,\n payload,\n});\n\nexport const setLocations = payload => ({\n type: SET_LOCATIONS,\n payload,\n});\n\nexport const setApiRoot = payload => ({\n type: SET_API_ROOT,\n payload,\n});\n\nexport const setDeviceVersions = payload => ({\n type: SET_DEVICE_VERSIONS,\n payload,\n});\n\nexport const setEditingWorkerGroup = payload => ({\n type: SET_EDITING_WORKERGROUP,\n payload,\n});\n\nexport const setShifts = payload => ({\n type: SET_SHIFTS,\n payload,\n});\n\nexport const setWorkerShifts = payload => ({\n type: SET_WORKER_SHIFTS,\n payload,\n});\n\nexport const setScheduleGroupView = payload => ({\n type: SET_SCHEDULE_GROUP_VIEW,\n payload,\n});\n\nexport const setSchedulePreviousWeek = payload => ({\n type: SET_SCHEDULE_PREVIOUS_WEEK,\n payload,\n});\n\nexport const setScheduleNextWeek = payload => ({\n type: SET_SCHEDULE_NEXT_WEEK,\n payload,\n});\n\nexport const setApprovalsWorkerShifts = payload => ({\n type: SET_APPROVALS_WORKER_SHIFTS,\n payload,\n})\n\nexport class WorkerActions { \n static setSelectedDashboardWorker(workerId: number) : PayloadAction {\n return ({type: SET_DASHBOARD_WORKER_ID, payload:workerId});\n };\n\n static updateWorkersTable(payload: string) : PayloadAction {\n return ({type: UPDATE_WORKERS_TABLE,payload});\n };\n\n static setWorkers(payload: Array) : PayloadAction> { \n return ({type: SET_WORKERS, payload});\n }\n \n static editWorker(payload:string): PayloadAction {\n return ({type: EDIT_WORKER,payload});\n }\n\n static createWorker(payload:string): PayloadAction {\n return ({type: CREATE_WORKER,payload});\n }\n\n}\n\n","import { PromiseAction, PayloadAction, AsyncAction } from './types'\nimport { CovidCaseApiModel } from '../reducers/CovidCaseReducer';\nimport { RestClient } from '../../RestClient/RestClientTypes';\nimport { FormModelBase, CompanyRestModel, RestFeedModel} from '../../RestClient/RestApiMicroFormat';\nimport { Worker, CovidCaseHistoryItem, CovidCaseHistory } from '../../api/index';\nimport { ConfigurationState } from '../reducers/ConfigurationReducer';\nimport { getCovidCaseHistoryItems } from '../../API';\n\n\n\nexport enum COVIDCASE_ActionTypes {\n GET_SUPERVISOR = \"COVIDCASE.GET_SUPERVISOR\",\n GET_CASE_STATUS_LIST = \"COVIDCASE.GET_CASE_STATUS_LIST\",\n GET_CASE_FORM = \"COVIDCASE.GET_CASE_FORM\",\n GET_CASE = \"COVIDCASE.GET\",\n CREATE_CASE = \"COVIDCASE.CREATE\",\n UPDATE_CASE = \"COVIDCASE.UPDATE\",\n SET_COVIDCASE_LIST = \"COVIDCASE.SET_COVIDCASE_LIST\",\n CLEAR_SELECTED_COVID_CASE = \"COVIDCASE.CLEAR_SELECTED_COVID_CASE\",\n FIND_WORKERS_CASE = \"COVIDCASE.FIND_WORKERS_CASE\",\n GET_UPDATE_FORM = \"COVIDCASE.GET_UPDATE_FORM\",\n GET_HISTORY_LIST = \"COVIDCASE.GET_HISTORY_LIST\",\n};\n\n\nfunction makeRestclient(state: () => any): RestClient{\n const configuration: ConfigurationState = state().configuration;\n return configuration.client!;\n}\n\nexport class CovidCaseActions {\n\n static getSupervisor(supervisorUrl: string) : AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n dispatch({\n type: COVIDCASE_ActionTypes.GET_SUPERVISOR, \n promise: restClient.get(supervisorUrl)\n });\n }\n };\n\n static getCreateCovidCaseForm(formUrl: string) : AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n dispatch ({\n type: COVIDCASE_ActionTypes.GET_CASE_FORM, \n promise: restClient.get(formUrl),\n });\n }\n }\n\n \n static getUpdateCovidCaseForm(formUrl: string): AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n dispatch ({\n type: COVIDCASE_ActionTypes.GET_UPDATE_FORM, \n promise: restClient.get(formUrl),\n });\n }\n }\n\n static getCovidCase(uri: string): AsyncAction { \n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n const action: PromiseAction = ({\n type: COVIDCASE_ActionTypes.GET_CASE, \n promise: restClient.get(uri)\n });\n\n dispatch(action);\n }\n }\n\n static findWorkersCovidCase(uri: string) : AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n const action: PromiseAction = ({\n type: COVIDCASE_ActionTypes.FIND_WORKERS_CASE, \n promise: restClient.get(uri).then(\n feed => restClient.getFeedItems(feed).then(items => items[0])),\n });\n\n dispatch(action);\n }\n }\n \n\n static postCovidCaseForm(uri: string, data:T) : AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n const action: PromiseAction = ({\n type: COVIDCASE_ActionTypes.CREATE_CASE, \n promise: restClient.create(uri, data)\n .then(response => restClient.get(response.resourceUri)), \n });\n dispatch(action);\n }\n }\n \n\n static putCovidCaseForm(uri: string, data:T) : AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n const action: PromiseAction = ({\n type: COVIDCASE_ActionTypes.UPDATE_CASE,\n promise: restClient.update(uri, data)\n .then(response => restClient.get(response.uri!)),\n });\n\n dispatch(action)\n }\n }\n\n static getCovidCaseList(companyUri: string) : AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n const action : PromiseAction, COVIDCASE_ActionTypes> = ({\n type: COVIDCASE_ActionTypes.SET_COVIDCASE_LIST,\n promise: restClient.get(companyUri)\n .then((value: CompanyRestModel) => restClient.get(value.covidCasesUri)\n .then(feed => restClient.getFeedItems(feed))),\n });\n\n dispatch(action)\n }\n }\n\n static clearSelectedCovidCase() : PayloadAction {\n return ({\n type: COVIDCASE_ActionTypes.CLEAR_SELECTED_COVID_CASE,\n payload: \"\",\n });\n }\n\n static getcovidCaseHistory(uri: string): AsyncAction { \n return (dispatch) => {\n const action: PromiseAction = ({\n type: COVIDCASE_ActionTypes.GET_HISTORY_LIST, \n promise: getCovidCaseHistoryItems(uri),\n });\n dispatch(action);\n }\n }\n\n}","export const EDIT_UNPAID_TIMESHEET_ENTRY = 'EDIT_UNPAID_TIMESHEET_ENTRY';\nexport const SET_UNPAID_TIMESHEET_ENTRIES = 'SET_UNPAID_TIMESHEET_ENTRIES';\nexport const EDIT_TIMESHEET_ENTRY = 'EDIT_TIMESHEET_ENTRY';\nexport const DELETE_TIMESHEET_ENTRY = 'DELETE_TIMESHEET_ENTRY';\nexport const SET_TIMESHEET_ENTRIES = 'SET_TIMESHEET_ENTRIES';\nexport const ADD_TIMESHEET_ENTRY = 'ADD_TIMESHEET_ENTRY';\nexport const SET_WORKERS = 'SET_WORKERS';\nexport const SET_TIMESHEETS = 'SET_TIMESHEETS';\nexport const SET_APPROVAL_TIMESHEET = 'SET_APPROVAL_TIMESHEET';\nexport const EDIT_TIMESHEET = 'EDIT_TIMESHEET';\nexport const ADD_TIMESHEET_NOTE = 'ADD_TIMESHEET_NOTE';\nexport const SET_TIMESHEET_NOTES = 'SET_TIMESHEET_NOTES';\nexport const SET_TIMESHEET_RANGE = 'SET_TIMESHEET_RANGE';\nexport const SET_REPORT_DATE = 'SET_REPORT_DATE';\nexport const UPDATE_TIMESHEET_REPORTTABLE = 'UPDATE_TIMESHEET_REPORTTABLE';\nexport const SET_TIMESHEET_STATUS = 'SET_TIMESHEET_STATUS';\nexport const UPDATE_WORKERS_TABLE = 'UPDATE_WORKERS_TABLE';\nexport const EDIT_WORKER = 'EDIT_WORKER';\nexport const CREATE_WORKER = 'CREATE_WORKER';\nexport const SET_AUTH = 'SET_AUTH';\nexport const SET_ME = 'SET_ME';\nexport const SET_COMPANY = 'SET_COMPANY';\nexport const SET_SITES = 'SET_SITES';\nexport const CREATE_SITE = 'CREATE_SITE';\nexport const UPDATE_SITE = 'UPDATE_SITE';\nexport const CREATE_ZONE = 'CREATE_ZONE';\nexport const UPDATE_ZONE = 'UPDATE_ZONE';\nexport const SET_ZONES = 'SET_ZONES';\nexport const SET_LOCATIONS = 'SET_LOCATIONS';\nexport const SET_SNACKBAR = 'SET_SNACKBAR';\nexport const SET_DEVICES = 'SET_DEVICES';\nexport const SET_LOADING = 'SET_LOADING';\nexport const SET_PATHNAME = 'SET_PATHNAME';\nexport const SET_DASHBOARD_WORKER_ID = 'SET_DASHBOARD_WORKER_ID';\nexport const SET_SITE_ASSIGNMENTS = 'SET_SITE_ASSIGNMENTS';\nexport const SET_SELECTED_ASSIGNMENT_SITE_ID = 'SET_SELECTED_ASSIGNMENT_SITE_ID';\nexport const SET_CURRENT_EDITING_SITE_ASSIGNMENT = 'SET_CURRENT_EDITING_SITE_ASSIGNMENT';\nexport const SET_API_ROOT = 'SET_API_ROOT';\nexport const SET_DEVICE_VERSIONS = 'SET_DEVICE_VERSIONS';\nexport const SET_WORKER_GROUPS = 'SET_WORKER_GROUPS';\nexport const SET_EDITING_WORKERGROUP = 'SET_EDITING_WORKERGROUP';\nexport const SET_SHIFTS = 'SET_SHIFTS';\nexport const SET_SCHEDULE_NEXT_WEEK = 'SET_SCHEDULE_NEXT_WEEK';\nexport const SET_SCHEDULE_PREVIOUS_WEEK = 'SET_SCHEDULE_PREVIOUS_WEEK';\nexport const SET_SCHEDULE_GROUP_VIEW = 'SET_SCHEDULE_GROUP_VIEW';\nexport const SET_WORKER_SHIFTS = 'SET_WORKER_SHIFTS';\nexport const ADD_WORKER_SHIFT = 'ADD_WORKER_SHIFT';\nexport const REMOVE_WORKER_SHIFT = 'REMOVE_WORKER_SHIFT';\nexport const SET_WORK_DAY_TIME_SETTINGS = 'SET_WORK_DAY_TIME_SETTINGS';\nexport const SET_APPROVALS_WORKER_SHIFTS = 'SET_APPROVALS_WORKER_SHIFTS';\n\n\n","import localForage from 'localforage';\nimport { Dispatch } from 'redux';\nimport request from 'superagent'; // eslint-disable-line\nimport Auth from './Components/Auth/Auth';\nimport { getEnvVariables } from './Constants/EnvironmentVariables';\nimport { setLoading } from './redux/actions/AllActions';\n\n\nexport interface Worker {\n WorkerId: Number;\n Name: String;\n Mobile: String;\n CompanyId: String;\n}\n\n\nasync function authPost(path: string, body: any) {\n const envVariables = await getEnvVariables();\n /* eslint-disable */\n const token = await localForage.getItem('access_token');\n /* eslint-enable */\n return request.post(`${envVariables.backendServer}/${path}`)\n .set('authorization', `Bearer ${token}`)\n .set('Content-Type', 'application/json')\n .send(body);\n}\n\nasync function authGet(path: string) {\n const envVariables = await getEnvVariables();\n /* eslint-disable */\n const token = await localForage.getItem('access_token');\n /* eslint-enable */\n const route = `${envVariables.backendServer}/${path}`;\n return request.get(route)\n .set('authorization', `Bearer ${token}`)\n .set('Content-Type', 'application/json');\n}\n\nasync function authGetFullUri(path: string) {\n const envVariables = await getEnvVariables();\n /* eslint-disable */\n const token = await localForage.getItem('access_token');\n /* eslint-enable */\n return request.get(path)\n .set('authorization', `Bearer ${token}`)\n .set('Content-Type', 'application/json');\n}\n\nasync function awaitRequestBody(res) {\n try {\n const { body, statusCode } = await res;\n return body; \n } catch (e) {\n if(e.status === 401) {\n new Auth().login();\n } else if(e.status === 500) {\n alert('Something is wrong - please let us know and try again later');\n }\n return;\n }\n}\n\n\nexport async function withLoading(dispatch: Dispatch, req: Promise) {\n dispatch(setLoading(true));\n\n const data = await req;\n dispatch(setLoading(false));\n return data;\n}\n\nexport async function getTimesheetEntries(id) {\n return awaitRequestBody(authGet(`api/timesheetentriesv2/${id}`));\n}\n\nexport async function getUnlockedTimesheets() {\n return awaitRequestBody(authGet('api/unlockedtimesheets'));\n}\n\nexport async function getApprovedTimesheetCount(id) {\n return awaitRequestBody(authGet(`api/getapprovedtimesheetcount/${id}`));\n}\n\nexport async function regenerateTimesheetEntries(id) {\n return awaitRequestBody(authGet(`api/regeneratetimesheetentries/${id}`));\n}\n\nexport async function getApprovalsData() {\n return awaitRequestBody(authGet('api/approvalsdata'));\n}\n\nexport async function getTimesheetNotes(timesheetId) {\n return awaitRequestBody(authGet(`api/timesheetnotes/${timesheetId}`));\n}\n\nexport function postTimesheetNote(timesheetNote) {\n return awaitRequestBody(authPost('api/addtimesheetnote', timesheetNote));\n}\n\nexport function updateTimesheetEntries(entries, timesheetId) {\n return awaitRequestBody(authPost('api/updatetimesheetentries',\n { Entries: entries, TimesheetId: timesheetId }));\n}\n\nexport async function getDevicesReport(reportDate, workerId) {\n return awaitRequestBody(authPost('api/devicereport',\n { ReportDate: reportDate, WorkerId: workerId || null }));\n}\n\nexport async function postSetTimesheetStatus(payload) {\n return awaitRequestBody(authPost('api/settimesheetstatus', payload));\n}\n\nexport async function getDistinctTimesheets() {\n return awaitRequestBody(authGet('api/distincttimesheets'));\n}\n\nexport async function getMyDistinctTimesheets(token) {\n return awaitRequestBody(authGet(`api/mydistincttimesheets/${token}`));\n}\n\nexport async function getTimesheetReport(timesheetId, format) {\n return awaitRequestBody(authGet(`api/timesheetreport/${timesheetId}/${format}`));\n}\n\nexport async function getExportTimesheet(timesheetId, format) {\n return awaitRequestBody(authGet(`api/timesheetexport/${timesheetId}/${format}`));\n}\n\nexport async function lockTimesheets(timesheetId) {\n return awaitRequestBody(authGet(`api/locktimesheets/${timesheetId}`));\n}\n\nexport async function getWorkers() {\n return awaitRequestBody(authGet('api/workers'));\n}\n\nexport async function getWorkersFromToken(token) {\n return awaitRequestBody(authGet(`api/workers/${token}`));\n}\n\nexport async function createWorker(worker) {\n return awaitRequestBody(authPost('api/createworker', worker));\n}\n\nexport async function editWorker(worker) {\n return awaitRequestBody(authPost('api/editWorker', worker));\n}\n\nexport async function getSupervisor() {\n return awaitRequestBody(authGet('api/supervisors'));\n}\n\nexport async function getAllSites() {\n return awaitRequestBody(authGet('api/allsites'));\n}\n\nexport async function getSitesByCompany(companyId) {\n return awaitRequestBody(authGet(`api/sitesbycompany/${companyId}`));\n}\n\nexport async function getBatteryConsumptionReport(siteIds: number[], startDate: string, endDate: string) {\n return awaitRequestBody(authPost(`api/getbatteryconsumptionreport`, { siteIds, startDate, endDate }));\n}\n\nexport async function generateTimesheetsForCompany(companyId, earliestDateTime) {\n return awaitRequestBody(authPost('api/createhistoricaltimesheetsforcompany', {companyId, earliestDateTime }));\n}\n\nexport async function getWorkersForCompany(companyId) {\n return awaitRequestBody(authGet(`api/getworkersforcompany/${companyId}`));\n}\n\nexport async function deleteEmptyTimesheets() {\n return awaitRequestBody(authGet(`api/deleteemptytimesheets`));\n}\n\nexport async function generateTimesheetEntries(companyId, earliestDateTime, latestDateTime, minHoursForLunch, minMinutesForBreak, distanceFromSite, workerId) {\n return awaitRequestBody(authPost('api/generatetimesheetentries', {companyId, earliestDateTime, latestDateTime, minHoursForLunch, minMinutesForBreak, distanceFromSite, workerId}));\n}\n\nexport async function createSite(site) {\n return awaitRequestBody(authPost('api/createsite', site));\n}\n\nexport async function getSiteDeviceSettings(siteId) {\n return awaitRequestBody(authGet(`api/sitedevicesettings/${siteId}`));\n}\n\nexport async function updateSite(site) {\n return awaitRequestBody(authPost('api/updatesite', site));\n}\n\nexport async function getAllZones() {\n return awaitRequestBody(authGet('api/allzones'));\n}\n\nexport async function createZone(zone) {\n return awaitRequestBody(authPost('api/createzone', zone));\n}\n\nexport async function updateZone(zone) {\n return awaitRequestBody(authPost('api/updatezone', zone));\n}\n\nexport async function getMe() {\n return awaitRequestBody(authGet('api/currentuser'));\n}\n\nexport async function getCompanyName() {\n return awaitRequestBody(authGet('api/companyname'));\n}\n\nexport async function getCompany() {\n return awaitRequestBody(authGet('api/getcompany'));\n}\n\nexport async function updateCompany(company) {\n return awaitRequestBody(authPost('api/updatecompany', company));\n}\n\nexport async function getCompanyNameFromToken(token) {\n return awaitRequestBody(authGet(`api/companyname/${token}`));\n}\n\nexport async function getCompanyFromToken(token) {\n return awaitRequestBody(authGet(`api/company/${token}`));\n}\n\nexport async function getMyTimesheetData(token) {\n return awaitRequestBody(authGet(`api/mytimesheet/data/${token}`));\n}\n\nexport async function getMyTimesheetEntries(token, id) {\n return awaitRequestBody(authGet(`api/mytimesheet/timesheetentries/${token}/${id}`));\n}\n\nexport async function getMyTimesheetNotes(token, id) {\n return awaitRequestBody(authGet(`api/mytimesheet/timesheetnotes/${token}/${id}`));\n}\n\nexport async function postMyTimesheetNote(token, note) {\n return awaitRequestBody(authPost(`api/mytimesheet/addtimesheetnote/${token}`, note));\n}\n\nexport async function getWorkerLocations() {\n return awaitRequestBody(authGet('api/latestlocationtimestamps'));\n}\n\nexport async function getAvailableDevices() {\n return awaitRequestBody(authGet('api/getavailabledevices'));\n}\n\nexport async function getAllDevices() {\n return awaitRequestBody(authGet('api/alldevices'));\n}\n\nexport async function getAllDevicesAllCompanies() {\n return awaitRequestBody(authGet('api/alldevicesallcompanies'));\n}\n\nexport async function getCompanies() {\n return awaitRequestBody(authGet('api/getallcompanies'));\n}\n\nexport async function switchCompany(id) {\n return awaitRequestBody(authGet(`api/switchcompany/${id}`));\n}\n\nexport async function createCompany(params) {\n return awaitRequestBody(authPost('api/createcompany', params));\n}\n\nexport async function getAllUsersAllCompanies() {\n return awaitRequestBody(authGet('api/allworkersallcompanies'));\n}\n\nexport async function postUploadManyUsers(data) {\n return awaitRequestBody(authPost('api/uploadmanyusers', data));\n}\n\nexport async function postUploadManyDevices(data) {\n return awaitRequestBody(authPost('api/uploadmanydevices', data));\n}\n\nexport async function getCloseContacts(workerId, startDate, endDate,\n timeBuffer, distanceBuffer, startTime, endTime) {\n /* eslint-disable */\n const response = await awaitRequestBody(authPost('api/closecontact',\n {\n WorkerId: workerId, StartDate: startDate,\n EndDate: endDate, TimeBuffer: timeBuffer, DistanceBuffer: distanceBuffer,\n StartTime: startTime, EndTime: endTime\n }));\n return response;\n /* eslint-enable */\n}\n\nexport async function getWorkerLocationsByDateRange(dateRangeParams) {\n return awaitRequestBody(authPost('api/getlocationtimestampsinrange', dateRangeParams));\n}\n\nexport async function postAddSystemAdmin(email) {\n return awaitRequestBody(authPost(`api/createsuperadmin/${email}`, {}));\n}\n\nexport async function getApiRoot() {\n let root = await localForage.getItem('root');\n if(root) {\n return root;\n }\n root = await awaitRequestBody(authGet('api/root'));\n await localForage.setItem('root', root);\n return root;\n}\n\nexport async function getCovidCaseHistoryItems(uri) {\n return awaitRequestBody(authGetFullUri(uri));\n}\n\nexport async function getDeviceVersions() {\n return awaitRequestBody(authGet('devices/firmware-versions'));\n}\nexport async function updateDevicesVersion(deviceId, versionId) {\n return awaitRequestBody(authGet(`devices/update-device-firmware-version/${deviceId}/${versionId}`));\n}\n\nexport async function getEventItemsByWorkerAndDate(workerId: string, startDatetime: string, endDatetime: string) {\n return awaitRequestBody(authGet(`api/geteventsforworker?workerId=${workerId}&startDate=${startDatetime}&endDate=${endDatetime}`));\n}\n\nexport async function getDeviceEventItemsByWorkerAndDate(workerId: string, startDatetime: string, endDatetime: string) {\n return awaitRequestBody(authGet(`api/getdeviceeventsforworker?workerId=${workerId}&startDate=${startDatetime}&endDate=${endDatetime}`));\n}\n\nexport async function getUnpaidTimesheetEntries(timesheetId: string, update: boolean = false) {\n return awaitRequestBody(authGet(`api/getunpaidtimesheetentry/${timesheetId}/${update}`));\n}\n\nexport async function createUnpaidTimesheetEntry(worktimesetting: any) {\n return awaitRequestBody(authPost(`api/createunpaidtimesheetentry`, worktimesetting));\n}\n\nexport async function updateUnpaidTimesheetEntry(worktimesetting: any) {\n return awaitRequestBody(authPost(`api/updateunpaidtimesheetentry`, worktimesetting));\n}\n\nexport async function getWorkerGroups() {\n return awaitRequestBody(authGet(`api/allworkergroups`));\n}\n\nexport async function createWorkerGroup(name, mode, interval) {\n return awaitRequestBody(authGet(`api/createworkergroup/${name}/${mode}/${interval}`));\n}\n\nexport async function addWorkerToGroup(workerGroupId, workerId) {\n return awaitRequestBody(authGet(`api/addworkertogroup/${workerGroupId}/${workerId}`));\n}\n\nexport async function removeWorkerFromGroup(workerId) {\n return awaitRequestBody(authGet(`api/removeworkerfromgroup/${workerId}`));\n}\n\nexport async function deleteWorkerGroup(workerGroupId) {\n return awaitRequestBody(authGet(`api/deleteworkergroup/${workerGroupId}`));\n}\n\nexport async function createShift(shift) {\n return awaitRequestBody(authPost(`api/createshift`, shift));\n}\n\nexport async function archiveShift(shiftId) {\n return awaitRequestBody(authGet(`api/archiveshift/${shiftId}`));\n}\n\nexport async function getShifts() {\n return awaitRequestBody(authGet(`api/allshifts`));\n}\n\nexport async function getWorkerShifts(start, end) {\n return awaitRequestBody(authPost(`api/allworkershifts`, { start, end }));\n}\n\nexport async function postWorkerShift(workerShift) {\n debugger;\n return awaitRequestBody(authPost(`api/createworkershift`, workerShift));\n}\n\nexport async function copyWorkerShifts(start) {\n return awaitRequestBody(authPost(`api/copyworkershiftweek`, { start, end: null }));\n}\n\nexport async function clearWorkerShifts(workerId, workerGroupId, day) {\n return awaitRequestBody(authPost(`api/clearworkershifts`, { workerId, workerGroupId, day }));\n}\n\nexport async function getRawData(workerId, startDateTime, endDateTime) {\n return awaitRequestBody(authPost(`api/getrawdata`, { workerId, startDateTime, endDateTime }));\n}\n\nexport async function getWifiBeacons() {\n return awaitRequestBody(authGet(`api/wifibeacons`));\n}\n\nexport async function postNewWifiBeacon({ name, macAddress, lat, lng }) {\n return awaitRequestBody(authPost('api/new-wifibeacon', { name, macAddress, lng, lat }));\n}\n\nexport async function postUpdateWifiBeacon(id, { name, macAddress, lat, lng }) {\n return awaitRequestBody(authPost(`api/update-wifibeacon/${id}`, { name, macAddress, lng, lat }));\n}\n\nexport async function getSetDeviceConfigRequired(deviceId) {\n return awaitRequestBody(authGet(`devices/set-rconf-required/${deviceId}`));\n}\n\nexport async function getSetDeviceRebootRequired(deviceId) {\n return awaitRequestBody(authGet(`devices/set-reboot-required/${deviceId}`));\n}\n\nexport async function deactivateSite(siteId) {\n return awaitRequestBody(authGet(`api/deactivatesite/${siteId}`));\n}\n\nexport async function reactivateSite(siteId) {\n return awaitRequestBody(authGet(`api/reactivatesite/${siteId}`));\n}\n\nexport async function getWorkerStatus(workerId, refreshcache) {\n return awaitRequestBody(authGet(`api/workerstatus/${workerId}${refreshcache ? `?v=${Math.random()}` : ''}`));\n}\n\nexport async function postManualLocation(loc) {\n return awaitRequestBody(authPost(`api/manual-location`, loc));\n}\n\nexport async function postManualOffsiteEvent(workerId, eventTimeLocal) {\n return awaitRequestBody(authPost(`api/manual-offsite`, { workerId, eventTimeLocal }));\n}\n\nexport async function getLabourAgencies() {\n return awaitRequestBody(authGet('api/alllabouragencies'));\n}\n\nexport async function postAddLabourAgency(name) {\n return awaitRequestBody(authGet(`api/createlabouragency/${name}`));\n}\n\nexport async function postUpdateLabourAgency(labourAgency) {\n return awaitRequestBody(authPost('api/updatelabouragency', labourAgency));\n}\n\nexport async function getWorkerShiftsForWorkerAndRange(workerId, start, end){\n return awaitRequestBody(authPost(`api/getworkershifts/${workerId}`, { start, end }));\n}\n\nexport async function getEmailPreview(payload) {\n return awaitRequestBody(authPost('api/previewmanualemail', payload));\n}\n\nexport async function sendManualEmail(payload) {\n return awaitRequestBody(authPost('api/sendmanualemail', payload));\n}\n\nexport async function getWorkerTimesheets(workerId) {\n return awaitRequestBody(authGet(`api/workertimesheets/${workerId}`));\n}\n\nexport async function approvalAllTimesheets(workerId) {\n return awaitRequestBody(authGet(`api/approveall/${workerId}`));\n}\n\nexport async function getWorkerEmailData(workerId) {\n return awaitRequestBody(authGet(`api/workeronsites/${workerId}`));\n}\n\nexport async function getAgencyConsultants(agencyId) {\n return awaitRequestBody(authGet(`api/getagencyconsultants/${agencyId}`));\n}\n\nexport async function getAllAgencyConsultants() {\n return awaitRequestBody(authGet(`api/getallagencyconsultants`));\n}\n\nexport async function postAgencyConsultant(payload) {\n return awaitRequestBody(authPost('api/createagencyconsultant', payload));\n}\n\n\nexport async function deleteAgencyConsultant(agcid) {\n return awaitRequestBody(authGet(`api/deleteagencyconsultant/${agcid}`));\n}\n\nexport async function getMobileViewPayload(accessToken) {\n return awaitRequestBody(authGet(`api/m/${accessToken}`));\n}\n\nexport async function getMobileViewWorkerStatus(accessToken, workerId) {\n return awaitRequestBody(authGet(`api/m1/${accessToken}/${workerId}`));\n}\n\nexport async function getSupportWorkerStatus(workerId) {\n return awaitRequestBody(authGet(`api/workerstatussupport/${workerId}`));\n}\n\nexport async function getSupportWorkerLatestIncomingSMS(workerId) {\n return awaitRequestBody(authGet(`api/getlatestincomingsms/${workerId}`));\n}\n\nexport async function getGeneratedTextmessages() {\n return awaitRequestBody(authGet(`api/generateonsitesmschecks`));\n}\n\nexport async function postTextmessage(payload) {\n return awaitRequestBody(authPost(`api/createsmstosend`, payload));\n}\n\nexport async function getIncomingMessages(workerId) {\n return awaitRequestBody(authGet(`api/getincomingsms/${workerId}`));\n}\n\nexport async function getNotificationsByWorkerId(workerId) {\n return awaitRequestBody(authGet(`api/getnotificationsbyworker/${workerId}`));\n}\n\nexport async function getWorkerNotes(workerId) {\n return awaitRequestBody(authGet(`api/workernotes/${workerId}`));\n}\n\nexport async function addWorkerNote(workerNote) {\n return awaitRequestBody(authPost('api/createworkernote', workerNote));\n}\n\nexport async function getZoneReport(startDate, endDate) {\n return awaitRequestBody(authPost('api/zonereport', { startDate, endDate }));\n}\n\nexport async function getWorkerTotals(supervisorId, agencyId, startDatetimeUtc, endDatetimeUtc) {\n return awaitRequestBody(authPost('api/workertotals', { supervisorId, agencyId, siteId: null, startDatetimeUtc, endDatetimeUtc }));\n}\n","interface KeyValuePair {\n [key:string] : T;\n}\n\nexport interface RestModelBase {\n uri:string;\n updateFormUri?: string;\n}\n\nexport interface RestFeedModel extends RestModelBase{\n items : Array<{uri:string}>\n}\n\nexport interface CompanyRestModel extends RestModelBase {\n name: string;\n workerSearchFormUri: string;\n covidCasesUri: string;\n workersUri: string;\n}\n\nexport enum FormFieldType { \n TEXT= \"text\",\n OPTIONS = \"options\",\n DATETIME = \"datetimeoffset\",\n DATETIME_OLD = \"datetime\" \n}\n\n\nexport interface FormOption {\n key: T,\n description:string\n}\nexport interface FormAttribute {\n name: string, \n description:string, \n type:FormFieldType, \n options?:Array>;\n};\n\nexport interface FormModelBase extends RestModelBase{\n createResourceUri: string;\n attributes: Array; \n}\n\nexport interface CreateFormResult {\n resourceUri: string;\n message: string;\n}\n\nexport function makeSubmittFormData(formModel :FormModelBase, formData: KeyValuePair): KeyValuePair{\n \n\n const validateFormField = (form: KeyValuePair, attribute: FormAttribute) : KeyValuePair => {\n const formValue = formData[attribute.name].value;\n form[attribute.name] = formValue;\n\n if(attribute.type === FormFieldType.OPTIONS){\n const selectedOption = attribute.options ? \n attribute.options.find(option => option.key === formValue || option.description === formValue) : \n undefined;\n\n if(selectedOption) {\n form[attribute.name] = selectedOption.key;\n }\n }\n\n if(attribute.type === FormFieldType.DATETIME || attribute.type === FormFieldType.DATETIME_OLD){\n if(typeof formValue === 'string'){\n const tz = (new Date()).getTimezoneOffset() / -60;\n const sign = tz >= 0 ? '+' : '-';\n const offset = Math.abs(tz).toFixed(0)\n \n form[attribute.name] = `${formValue}${sign}${offset}:00`;\n }\n }\n\n return form;\n }\n\n const createdForm = formModel.attributes\n .reduce((previous, attribute) => validateFormField(previous, attribute), {});\n return createdForm;\n}\n","import { handle, Handlers } from 'redux-pack';\nimport { PayloadAction } from '../actions/types'\nimport { COVIDCASE_ActionTypes } from '../actions/CovidCaseActions';\nimport { FormModelBase, RestModelBase, FormFieldType, FormOption} from '../../RestClient/RestApiMicroFormat';\nimport { CovidCase, Worker, CovidCaseHistoryItem, CovidCaseHistory } from '../../api/index';\n\n\nexport type CovidCaseApiModel = CovidCase & RestModelBase\n\nexport interface CovidCaseState { \n isLoading: boolean;\n error?: string;\n workerUri?: string; // To get us going from a legacy sytem\n debugLastCommand: string;\n supervisor?: Worker;\n createForm?: FormModelBase;\n covidCase? : CovidCaseApiModel;\n covidCaseList : Array;\n updateForm?: FormModelBase;\n covidStatusList: Array;\n covidCaseHistory?: CovidCaseHistory;\n}\n\nconst initialState = {\n debugLastCommand: \"iniital-state\",\n isLoading: false,\n status: \"None\",\n covidCaseList: [],\n covidCase: {uri: ''},\n covidStatusList: [],\n};\n\nexport default function covidCaseReducer(state: CovidCaseState, action: PayloadAction): CovidCaseState {\n const newState = makeNewState(state, action);\n return newState;\n}\n\nfunction makeNewState(state: CovidCaseState = initialState, action: PayloadAction): CovidCaseState {\n \n const commonOnStartHandler = (s: CovidCaseState, a: PayloadAction) => ({\n ...s, \n isLoading: true, \n debugLastCommand: a.type+\"start\",\n });\n\n const commonErrorHandler = (s: CovidCaseState,a: PayloadAction) => ({\n ...s, \n error: a.payload.message, \n debugLastCommand:a.type+\"+error\" \n });\n \n\n switch (action.type) {\n case COVIDCASE_ActionTypes.GET_SUPERVISOR:{\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => ({\n ...s, \n supervisor:a.payload, \n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n }),\n };\n\n return handle(state, action, handlerActions);\n }\n\n case COVIDCASE_ActionTypes.GET_CASE_FORM:{\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => {\n const optionField = a.payload.attributes.find(\n x => (x.type === FormFieldType.OPTIONS && x.name === \"caseStatus\"));\n return {\n ...s, \n createForm:a.payload, \n covidStatusList: optionField!.options!,\n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n }\n },\n };\n\n return handle(state, action, handlerActions);\n }\n\n\n case COVIDCASE_ActionTypes.GET_UPDATE_FORM:{\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => {\n const optionField = a.payload.attributes.find(\n x => (x.type === FormFieldType.OPTIONS && x.name === \"caseStatus\"));\n return {\n ...s, \n updateForm:a.payload, \n covidStatusList: optionField!.options!,\n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n }\n },\n };\n\n return handle(state, action, handlerActions);\n }\n\n case COVIDCASE_ActionTypes.GET_CASE:{\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s, a) => ({\n ...s, \n covidCase:a.payload,\n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n }),\n };\n\n return handle(state, action, handlerActions);\n }\n\n case COVIDCASE_ActionTypes.FIND_WORKERS_CASE: {\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => ({\n ...s, \n covidCase:a.payload,\n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n }),\n };\n\n return handle(state, action, handlerActions);\n }\n\n case COVIDCASE_ActionTypes.CREATE_CASE:{\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => {\n const newState: CovidCaseState = {\n ...s, \n covidCase:a.payload,\n covidCaseList: [...s.covidCaseList, a.payload],\n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n };\n\n return newState;\n }\n };\n return handle(state, action, handlerActions);\n }\n\n case COVIDCASE_ActionTypes.SET_COVIDCASE_LIST:{\n const handlerActions : Handlers, Error, any, any> = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => {\n const newState: CovidCaseState = {\n ...s, \n covidCaseList:a.payload, \n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n };\n\n return newState;\n }\n };\n\n return handle(state, action, handlerActions);\n }\n\n case COVIDCASE_ActionTypes.GET_HISTORY_LIST:{\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => {\n const newState: CovidCaseState = {\n ...s, \n covidCaseHistory:a.payload, \n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n };\n return newState;\n }\n };\n\n return handle(state, action, handlerActions);\n }\n\n case COVIDCASE_ActionTypes.CLEAR_SELECTED_COVID_CASE: {\n return { \n ...state, covidCase: initialState.covidCase, \n createForm: undefined,\n covidCaseHistory: undefined,\n updateForm: undefined,\n };\n }\n\n default:\n return state;\n }\n}","import { AsyncAction } from './types'\nimport { RestClient } from '../../RestClient/RestClientTypes';\nimport { RestFeedModel, CompanyRestModel } from '../../RestClient/RestApiMicroFormat';\nimport { Worker } from '../../api/index';\nimport { ConfigurationState } from '../reducers/ConfigurationReducer';\n\nexport enum WORKER_ActionTypes {\n SET_SELECTED_WORKER = \"WORKER.SET_SELECTED_WORKER\",\n SET_WORKER_LIST = \"WORKER.SET_WORKER_LIST\",\n};\n\n\nfunction makeRestclient(state: () => any): RestClient{\n const configuration: ConfigurationState = state().configuration;\n return configuration.client!;\n}\n\n\nexport class WorkerCovidActions {\n\n static setSelectedWorker(workerUrl: string): AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n dispatch ({\n type: WORKER_ActionTypes.SET_SELECTED_WORKER,\n promise: restClient.get(workerUrl)\n });\n }\n };\n\n static getWorkersList(companyUri: string): AsyncAction {\n return (dispatch, state) => {\n const restClient = makeRestclient(state);\n dispatch ({\n type: WORKER_ActionTypes.SET_WORKER_LIST,\n promise: restClient.get(companyUri)\n .then((value: CompanyRestModel) => restClient.get(value.workersUri)\n .then(feed => restClient.getFeedItems(feed))),\n });\n }\n }\n}\n\n","import { handle, Handlers } from 'redux-pack';\nimport { PayloadAction } from '../actions/types'\nimport { WORKER_ActionTypes } from '../actions/WorkersCovidActions';\nimport { FormModelBase, RestModelBase} from '../../RestClient/RestApiMicroFormat';\nimport { CovidCase, Worker } from '../../api/index';\n\n\nexport type CovidCaseApiModel = CovidCase & RestModelBase\n\nexport interface WorkersState { \n workersList: Array;\n selectedWorker: Worker | undefined;\n}\n\nconst initialState = {\n workersList: [],\n selectedWorker: undefined,\n};\n\nexport default function WorkerReducerV2(state: WorkersState, action: PayloadAction): WorkersState {\n const newState = makeNewState(state, action);\n return newState;\n}\n\nfunction makeNewState(state: WorkersState = initialState, action: PayloadAction): WorkersState {\n \n const commonOnStartHandler = (s: WorkersState, a: PayloadAction) => ({\n ...s, \n isLoading: true, \n debugLastCommand: a.type+\"start\",\n });\n\n const commonErrorHandler = (s: WorkersState,a: PayloadAction) => ({\n ...s, \n error: a.payload.message, \n debugLastCommand:a.type+\"+error\" \n });\n \n\n switch (action.type) {\n \n case WORKER_ActionTypes.SET_SELECTED_WORKER: {\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => ({\n ...s, \n selectedWorker: a.payload, \n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n }),\n };\n\n return handle(state, action, handlerActions);\n }\n\n case WORKER_ActionTypes.SET_WORKER_LIST:{\n const handlerActions : Handlers, Error, any, any> = {\n start: (s) => commonOnStartHandler(s, action),\n failure: commonErrorHandler,\n success: (s, a) => ({\n ...s, \n workersList:a.payload, \n isLoading:false, \n debugLastCommand:a.type+\"+success\"\n }),\n \n };\n return handle(state, action, handlerActions);\n }\n\n default:\n return state;\n }\n}","import { handle, Handlers} from 'redux-pack';\nimport { PayloadAction } from '../actions/types'\nimport { RESTCLIENT_ActionTypes } from '../actions/ConfigurationActions'\nimport { RestClient } from '../../RestClient/RestClientTypes';\nimport { EnvironmentVariables } from '../../Constants/EnvironmentVariables';\n\n\nexport interface ConfigurationState { \n env?: EnvironmentVariables;\n client?: RestClient;\n error? : string;\n}\nconst initialState: ConfigurationState = {};\n\nexport function configurationReducer(state: ConfigurationState, action: PayloadAction): ConfigurationState {\n const newState = makeNewState(state, action);\n return newState;\n}\n\n\nfunction makeNewState(state: ConfigurationState = initialState, action: PayloadAction): ConfigurationState {\n\n const commonOnStartHandler = (s: ConfigurationState, a: PayloadAction) => ({\n ...s, \n });\n\n const commonErrorHandler = (s: ConfigurationState,a: PayloadAction) => ({\n ...s, \n error: a.payload.message, \n });\n \n\n switch(action.type){\n case RESTCLIENT_ActionTypes.ENVIRONMENT: {\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => ({\n ...s, \n env:a.payload, \n }),\n };\n\n return handle(state, action, handlerActions);\n }\n\n case RESTCLIENT_ActionTypes.RESTCLIENT:{\n const handlerActions : Handlers = {\n start: (s) => commonOnStartHandler(s,action),\n failure: commonErrorHandler,\n success: (s,a) => ({\n ...s, \n client:a.payload, \n }),\n };\n\n return handle(state, action, handlerActions);\n }\n\n default:\n return state;\n }\n}","import { PayloadAction } from './types';\n\nexport enum CONTACTTRACING_ActionTypes {\n SET_WORKER_TRACK = \"CONTACT_TRACING.SET_WORKER_TRACT\",\n SET_CONTACT_GEOJSON = \"CONTACT_TRACING.SET_CONTACT_GEOJSON\",\n SET_CONTACT_TRACING_FORM_VALUES = \"CONTACT_TRACING.SET_CONTACT_TRACING_FORM_VALUES\"\n}\n\nexport class ContactTracingActions {\n static setWorkerTrack(payload: any): PayloadAction {\n return ({ type: CONTACTTRACING_ActionTypes.SET_WORKER_TRACK, payload, })\n };\n\n static setContactGeojson(payload: any): PayloadAction {\n return ({ type: CONTACTTRACING_ActionTypes.SET_CONTACT_GEOJSON, payload, })\n };\n\n static setContactTracingFormValues(payload: any): PayloadAction {\n return ({ type: CONTACTTRACING_ActionTypes.SET_CONTACT_TRACING_FORM_VALUES, payload, })\n };\n\n}\n\n","import { PayloadAction } from '../actions/types';\nimport { CONTACTTRACING_ActionTypes } from '../actions/ContactTracingActions';\nimport { FeatureCollection } from '@turf/turf';\nimport moment from 'moment';\n\n\nexport interface ContactTraceState {\n contactGeojson: FeatureCollection;\n workerTrack: FeatureCollection;\n fromDate: moment.Moment;\n toDate: moment.Moment;\n startTime: string;\n endTime: string;\n distanceBuffer: number;\n timeBuffer: number;\n}\n\nconst initialState: ContactTraceState = {\n contactGeojson: { type: 'FeatureCollection', features: [] },\n workerTrack: { type: 'FeatureCollection', features: [] },\n fromDate: moment().add(-14, 'days'),\n toDate: moment(),\n startTime: '00:00',\n endTime: '23:59',\n distanceBuffer: 30,\n timeBuffer: 75,\n};\n\nexport function contactTraceReducer (state: ContactTraceState, action: PayloadAction): ContactTraceState {\n const newState = makeNewState(state, action);\n return newState;\n}\n\nfunction makeNewState(state: ContactTraceState = initialState, action: PayloadAction): ContactTraceState {\n const { payload } = action;\n switch (action.type) {\n case CONTACTTRACING_ActionTypes.SET_CONTACT_GEOJSON: {\n return { ...state, contactGeojson: payload };\n }\n case CONTACTTRACING_ActionTypes.SET_WORKER_TRACK: {\n return { ...state, workerTrack: payload };\n }\n case CONTACTTRACING_ActionTypes.SET_CONTACT_TRACING_FORM_VALUES: {\n return { ...state, ...payload };\n }\n default:\n return state;\n }\n}","import { handle, Handlers} from 'redux-pack';\nimport { PayloadAction } from '../actions/types';\nimport { SET_DEVICE_VERSIONS } from '../actions/ActionTypes';\nimport { DeviceFirmware } from '../../api/index';\n\n\nexport interface DeviceFirmwareState { \n all: Array;\n}\nconst initialState: DeviceFirmwareState = { all: [] };\n\nexport function deviceFirmwareReducer(state: DeviceFirmwareState, action: PayloadAction): DeviceFirmwareState {\n const newState = makeNewState(state, action);\n return newState;\n}\n\n\nfunction makeNewState(state: DeviceFirmwareState = initialState, action: PayloadAction): DeviceFirmwareState {\n switch(action.type){\n case SET_DEVICE_VERSIONS:\n return { ...state, all: action.payload };\n default:\n return state;\n }\n}","import {\n EDIT_UNPAID_TIMESHEET_ENTRY,\n SET_UNPAID_TIMESHEET_ENTRIES,\n} from './actions/ActionTypes';\nimport { assign, replaceInArray } from '../Utils';\n\nconst id = 'UnpaidTimesheetEntryId';\n\nconst initialState = {\n all: [],\n};\n\nexport default function (state = initialState, action) {\n const { all } = state;\n const { payload } = action;\n switch (action.type) {\n case EDIT_UNPAID_TIMESHEET_ENTRY: {\n return assign(state, { all: replaceInArray(all, payload, id) });\n }\n case SET_UNPAID_TIMESHEET_ENTRIES: {\n return assign(state, { all: payload });\n }\n default:\n return state;\n }\n}\n","import {\n SET_WORKER_GROUPS,\n SET_EDITING_WORKERGROUP,\n } from './actions/ActionTypes';\n \n const initialState = {\n all: [],\n editingWorkerGroup: null,\n };\n\n export default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case SET_WORKER_GROUPS: {\n return { ...state, all: payload };\n }\n case SET_EDITING_WORKERGROUP: {\n return { ...state, editingWorkerGroup: payload };\n }\n default:\n return state;\n }\n }\n ","import {\n SET_SHIFTS,\n} from './actions/ActionTypes';\n\nconst initialState = {\n all: [],\n editingShift: null,\n};\n\nexport default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case SET_SHIFTS: {\n return { ...state, all: payload };\n }\n default:\n return state;\n }\n}\n","import {\n SET_WORKER_SHIFTS,\n SET_SCHEDULE_GROUP_VIEW,\n SET_SCHEDULE_NEXT_WEEK,\n SET_SCHEDULE_PREVIOUS_WEEK,\n} from './actions/ActionTypes';\nimport { getCurrentWeek, getNextWeek, getPreviousWeek } from '../Utils';\n\nconst initialState = {\n all: [],\n uiState: {\n week: getCurrentWeek(),\n showGroups: true,\n }\n};\n\nexport default function (state = initialState, action) {\n const { payload } = action;\n switch (action.type) {\n case SET_WORKER_SHIFTS: {\n return { ...state, all: payload };\n }\n case SET_SCHEDULE_GROUP_VIEW: {\n const uiState = { ...state.uiState, showGroups: payload };\n return { ...state, uiState };\n }\n case SET_SCHEDULE_PREVIOUS_WEEK: {\n const uiState = { ...state.uiState, week: getPreviousWeek(state.uiState.week) };\n return { ...state, uiState };\n }\n case SET_SCHEDULE_NEXT_WEEK: {\n const uiState = { ...state.uiState, week: getNextWeek(state.uiState.week) };\n return { ...state, uiState };\n }\n default:\n return state;\n }\n}\n","import { combineReducers } from 'redux';\nimport timesheets from '../TimesheetStore';\nimport timesheetEntries from '../TimesheetEntryStore';\nimport workers from '../WorkerStore';\nimport sites from '../SiteStore';\nimport timesheetNotes from '../TimesheetNoteStore';\nimport timesheetReport from '../TimesheetReportStore';\nimport ui from '../UiStore';\nimport me from '../MeReducer';\nimport zones from '../ZonesStore';\nimport covidCase from '../reducers/CovidCaseReducer';\nimport workersCovid from '../reducers/WorkersCovidReducer';\nimport {configurationReducer} from '../reducers/ConfigurationReducer';\nimport { contactTraceReducer } from '../reducers/ContactTraceReducer';\nimport { deviceFirmwareReducer } from '../reducers/DeviceFirmwareReducer';\nimport unpaidTimesheetEntries from '../UnpaidTimesheetEntryStore';\nimport workerGroups from '../WorkerGroupReducer';\nimport shifts from '../ShiftReducer';\nimport workerShifts from '../WorkerShiftReducer';\n\n\nconst rootReducer = combineReducers(\n {\n timesheets,\n sites,\n workers,\n timesheetEntries,\n timesheetNotes,\n timesheetReport,\n me,\n ui,\n zones,\n covidCase,\n workersCovid,\n configuration: configurationReducer,\n contactTracing: contactTraceReducer,\n deviceFirmware: deviceFirmwareReducer,\n unpaidTimesheetEntries,\n workerGroups,\n shifts,\n workerShifts,\n },\n);\n\n\nexport default rootReducer;\nexport type RootReducerType = ReturnType\n","import { Middleware, MiddlewareAPI, Dispatch, AnyAction } from 'redux';\nimport {\n postTimesheetNote,\n postSetTimesheetStatus,\n createWorker,\n editWorker,\n createSite,\n updateSite,\n postMyTimesheetNote,\n updateCompany,\n getWorkers,\n createZone,\n updateZone,\n} from '../API';\nimport {\n ADD_TIMESHEET_NOTE,\n SET_TIMESHEET_STATUS, EDIT_WORKER,\n CREATE_WORKER, CREATE_SITE, UPDATE_SITE,\n SET_COMPANY, CREATE_ZONE, UPDATE_ZONE,\n} from './actions/ActionTypes';\nimport { assign } from '../Utils';\nimport { WorkerActions } from './actions/AllActions';\nimport { PayloadAction } from './actions/types';\n\n\nfunction siteParams(site, id) {\n const {\n WKT, Name, Active, SitePayrollId, SiteDeviceSettings, MinimumBreakTimeMinsForWorkDay,\n MinimumWorkingTimeHoursForBreak,\n DistanceBufferMeters\n } = site;\n return {\n WKT,\n SiteId: id,\n Name,\n Active: !!Active,\n SitePayrollId: SitePayrollId || '',\n SiteDeviceSettings,\n MinimumBreakTimeMinsForWorkDay,\n MinimumWorkingTimeHoursForBreak,\n DistanceBufferMeters\n };\n}\n\nfunction zoneParams(zone, id) {\n const {\n WKT, Name, SiteId,\n } = zone;\n return {\n WKT,\n ZoneId: id,\n SiteId,\n Name,\n };\n}\n// https://redux.js.org/advanced/middleware\nexport const apiMiddleware: Middleware = (middleware: MiddlewareAPI) => (next: Dispatch) => (action: PayloadAction) => {\n // DO NOT RETURN OR CALL NEXT!!\n // The return next at the end of this function MUST run\n\n //export default function postChanges(middleware: MiddlewareAPI) {\n // next is the state changing function after the action is dispatched\n const { type, payload } = action;\n\n switch (type) {\n case ADD_TIMESHEET_NOTE:\n const { token } = action as any;\n if (token) {\n postMyTimesheetNote(token, payload);\n }\n postTimesheetNote(payload);\n break;\n case SET_TIMESHEET_STATUS:\n postSetTimesheetStatus(payload);\n break;\n case EDIT_WORKER:\n // Link to api. Edit create worker into database.\n editWorker(payload);\n break;\n case CREATE_WORKER:\n // Link to api. Create worker into database.\n // I don't think we can use promises like this in here\n createWorker(assign(payload, { WorkerId: 0 }))\n .then(() => getWorkers())\n .then(workerList => middleware.dispatch(WorkerActions.setWorkers(workerList)));\n break;\n case CREATE_SITE:\n createSite(siteParams(payload, 0));\n break;\n case UPDATE_SITE:\n updateSite(siteParams(payload, payload.SiteId));\n break;\n case CREATE_ZONE:\n createZone(zoneParams(payload, 0));\n break;\n case UPDATE_ZONE:\n updateZone(zoneParams(payload, payload.ZoneId));\n break;\n case SET_COMPANY:\n if (payload.needSave) {\n const comped = assign(payload, {});\n delete comped.needSave;\n updateCompany(comped);\n }\n break;\n\n default:\n break;\n } \n\n return next(action);\n}","import RootReducer from './rootReducer';\nimport {apiMiddleware} from '../ApiMiddleware';\nimport { createStore, applyMiddleware } from 'redux';\nimport thunk from 'redux-thunk'\nimport { middleware as reduxPackMiddleware } from 'redux-pack';\nimport createLogger from 'redux-logger'\nimport { RestClientActions } from '../actions/ConfigurationActions'\n\nconst store = createStore(RootReducer, applyMiddleware(thunk, reduxPackMiddleware, apiMiddleware /*, createLogger */));\n\n// window.store = store;\nexport default store;","export default 'data:image/png;base64,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';\n","\n\n// Common to all environments.\nexport const MAPBOX_TOKEN = 'pk.eyJ1IjoicmltdW9yYiIsImEiOiJjam5ieWowaTQxaHM2M3BwZXMwbDR0c3ZmIn0.i1Em6tRYqlDCV2ElemiY7g';\nexport const STREET_MAP_URI = 'mapbox://styles/mapbox/streets-v8';\n\n//export const SITES_MAP_URI = 'mapbox://styles/rimuorb/ck9rrob9b8ux01imwjic1dcjg';\n//export const SITES_MAP_URI = 'mapbox://styles/rimuorb/ckwv4kuca21wk15pglzadsk0a';\nexport const SITES_MAP_URI = STREET_MAP_URI;\n//export const SAT_MAP_URI = 'mapbox://styles/rimuorb/ck01kshgo5kcj1cs2p7wtpvo5';\nexport const SAT_MAP_URI = 'mapbox://styles/mapbox/satellite-streets-v12';\nexport const SITEM8_MAP_URI = 'mapbox://styles/rimuorb/cjz7myimp24u31cldpfgg3rms';\nexport const RACE_MAP_URI = 'mapbox://styles/rimuorb/ck7g2n6s300q81iqydbh6ufm1';\n\nexport const SITE_FILL_STYLE = {\n 'fill-color': '#Da1743',\n 'fill-opacity': 0.50,\n 'fill-outline-color': '#111111',\n};\n\nexport const ZONE_FILL_STYLE = {\n 'fill-color': '#f5dd42',\n 'fill-opacity': 0.50,\n 'fill-outline-color': '#f5dd42',\n};\n\nexport const WORKER_STATUS_MAP = {\n 1: { text: 'On Site', color: '#3de534', className: 'onsite-status' },\n 2: { text: 'Off Site', color: '#ffb71c', className: 'offsite-status' },\n 3: { text: 'Private', color: '#a5a5a5', className: 'private-status' },\n 4: { text: 'Offline', color: '#3a3a3a', className: 'offline-status' },\n 0: { text: 'Error', color: '#fff', className: 'error-status' },\n};\n\n\nexport const CSV_FORMAT_MAP = {\n 0: 'Site totals for each day',\n 1: 'Daily totals',\n 2: 'All time entries',\n};\n\nexport const NO_SITE_NAME = 'Unknown';\n\nexport const DAYS_OF_WEEK = {\n 1: 'Monday',\n 2: 'Tuesday',\n 3: 'Wednesday',\n 4: 'Thursday',\n 5: 'Friday',\n 6: 'Saturday',\n 0: 'Sunday',\n};\n\nexport const WEEKDAY_NUMBERS = [1, 2, 3, 4 ,5 ,6, 0];\n\n\nexport const LINK_NAMES = {\n dashboard: 'Dashboard',\n approvals: 'Approvals',\n locations: 'Locations',\n timesheets: 'Timesheets',\n users: 'Users',\n sites: 'Sites',\n company: 'Company',\n superAdmin: 'System Admin',\n contact: 'Contact Tracing',\n zones: 'Zones',\n covidcases: 'Case Management',\n workergroups: 'Manage Worker Groups',\n shifts: 'Manage Shifts',\n schedule: 'Schedule',\n mobile: 'Mobile',\n incident: 'Incident',\n productivity: 'Productive Zones',\n supervisorTotals: 'Worker Totals',\n};\n\nexport const CUSTOMER_MAP_TYPES = {\n nz_standard: 'NZ_STANDARD',\n island: 'ROTATING_ISLAND',\n vehicle_tracking: 'VEHICLE_TRACKING',\n};\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport Typography from '@material-ui/core/Typography';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Divider from '@material-ui/core/Divider';\nimport { Link, withRouter } from 'react-router-dom';\nimport AssesmentIcon from '@material-ui/icons/Assessment';\nimport DoneIcon from '@material-ui/icons/Done';\nimport PersonPinCircle from '@material-ui/icons/PersonPinCircle';\nimport GroupIcon from '@material-ui/icons/Group';\nimport WatchLater from '@material-ui/icons/WatchLater';\nimport MapIcon from '@material-ui/icons/Map';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport PeopleOutlineIcon from '@material-ui/icons/PeopleOutline';\nimport MobileFriendlyIcon from '@material-ui/icons/MobileFriendly';\nimport AccessTimeIcon from '@material-ui/icons/AccessTime';\nimport logo from '../../Images/logo';\nimport { LINK_NAMES } from '../../Constants/Constants';\n\nexport const iconMap = {\n dashboard: ,\n approvals: ,\n locations: ,\n timesheets: ,\n users: ,\n sites: ,\n zones: ,\n company: ,\n superAdmin: ,\n covidcases: ,\n workergroups: ,\n shifts: ,\n schedule: ,\n mobile: ,\n incident: ,\n productivity: ,\n supervisorTotals: ,\n};\n\n\nconst styles = theme => ({\n root: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper,\n },\n});\n\nfunction ListItemLink(props) {\n return (\n \n \n { props.children }\n \n \n );\n}\n\nfunction renderLinks(l, onClick) {\n return l.map((x, i) => (\n
onClick && onClick(x)}>\n \n {iconMap[x]}\n \n
\n\n ));\n}\n\nconst allowedForSupervisor = [\n 'locations',\n 'dashboard',\n 'incident',\n]\n\nfunction filterLinks(links, user, superAdmin) {\n if(user.IsSupervisor && !user.IsAdmin && !superAdmin) {\n return links.filter(l => allowedForSupervisor.includes(l));\n }\n return links\n}\n\nfunction Links(props) {\n const {\n classes, admin, companyName, onClick, superAdmin, user,\n } = props;\n const mainLinks = renderLinks(filterLinks(['dashboard', 'locations', 'incident'], user, superAdmin), onClick);\n let reportingLinks = renderLinks(filterLinks(['timesheets', 'covidcases', 'approvals', 'productivity', 'supervisorTotals'], user, superAdmin), onClick);\n let setups = []; //filterLinks(['users', 'sites', 'zones', 'workergroups', 'shifts', 'company', 'schedule'], user, superAdmin);\n if (superAdmin) {\n reportingLinks = renderLinks(['timesheets', 'covidcases', 'approvals', 'productivity', 'supervisorTotals']);\n setups = ['users', 'sites', 'zones', 'workergroups', 'shifts', 'company', 'schedule'];\n setups.push('superAdmin');\n setups.push('mobile');\n }\n\n if(user.IsAdministrator &! superAdmin)\n {\n reportingLinks = renderLinks(['timesheets', 'covidcases', 'approvals', 'productivity', 'supervisorTotals']);\n setups = ['users', 'sites', 'zones', 'workergroups', 'shifts', 'company', 'schedule'];\n setups.push('mobile');\n }\n const setupLinks = renderLinks(setups, onClick);\n return (\n
\n \n \n \n \n \n { companyName }\n \n \n { mainLinks }\n \n
\n \n Reporting}\n >\n { reportingLinks }\n \n \n Setup}\n >\n { setupLinks }\n \n
\n
\n );\n}\n\nexport default withStyles(styles)(withRouter(Links));\n","import React, { Component } from 'react';\nimport {\n FormControl,\n InputLabel,\n Select,\n FilledInput,\n MenuItem,\n} from '@material-ui/core';\nimport { getCompanies, switchCompany } from '../../API';\n\nexport default class SuperAdminPage extends Component {\n state = {\n company: 0,\n companies: [],\n }\n\n componentDidMount() {\n this.initData();\n }\n\n initData = async () => {\n const companies = await getCompanies();\n this.setState({ companies: companies.filter(c => !c.IsArchived) });\n }\n\n handleSelectChange = async (e, b) => {\n this.setState({ company: b.props.value });\n await switchCompany(b.props.value);\n // eslint-disable-next-line no-undef\n window.location.reload();\n }\n\n render() {\n const { companies } = this.state;\n const { companyName } = this.props;\n return (\n
\n \n { companyName }\n }\n >\n { companies.map(\n c => (\n \n { c.Name }\n \n ),\n )}\n \n \n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport AccountCircle from '@material-ui/icons/AccountCircle';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport Drawer from '@material-ui/core/Drawer';\nimport Links from './Links';\nimport SuperAdminForm from './SuperAdminForm';\nimport { getEnvVariables } from '../../Constants/EnvironmentVariables';\nimport { capitalize } from '../../Utils';\nimport { LINK_NAMES } from '../../Constants/Constants';\nimport { isIOS } from 'react-device-detect';\nimport logo from '../../Images/logo_dark.png';\n\n\n\nconst styles = () => ({\n root: {\n flexGrow: 1,\n },\n grow: {\n flexGrow: 1,\n },\n menuButton: {\n marginLeft: -12,\n marginRight: 20,\n },\n appbarYellow: {\n position: 'fixed',\n top: 0,\n maxWidth: '100vw',\n /* Reuben hack */\n backgroundColor: '#f5c800',\n color: '#564d4b',\n },\n});\n\nclass MenuAppBar extends Component {\n state = {\n anchorEl: null,\n drawerOpen: false,\n };\n\n componentWillReceiveProps({ forceOut }) {\n // eslint-disable-next-line no-unused-expressions\n forceOut && this.logout();\n }\n\n handleMenu = ({ currentTarget }) => {\n this.setState({ anchorEl: currentTarget });\n };\n\n handleClose = () => {\n this.setState({ anchorEl: null });\n };\n\n toggleDrawer = (open) => {\n this.setState({ drawerOpen: open });\n }\n\n getTitle() {\n const parts = window.location.pathname.split('/');\n if (parts[1] === 'ts') {\n return '';\n }\n return LINK_NAMES[parts[1].replace('/', '')];\n }\n\n logout = async () => {\n await this.props.auth.logout();\n const envVariables = await getEnvVariables();\n window.location.replace(envVariables.logoutUri);\n /* eslint-disable */\n /*document.getElementById('root').parentNode.removeChild(\n document.getElementById('root'));*/\n /* eslint-enable */\n }\n\n render() {\n const {\n classes, accessToken, admin, companyName, userImg, onClick, superAdmin, user,\n } = this.props;\n const { anchorEl } = this.state;\n const open = Boolean(anchorEl);\n const openDrawer = () => this.toggleDrawer(true);\n const closeDrawer = () => this.toggleDrawer(false);\n\n return (\n
\n \n \n {accessToken && (\n \n ) }\n
\n \n \n \n \n \n \n \n { this.getTitle() }\n \n { superAdmin && }\n {accessToken && (\n
\n { /*isIOS && */}\n \n { userImg ? \"user : }\n \n \n Logout\n \n
\n )}\n
\n
\n \n );\n }\n}\n\nexport default withStyles(styles)(MenuAppBar);\n","import React from 'react';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\n\n\nconst style = {\n position: 'fixed',\n top: 0,\n maxWidth: '100vw',\n /* Reuben hack */ backgroundColor: '#f5c800',\n color: '#564d4b',\n};\n\nexport default function NoAuthNavBar({ companyName }) {\n return (\n \n \n \n { companyName }\n \n \n \n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n\n\nconst styles = theme => ({\n close: {\n padding: theme.spacing.unit / 2,\n },\n});\n\nclass SimpleSnackbar extends React.Component {\n state = {\n open: false,\n openTime: null,\n };\n\n static getDerivedStateFromProps({ openTime }, prevState) {\n if (openTime !== prevState.openTime) {\n return { openTime, open: true };\n }\n return null;\n }\n\n\n handleClick = () => {\n this.setState({ open: true });\n };\n\n handleClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n\n this.setState({ open: false });\n };\n\n render() {\n const { classes, message } = this.props;\n return (\n
\n { message }}\n action={[\n \n \n ,\n ]}\n />\n
\n );\n }\n}\n\nSimpleSnackbar.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nconst mapStateToProps = ({ ui }) => ui.snackbar;\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n});\n\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(SimpleSnackbar)));\n","import React, { Component } from 'react';\nimport ReactLoading from 'react-loading';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n\nfunction Loading(props) {\n if (!props.loading) {\n return null;\n }\n return (\n \n );\n}\n\nconst mapStateToProps = ({ ui }) => ({ loading: ui.loading });\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n});\n\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Loading));\n","import React, { Component } from 'react';\nimport { withRouter, useHistory } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { Grid } from '@material-ui/core';\nimport localForage from 'localforage';\n\nimport MainTopNav from './Components/Nav/MainTopNav';\nimport NoAuthNavBar from './Components/Nav/NoAuthNavBar';\nimport Snackbar from './Components/Common/Snackbar';\nimport {\n getMe, getCompanyName, getCompanyFromToken, getCompany,\n} from './API';\nimport {\n setMe, setAuth, setCompany, setLoading, setPathname, setApiRoot,\n} from './redux/actions/AllActions';\nimport Loading from './Components/Common/Loading';\nimport Auth from './Components/Auth/Auth';\nimport { getApiRoot } from './API';\nimport { isIOS } from 'react-device-detect';\n\n\n\nconst RoutedNavBar = withRouter(MainTopNav);\nconst RoutedNoAuthNavBar = withRouter(NoAuthNavBar);\n\nconst auth0 = new Auth();\n\nconst handleAuthentication = async (history) => {\n if (/access_token|id_token|error/.test(window.location.hash)) {// eslint-disable-line\n const auth = await auth0.handleAuthentication();\n if (auth) {\n /*if(isIOS) {\n // eslint-disable-line\n //history.push('/mobile');\n } else {\n // eslint-disable-line\n history.push('/dashboard');\n }*/\n history.push('/dashboard');\n return true;\n }\n }\n return false;\n};\n\n\nclass Container extends Component {\n state = {\n forceOut: false,\n };\n\n tokenAuth() {\n /* eslint-disable */\n const path = window.location.pathname;\n if(path.split('/')[1] === 'm') {\n return path.split('/')[2];\n } else {\n return false;\n }\n /* eslint-enable */\n }\n\n componentDidMount() {\n\n const token = this.tokenAuth();\n if (token) {\n this.handleTokenAuth(token);\n } else {\n this.authorise();\n }\n }\n\n handleTokenAuth = async (token) => {\n this.props.setCompany({ });\n this.props.setAuth({ token });\n this.props.setMe({});\n this.props.setApiRoot({});\n document.body.removeAttribute(\"style\");\n }\n\n authorise = async () => {\n let auth = await auth0.isAuthenticated();\n const { idToken, accessToken, expiresAt } = auth;\n\n if (!idToken) {\n const isAuthenticating = await handleAuthentication(this.props.history);\n if (!isAuthenticating) {\n await auth0.login();\n } else {\n auth = await auth0.isAuthenticated();\n if (!auth.idToken) {\n auth0.login();\n return;\n }\n }\n }\n await this.props.setAuth({ accessToken, expiresAt, idToken });\n await this.handleLoggedIn();\n }\n\n handleLoggedIn = async () => {\n const { accessToken, expiresAt, idToken } = await auth0.isAuthenticated();\n this.props.setAuth({ accessToken, expiresAt, idToken });\n \n const apiRoot = await getApiRoot();\n this.props.setApiRoot(apiRoot);\n\n const me = await getMe();\n if (!me && accessToken && idToken) {\n this.setState({ forceOut: true });\n return;\n }\n this.props.setMe(me);\n \n if (me.IsAdministrator || me.IsSupervisor) {\n const company = await getCompany();\n this.props.setCompany(company);\n } else {\n const Name = await getCompanyName();\n this.props.setCompany({ Name });\n }\n \n }\n\n render() {\n const {\n me, company, auth, children, location, pathname, apiRoot, loading,\n } = this.props;\n const { forceOut } = this.state;\n const admin = !!(me && me.IsAdministrator && me.IsEnabled);\n const { accessToken, token } = auth;\n const isUser = !!(accessToken || token);\n if(!apiRoot || !loading) {\n return
;\n }\n return (\n
\n { !token && (\n \n ) }\n { token && }\n { isUser\n && (\n \n { children }\n \n )\n }\n \n \n
\n );\n }\n}\n\nconst mapStateToProps = state => ({ ...state.me,\n pathname: state.ui.pathname,\n loading: state.configuration.client });\n\nconst mapDispatchToProps = dispatch => ({\n setMe: ws => dispatch(setMe(ws)),\n setAuth: ws => dispatch(setAuth(ws)),\n setCompany: ws => dispatch(setCompany(ws)),\n setLoading: ws => dispatch(setLoading(ws)),\n setPathname: ws => dispatch(setPathname(ws)),\n setApiRoot: ws => dispatch(setApiRoot(ws)),\n});\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(Container));\n","import React from 'react';\nimport TimeKeeper from 'react-timekeeper';\nimport {\n Select, MenuItem, OutlinedInput, FormHelperText,\n} from '@material-ui/core';\n\nexport function ModalTimePicker({ time, onChange, onComplete }) {\n return (\n
\n
\n ;\n
\n
\n );\n}\n// pass a list of objects like [{ name: 'p', age: 1 }] valKey name, textKey age\n// if the value is null the select will pass the\n// text as the value so use an empty string instead\n\nexport function SelectInput({\n list, name, textKey, onChange, value,\n}) {\n const options = list.map(\n (o, i) => (\n \n {o[textKey]}\n \n ),\n );\n return (\n }\n autoWidth\n >\n { options }\n \n\n );\n}\n","export default class BaseModelList {\n constructor(objects, idKey, ObjectClass) {\n this.objects = objects.map(o => new ObjectClass(o));\n this.idKey = idKey;\n }\n\n findById = id => this.objects.find(o => o[this.idKey] === id);\n\n filterBy = (key, value) => this.objects.filter(o => o[key] === value);\n\n findBy = (key, value) => this.objects.find(o => o[key] === value);\n\n findIndex = id => this.objects.findIndex(o => o[this.idKey] === id);\n\n filterByFunction = func => this.objects.filter(func);\n}\n","import moment from 'moment';\n\nexport default class BaseModel {\n dataKeys = [];\n\n constructor(data) {\n this.updateData(data);\n return this;\n }\n\n updateData = (data) => {\n // TODO comment lots on this and the lists\n const keys = data.dataKeys || Object.keys(data);\n keys.forEach((k) => {\n this[k] = data[k];\n this.dataKeys.push(k);\n });\n this.setMomentDates();\n }\n\n setMomentDate = (key, dateStr) => {\n const m = moment(dateStr, 'YYYY-MM-DD HH:mm:ss');\n this[`m${key}`] = m;\n }\n\n setMomentDates = () => {\n const keys = this.dataKeys.filter(k => k.includes('Date'));\n keys.forEach(k => this.setMomentDate(k, this[k]));\n }\n\n}\n","import BaseModel from './BaseModel';\n\nexport default class Worker extends BaseModel {\n\n}\n","import BaseModelList from './BaseModelList';\nimport Worker from './Worker';\n\nexport default class WorkerList extends BaseModelList {\n constructor(data) {\n super(data, 'WorkerId', Worker);\n }\n}\n","import BaseModel from './BaseModel';\nimport { NO_SITE_NAME } from '../Constants/Constants';\nimport { formatTimeDiff } from '../Utils';\nexport default class TimesheetEntry extends BaseModel {\n getTotalStr = () => {\n }\n // TODO get siteName from backend\n getTableRow = (siteName) => {\n const {\n mStartDateTime,\n Travel,\n Flag,\n SiteId,\n mFinishDateTime,\n Description,\n ModifiedWorkerId,\n } = this;\n const siteStr = siteName || NO_SITE_NAME;\n const startStr = mStartDateTime.format('HH:mm');\n const endStr = mFinishDateTime.format('HH:mm');\n const totalStr = formatTimeDiff(mStartDateTime, mFinishDateTime);\n const iconColor = (Flag !== 0 || !SiteId) ? '#ffae42' : '#2196f3';\n const siteDesc = {\n siteStr, Description, ModifiedWorkerId, SiteId, iconColor,\n };\n // [ date, site, start, end, break, reported-total, desc, add, delete ]\n return [siteDesc, '', startStr, endStr, { value: totalStr, fontWeight: 200 }, '', this];\n }\n}","import BaseModel from './BaseModel';\n\nexport default class Site extends BaseModel {\n\n}\n","import BaseModelList from './BaseModelList';\nimport Site from './Site';\n\nexport default class SiteList extends BaseModelList {\n constructor(data) {\n super(data, 'SiteId', Site);\n }\n\n getSelectOptions = () => this.objects.map(s => ({\n text: s.Name,\n SiteId: s.SiteId,\n }));\n}\n","import moment from 'moment';\nimport BaseModelList from './BaseModelList';\nimport TimesheetEntry from './TimesheetEntry';\nimport SiteList from './SiteList';\nimport { formatDuration, uniqInArray, areSameDay } from '../Utils';\n\n\nexport default class TimesheetEntryList extends BaseModelList {\n constructor(objects) {\n super(objects, 'TimesheetEntryId', TimesheetEntry);\n }\n\n unpaidTimesheetEntries = [];\n\n // TODO REMOVE THE DELETED FLAG COMPLETELY\n getLiveEntries = () => this.objects.filter(o => !o.deleted)\n\n setUnpaidEntries = (unpaidTimesheetEntries) => {\n this.unpaidTimesheetEntries = unpaidTimesheetEntries;\n }\n\n setSiteList = (sites) => {\n this.siteList = new SiteList(sites.map(\n ({ SiteId, Name }) => ({ SiteId, Name })));\n }\n\n getTotalTimeStr = () => {\n const objects = this.getLiveEntries();\n if (!objects.length) {\n return '';\n }\n return this.formatTotalTimeStr(objects);\n }\n\n formatStartTimeStr = entries => (entries.length ? entries[0].mStartDateTime.format('HH:mm') : '');\n\n formatEndTimeStr = entries => (entries.length ? entries[entries.length - 1].mFinishDateTime.format('HH:mm') : '');\n\n getSiteDescription = () => {\n const objects = this.getLiveEntries();\n const siteIds = uniqInArray(objects.map(e => e.SiteId));\n\n const descriptions = siteIds.map((id) => {\n const matchingEntries = objects.filter(e => e.SiteId === id);\n const site = this.siteList.findById(id);\n const siteName = site ? site.Name : 'Unknown';\n return `${siteName} (${this.formatTotalTimeStr(matchingEntries)})`;\n });\n\n return descriptions.join(', ');\n }\n\n // renders the total time of a group of entries minus the total time of \n // corresponding unpaid time entries\n formatTotalTimeStr(entries) {\n let totalMins = entries.reduce((total, { mFinishDateTime, mStartDateTime }) => {\n const diff = moment.duration(mFinishDateTime.diff(mStartDateTime)).asMinutes();\n return total + diff;\n }, 0);\n\n let unpaidMins = 0;\n const days = uniqInArray(entries.map(e => moment(e.StartDateTime).day()));\n const matchingUnpaidEntries = this.unpaidTimesheetEntries.filter(e => days.includes(moment(e.DateTime).day()));\n matchingUnpaidEntries.forEach(p => unpaidMins += p.totalMinutes);\n if(totalMins < unpaidMins) {\n return '0:00';\n }\n return `${formatDuration(0, totalMins - unpaidMins)}`;\n }\n\n formatTotalBreakStr(entries) {\n const totalMins = entries.reduce((total, { mFinishDateTime, mStartDateTime }) => {\n const diff = moment.duration(mFinishDateTime.diff(mStartDateTime)).asMinutes();\n return total + diff;\n }, 0);\n let unpaidMins = 0;\n const days = uniqInArray(entries.map(e => moment(e.StartDateTime).day()));\n const matchingUnpaidEntries = this.unpaidTimesheetEntries.filter(e => days.includes(moment(e.DateTime).day()));\n matchingUnpaidEntries.forEach(p => unpaidMins += p.totalMinutes);\n if(totalMins < unpaidMins) {\n return '0:00';\n }\n return `${formatDuration(0, unpaidMins)}`;\n }\n\n getEntriesForPost = () => {\n const entriesToSend = this.getLiveEntries().map((tse) => {\n const newDates = {\n StartDateTime: tse.mStartDateTime.format('YYYY-MM-DD HH:mm'),\n FinishDateTime: tse.mFinishDateTime.format('YYYY-MM-DD HH:mm'),\n };\n let toSend = { ...tse, ...newDates };\n if (toSend.isNew) {\n toSend = Object.assign(toSend, { TimesheetEntryId: 0 });\n }\n // TODO REMOVE ALL ISNEW AND DELETED LOGIC\n delete toSend.isNew;\n delete toSend.deleted;\n delete toSend.mFinishDateTime;\n delete toSend.mFinishDateTime;\n return toSend;\n });\n return entriesToSend;\n }\n\n getEntriesByDay = day => this.objects.filter(tse => areSameDay(moment(day), tse.StartDateTime))\n}\n","import logoTxt from '../Images/logo';\n\nconst stylesStr = `\n#wrapper {\n width: 625px;\n margin: 0;\n padding: 50px;\n top: 0;\n left: 0;\n background-color: #fff;\n}\n\nbody {\n padding: 0;\n font-size: 100%;\n}\n\nhtml, body {\n height: 1200px;\n width: 625px;\n margin:0;\n padding:0;\n font-size: 12px;\n font-family: Arial, Helvetica, sans-serif;\n line-height: 1.3rem;\n}\n\ntable {\n font-size: 11px;\n}\nth {\n font-size: 12px;\n}\n.left {\n float: left;\n}\n.right {\n float: right;\n}\ntr {\n padding-top: 10px;\n padding-bottom: 10px;\n}\n#header-table {\n margin-right: 25px;\n}\ndiv#header-table td{\n padding: 4px;\n}\n.main {\n margin-top: 20px;\n margin-left: 20px;\n}\n\n#footer {\n margin-top: : 100px;\n left: 50px;\n}\n\n#main-table, #signature-table {\n width: 600px;\n margin: 0px auto;\n}\n\n#main-table td {\n margin: 0;\n padding: 4px 0px 2px 8px;\n text-align: left;\n}\n\ntr.inner-row {\n border: none;\n}\n\ntr.inner-row td {\n padding: 11px 0px 11px 12px;\n}\n\ntd {\n padding: 11px 0px 11px 12px;\n}\n\ntr.outer-row td {\n font-weight: bold;\n border-top: 1px solid black;\n border-bottom: 1px solid black;\n}\n\n.bordered {\n border: 1px solid black;\n}\n\nsmall {\n color: #999;\n}\n\n.pad-left {\n padding-left: 25px;\n}\n#signature-table {\n margin: 50px auto;\n}\n\n.signature-cell {\n border: 1px black solid;\n height: 60px;\n}\n`;\n\n\nfunction formatEntryRow({ siteStr, startStr, endStr }) {\n return `\n \n ${siteStr}\n ${startStr} ${endStr}\n \n `;\n}\n\nfunction formatDayRow(\n {\n dayStr,\n lunchTotalStr,\n workTotalStr,\n scheduledStartTime,\n scheduledEndTime,\n }) {\n return `\n \n ${dayStr} ${scheduledStartTime} ${scheduledEndTime}\n ${lunchTotalStr}\n ${workTotalStr}\n \n `;\n}\n\nfunction formatTimesheetEntryDay(dayEntry) {\n const {\n entries,\n } = dayEntry;\n\n return `\n ${formatDayRow(dayEntry)}\n ${entries.map(formatEntryRow).join(' ')}\n `;\n}\n\n// TODO HOST THE SITEM8 Logo\n// eslint-disable-next-line import/prefer-default-export\nexport function HTMLTimesheet(values) {\n const {\n workerName,\n companyName,\n endDateStr,\n totalWorkTimeStr,\n timesheetEntryDays, // timesheet entries grouped by day\n printDateStr,\n imageDataURI,\n } = values;\n const entryRows = timesheetEntryDays.map(formatTimesheetEntryDay).join(' ');\n return `\n \n \n \n \n \n
\n
\n
\n
${printDateStr}
\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 ${entryRows}\n \n \n \n \n \n
\n EMPLOYEE TIMESHEET\n
company${companyName}
name${workerName}
week ending${endDateStr}
date / sitestart finishlunch takentotal hours
total${totalWorkTimeStr}
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
MANAGEREMPLOYEE
datesignaturedatesignature
\n
\n
\n \n \n `;\n}\n","import moment from 'moment';\nimport BaseModel from './BaseModel';\nimport TimesheetEntryList from './TimesheetEntryList';\nimport {\n weekOfDates,\n trimTimeStr,\n setTimeFromString,\n replaceInArray,\n areSameDay,\n uniqInArray,\n} from '../Utils';\nimport { HTMLTimesheet } from '../HelperClasses/HTMLTimesheet';\n\n\nexport default class Timesheet extends BaseModel {\n setTimesheetEntryList = (timesheetEntries) => {\n this.timesheetEntryList = new TimesheetEntryList(timesheetEntries);\n }\n\n setCompany = (company) => {\n this.company = company;\n }\n\n setWorker = (worker) => {\n this.worker = worker;\n }\n\n setWorkerShifts = (workerShifts) => {\n this.workerShifts = workerShifts;\n }\n\n setUnpaidEntries = (unpaidTimesheetEntries) => {\n this.timesheetEntryList.setUnpaidEntries(unpaidTimesheetEntries);\n }\n\n getDateDescription = () => {\n const sTime = this.mStartDateTime.format('DD MMM');\n const fTime = moment(this.mFinishDateTime).add(-1, 'days').format('DD MMM');\n return `${sTime} - ${fTime}`;\n }\n\n getTimesheetDayTableRow(mDay, entries, unpaidEntry) {\n const dateStr = mDay.format('dddd Do MMM');\n const totalStr = this.timesheetEntryList.formatTotalTimeStr(entries, unpaidEntry);\n const breakStr = unpaidEntry && unpaidEntry.UnpaidTime.slice(0, 5);\n // [ datesite, start, end, reported-total, desc, add, delete ]\n return [\n `${dateStr}`,\n breakStr,\n '',\n '',\n { value: totalStr, fontWeight: 700 },\n mDay,\n '',\n ];\n }\n\n getMyTimesheetTableRows = () => {\n const rows = this.getTableRows();\n return rows.map(r => r.slice(0, 5));\n };\n\n getTableRows = () => {\n const { siteList, unpaidTimesheetEntries } = this.timesheetEntryList;\n let rows = [];\n const daysInTimesheet = weekOfDates(this.StartDateTime, this.FinishDateTime);\n const dailyEntries = daysInTimesheet.map(\n (day) => {\n var mDay = moment(day);\n var unpaidEntry = unpaidTimesheetEntries.find(e => moment(e.DateTime).day() === mDay.day());\n const entries = this.timesheetEntryList.getEntriesByDay(mDay);\n const dayRow = this.getTimesheetDayTableRow(mDay, entries, unpaidEntry);\n const entryRows = entries.map((e) => {\n const site = siteList.findById(e.SiteId);\n return e.getTableRow(site && site.Name);\n });\n return { dayRow, entryRows };\n });\n dailyEntries.forEach((d) => {\n rows = [...rows, d.dayRow, ...d.entryRows];\n });\n return rows;\n }\n\n genTimesheetEntry = modWorkerId => ({\n TimesheetId: this.TimesheetId,\n StartDateTime: this.StartDateTime,\n FinishDateTime: this.StartDateTime,\n Travel: false,\n SiteId: -1,\n TimesheetEntryId: new Date().getTime(),\n isNew: true,\n // TODO GET RID OF THE DELETED FLAG\n deleted: false,\n ModifiedWorkerId: modWorkerId,\n Description: 'Not yet saved',\n });\n\n getNewTimesheetEntry = (startDate, modWorkerId, workStartStr,\n workEndStr, lunchStartStr, lunchEndStr) => {\n const entry = this.genTimesheetEntry(modWorkerId);\n return this.setNewTSEntryTime(entry, startDate, workStartStr,\n workEndStr, lunchStartStr, lunchEndStr);\n }\n\n setNewTSEntryTime(entry, startDate, workStartStr, workEndStr, lunchStartStr, lunchEndStr) {\n const tse = { ...entry };\n const setTimeStr = (d1, d2) => setTimeFromString(d1, d2).format('YYYY-MM-DD HH:mm:ss');\n const entries = this.timesheetEntryList.getEntriesByDay(startDate);\n if (!entries.find(t => !t.isNew)) {\n if (entries.length === 0) {\n tse.StartDateTime = setTimeStr(startDate, workStartStr);\n tse.FinishDateTime = setTimeStr(startDate, lunchStartStr);\n } else if (entries.length === 1) {\n tse.StartDateTime = setTimeStr(startDate, lunchEndStr);\n tse.FinishDateTime = setTimeStr(startDate, workEndStr);\n }\n } else {\n tse.StartDateTime = setTimeStr(startDate, '00:00:00');\n tse.FinishDateTime = setTimeStr(startDate, '00:00:00');\n }\n return tse;\n }\n\n // generates an html page - that goes into an iframe for html2canvas + jspdf to print a timesheet\n printMyself = (workerShifts) => {\n const printParams = {\n workerName: this.worker.Name,\n companyName: this.company.Name,\n endDateStr: this.mFinishDateTime.format('DD-MM-YYYY'),\n totalWorkTimeStr: this.timesheetEntryList.formatTotalTimeStr(\n this.timesheetEntryList.objects),\n timesheetEntryDays: [], // timesheet entries grouped by day\n printDateStr: moment().format(),\n imageDataURI: this.worker.Base64Image,\n };\n const tableRows = this.getTableRows();\n let index = -1;\n // just use the table rows and parse them to fit the htmlhelper funtion\n tableRows.forEach((tr) => {\n if (tr[5]._isAMomentObject) {\n index += 1;\n const matchingShift = workerShifts.find(w => moment(w.StartDateTime).day() == tr[5].day());\n printParams.timesheetEntryDays.push({\n dayStr: tr[0],\n lunchTotalStr: tr[1],\n workTotalStr: tr[4].value,\n entries: [],\n scheduledStartTime: matchingShift ? moment(matchingShift.StartDateTime).format('HH:mm') : '',\n scheduledEndTime: matchingShift ? moment(matchingShift.EndDateTime).format('HH:mm') : '',\n });\n } else {\n // if the previous entry is on the same site - then group them\n // by extending the end time rather than creating an new rowEntry\n // this way we lump lunchtime into the row rather than split up the rows\n // note the return statement!\n\n const todaysRow = printParams.timesheetEntryDays[index];\n const todaysEntries = todaysRow.entries;\n const previousEntryRow = todaysEntries[todaysEntries.length - 1];\n if (previousEntryRow && previousEntryRow.siteStr === tr[0].siteStr) {\n // eslint-disable-next-line prefer-destructuring\n previousEntryRow.endStr = tr[3];\n return;\n }\n\n const eRow = {\n siteStr: tr[0].siteStr,\n startStr: tr[2],\n endStr: tr[3],\n };\n printParams.timesheetEntryDays[index].entries.push(eRow);\n }\n });\n\n return HTMLTimesheet(printParams);\n }\n\n getFilename = () => {\n const name = this.worker.Name.replace(/[\\W_]+/g, '');\n return `${name}-${this.mFinishDateTime.format('DD-MM-YY')}`;\n }\n}\n","import BaseModelList from './BaseModelList';\nimport WorkerList from './WorkerList';\nimport Timesheet from './Timesheet';\n\nexport default class TimesheetList extends BaseModelList {\n constructor(data) {\n super(data, 'TimesheetId', Timesheet);\n }\n\n setWorkerList = (objects) => {\n this.workerList = new WorkerList(objects);\n }\n\n getSelectOptions = (includeName) => this.objects.map((t) => {\n const w = this.workerList.findById(t.WorkerId);\n return {\n text: `${includeName ? w.Name + ' ' : ''} ${t.getDateDescription()}`,\n TimesheetId: t.TimesheetId,\n };\n });\n}\n","\nexport const getapprovalCurrentTimesheet = ({ timesheets }) => timesheets.all.filter(\n t => t.TimesheetId === timesheets.approvalCurrentTimesheetId)[0];\n\nexport const getSites = state => state.sites.all;\n\nexport const getTimesheets = state => state.timesheets.all;\n\nexport const getWorkers = state => state.workers.all;\n\nexport const getCompany = state => state.me.company;\n\nexport const getApprovalsTimesheetEntries = ({ timesheets, timesheetEntries }) => (\n timesheets.approvalCurrentTimesheetId ? timesheetEntries.all.filter(\n tse => tse.TimesheetId === timesheets.approvalCurrentTimesheetId) : []);\n\nexport const getTimesheetEntries = state => state.timesheetEntries.all;\n\nexport const getUnpaidTimesheetEntries = state => state.unpaidTimesheetEntries.all;\n","import { createSelector } from 'reselect';\nimport TimesheetList from '../../Models/TimesheetList';\nimport {\n getWorkers,\n getTimesheets,\n} from './common';\n\n\nconst getters = [\n getWorkers,\n getTimesheets,\n];\n\nconst getTimesheetList = createSelector(getters,\n (workers, timesheets) => {\n const tsl = new TimesheetList(timesheets);\n tsl.setWorkerList(workers);\n return tsl;\n });\n\nexport default getTimesheetList;\n","import { createSelector } from 'reselect';\nimport Timesheet from '../../Models/Timesheet';\nimport {\n getapprovalCurrentTimesheet,\n getSites,\n getCompany,\n getWorkers,\n getApprovalsTimesheetEntries,\n getUnpaidTimesheetEntries,\n} from './common';\n\nconst getters = [\n getapprovalCurrentTimesheet,\n getSites,\n getCompany,\n getWorkers,\n getApprovalsTimesheetEntries,\n getUnpaidTimesheetEntries,\n];\n\nconst getActiveApprovalTimesheet = createSelector(getters,\n (timesheet, sites, company, workers, tsEntries, unpaidTimesheetEntries) => {\n if (!timesheet) {\n return null;\n }\n const ts = new Timesheet(timesheet);\n ts.setCompany(company);\n ts.setWorker(workers.find(w => w.WorkerId === ts.WorkerId));\n ts.setTimesheetEntryList(tsEntries);\n ts.timesheetEntryList.setSiteList(sites);\n ts.setUnpaidEntries(unpaidTimesheetEntries);\n return ts;\n });\n\nexport default getActiveApprovalTimesheet;\n","import React, { Component } from 'react';\nimport {\n getTimesheetEntries, getTimesheetNotes,\n getMyTimesheetNotes, getMyTimesheetEntries,\n getUnpaidTimesheetEntries,\n regenerateTimesheetEntries,\n getWorkerShiftsForWorkerAndRange,\n} from '../../API';\nimport {\n setApprovalTimesheet, \n setTimesheetNotes,\n editTimesheet, \n setTimesheetEntries, \n setTimesheetStatus,\n setUnpaidTimesheetEntries, \n setApprovalsWorkerShifts,\n setLoading,\n} from '../../redux/actions/AllActions';\nimport getTimesheetList from '../../redux/selectors/timesheetList';\nimport getActiveApprovalTimesheet from '../../redux/selectors/approvalCurrentTimesheet';\n\n\nclass ApprovalsForm extends Component {\n changeTimesheet = async (ts, updateEntries = false) => {\n let timesheetnotes;\n let entries;\n let workerShifts = [];\n const {\n token,\n _setTimesheetEntries,\n _setApprovalTimesheet,\n _setTimesheetNotes,\n _setUnpaidTimesheetEntries,\n _setApprovalsWorkerShifts,\n _setLoading,\n } = this.props;\n _setLoading(true);\n if (token) {\n entries = await getMyTimesheetEntries(token, ts.TimesheetId);\n timesheetnotes = await getMyTimesheetNotes(token, ts.TimesheetId);\n } else {\n entries = await getTimesheetEntries(ts.TimesheetId);\n timesheetnotes = await getTimesheetNotes(ts.TimesheetId);\n }\n const unpaidTimesheetEntries = await getUnpaidTimesheetEntries(ts.TimesheetId, updateEntries);\n const wdts = await getWorkerShiftsForWorkerAndRange(ts.WorkerId, ts.StartDateTime, ts.FinishDateTime);\n _setTimesheetEntries(entries);\n _setUnpaidTimesheetEntries(unpaidTimesheetEntries);\n _setApprovalTimesheet(ts.TimesheetId);\n _setTimesheetNotes(timesheetnotes);\n _setApprovalsWorkerShifts(wdts);\n _setLoading(false);\n }\n\n onNextClick = () => {\n const { timesheetList } = this.props;\n let index = this.getIndex();\n index += 1;\n if (index === (timesheetList.objects.length)) {\n this.changeTimesheet(timesheetList.objects[0]);\n } else {\n this.changeTimesheet(timesheetList.objects[index]);\n }\n }\n\n onBackClick = () => {\n const { timesheetList } = this.props;\n let index = this.getIndex();\n index -= 1;\n if (index === -1) {\n this.changeTimesheet(timesheetList.objects[timesheetList.objects.length - 1]);\n } else {\n this.changeTimesheet(timesheetList.objects[index]);\n }\n }\n\n onSelectChange = async ({ target }) => {\n const ts = this.props.timesheetList.findById(parseInt(target.value, 0));\n this.changeTimesheet(ts);\n }\n\n handleSwitchClick = () => {\n const { timesheet } = this.props;\n const Status = timesheet.Status === 0 ? 1 : 0;\n this.props._setTimesheetStatus({ Id: timesheet.TimesheetId, Status });\n this.props._setApprovalTimesheet(timesheet.TimesheetId);\n }\n\n handleRegenerateClick = async () => {\n const { timesheet } = this.props;\n // Call the regenerate endpoint\n await regenerateTimesheetEntries(timesheet.TimesheetId);\n this.changeTimesheet(timesheet, true);\n }\n\n getIndex = () => {\n const {\n timesheet, timesheetList,\n } = this.props;\n return timesheet && timesheetList.findIndex(timesheet.TimesheetId);\n }\n\n render() {\n return (
);\n }\n}\n\nexport const mapStateToProps = (state) => {\n const {\n workers, me,\n } = state;\n const timesheetList = getTimesheetList(state);\n const timesheet = getActiveApprovalTimesheet(state);\n const worker = workers.all.find(w => timesheet && (w.WorkerId === timesheet.WorkerId));\n\n return {\n company: me.company,\n worker,\n timesheetList,\n timesheet,\n workerShifts: state.timesheets.workerShifts,\n workers: workers.all,\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setApprovalTimesheet: x => dispatch(setApprovalTimesheet(x)),\n _editTimesheet: x => dispatch(editTimesheet(x)),\n _setTimesheetEntries: x => dispatch(setTimesheetEntries(x)),\n _setTimesheetNotes: x => dispatch(setTimesheetNotes(x)),\n _setTimesheetStatus: x => dispatch(setTimesheetStatus(x)),\n _setUnpaidTimesheetEntries: x => dispatch(setUnpaidTimesheetEntries(x)),\n _setApprovalsWorkerShifts: x => dispatch(setApprovalsWorkerShifts(x)),\n _setLoading: x => dispatch(setLoading(x)),\n});\n\nexport default ApprovalsForm;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport {\n Grid, Typography, Button,\n} from '@material-ui/core';\nimport Switch from '@material-ui/core/Switch';\nimport { SelectInput } from '../FormComponents';\nimport ApprovalsForm, { mapDispatchToProps, mapStateToProps } from './ApprovalsForm';\n\n\nclass ApprovalsFormMobile extends ApprovalsForm {\n render() {\n const {\n timesheet, timesheetList,\n } = this.props;\n\n const index = this.getIndex();\n const tsOptions = timesheetList.getSelectOptions();\n\n return (\n \n \n
\n \n
\n
\n \n \n Back\n \n \n Next\n \n \n \n \n Sites\n \n \n \n { timesheet && timesheet.timesheetEntryList.siteDescription }\n \n \n \n \n \n Total hours\n \n \n {`${timesheet && timesheet.timesheetEntryList.formatTotalTimeStr(timesheet.timesheetEntryList.objects)}`}\n \n \n \n \n Status\n \n {timesheet && (\n \n \n \n ) }\n\n \n \n { timesheet && (timesheet.Status === 1 ? 'Approved' : 'Draft ')}\n { !timesheet && 'No available timesheets' }\n \n \n \n
\n );\n }\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ApprovalsFormMobile));\n","import React, { Component } from 'react';\nimport html2canvas from 'html2canvas';\nimport jspdf from 'jspdf';\nimport Button from '@material-ui/core/Button';\n\nexport default class PrintTimesheetButton extends Component {\n handlePrintClick = () => {\n const { timesheet, workerShifts } = this.props;\n // prep the data to format the html\n const htmlToPrint = timesheet.printMyself(workerShifts);\n /* eslint-disable */\n const iframe = document.createElement('iframe');\n document.body.appendChild(iframe);\n setTimeout(function(){\n iframe.contentWindow.document.write(htmlToPrint)\n var iframedoc=iframe.contentDocument||iframe.contentWindow.document;\n html2canvas(iframedoc.body).then(canvas => {\n const imgDataUrl = canvas.toDataURL('image/png');\n const pdf = new jspdf();\n pdf.addImage(imgDataUrl, 'PNG', 0, 0);\n pdf.save(timesheet.getFilename());\n });\n });\n /* eslint-enable */\n }\n\n\n render() {\n const { timesheet } = this.props;\n return (\n \n Print\n \n );\n }\n}\n","/* eslint-disable import/prefer-default-export */\nimport React from 'react';\nimport AccountCircle from '@material-ui/icons/AccountCircle';\nimport {\n ListItemAvatar,\n Avatar,\n} from '@material-ui/core';\n\nexport function LargeAvatar({ worker }) {\n if (!(worker && worker.Base64Image)) {\n return (\n \n );\n }\n return \"user-img\";\n}\n\nexport function ListAvatar({ worker }) {\n const src = worker.Base64Image || null;\n return (\n \n \n \n );\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport {\n Grid, Typography, Button, Hidden, Select, MenuItem, OutlinedInput\n} from '@material-ui/core';\nimport { SelectInput } from '../FormComponents';\nimport ApprovalsForm, { mapDispatchToProps, mapStateToProps } from './ApprovalsForm';\nimport PrintTimesheetButton from './PrintTimesheetButton';\nimport { LargeAvatar } from '../Common/UserAvatars';\n\nclass ApprovalsFormLarge extends ApprovalsForm {\n renderUserImage(worker) {\n return (\n \n \n
\n {}\n
\n
\n
\n );\n }\n\n onWorkerSelectChange = async ({ target }) => {\n this.props.onWorkerSelectChange(target.value);\n }\n\n render() {\n const {\n timesheetList, timesheet, worker, workerShifts, workers, timesheetWorkerIds,\n selectedWorker,\n } = this.props;\n const index = this.getIndex();\n const workersForList = workers.filter(w => timesheetWorkerIds.includes(w.WorkerId));\n return (\n \n \n
\n }\n autoWidth\n >\n { workersForList.map(\n x => \n { x.Name }\n )}\n \n
\n
\n \n
\n
\n \n \n \n Back\n \n \n \n \n Next\n \n \n \n \n { timesheet && timesheet.Status === 1 ? 'Unapprove' : 'Approve '}\n \n \n \n \n { 'Approve All'}\n \n \n \n \n Regenerate\n \n \n \n
\n { timesheet && timesheet.timesheetEntryList.totalTimeStr && (\n \n {`${timesheet.timesheetEntryList.totalTimeStr}hrs`}\n \n ) }\n
\n
\n \n \n \n
\n { this.renderUserImage(worker) }\n
\n );\n }\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ApprovalsFormLarge));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n Grid, TextField,\n} from '@material-ui/core';\nimport Fab from '@material-ui/core/Fab';\nimport AddIcon from '@material-ui/icons/Add';\nimport {\n addTimesheetNote,\n} from '../../redux/actions/AllActions';\n\nconst styles = theme => ({\n textField: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n },\n button: {\n margin: theme.spacing.unit,\n marginTop: theme.spacing.unit * 3,\n },\n addNote: {\n margin: theme.spacing.unit,\n marginTop: theme.spacing.unit * 3,\n },\n});\n\nclass TimesheetNotesForm extends Component {\n state = {\n noteText: '',\n }\n\n onTextChange = ({ target }) => {\n if (target.value.length <= 160) {\n this.setState({\n noteText: target.value,\n });\n }\n }\n\n onSendClick = () => {\n const { timesheet, token, userId, user } = this.props;\n const timesheetNote = {\n Details: this.state.noteText,\n TimesheetId: timesheet.TimesheetId,\n // TODO when we have user - add the user ID here.\n WorkerId: userId,\n };\n if(user.IsSuperAdministrator) {\n alert(' no super admins can make these ok ');\n return;\n }\n this.props.addTimesheetNote(timesheetNote, token);\n this.setState({\n noteText: '',\n });\n }\n\n render() {\n const { classes, timesheet } = this.props;\n const { noteText } = this.state;\n return (\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nconst mapStateToProps = state => {\n return { \n timesheet: state.timesheets.all.find(\n ts => ts.TimesheetId === state.timesheets.approvalCurrentTimesheetId),\n userId: state.me.me.WorkerId,\n user: state.me.me,\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n addTimesheetNote: (x, t) => dispatch(addTimesheetNote(x, t)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(TimesheetNotesForm)));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport moment from 'moment';\nimport {\n List, ListItem, ListItemText, Grid, Typography,\n} from '@material-ui/core';\n\n\nclass TimesheetNotesList extends Component {\n renderNote = (note, i) => {\n const { Details, WorkerId, CreationDateTime } = note;\n let name = 'Super Admin User';\n const worker = this.props.workers.find(w => w.WorkerId === WorkerId);\n if (worker) {\n name = worker.Name;\n }\n const dt = moment(CreationDateTime).format('Do MMM HH:mm');\n const style = note.Priority > 0 ? { color: 'red' } : {};\n return (\n \n {Details}}\n secondary={`${dt} - ${name}`}\n />\n \n );\n }\n\n render() {\n const notes = this.props.timesheetNotes.map(\n this.renderNote,\n );\n return (\n \n { notes }\n \n );\n }\n}\n\nconst mapStateToProps = state => ({\n timesheetNotes: state.timesheetNotes.all,\n workers: state.workers.all,\n});\n\nexport default withRouter(connect(mapStateToProps)(TimesheetNotesList));\n","import React, { Component } from 'react';\nimport moment from 'moment';\nimport {\n editTimesheetEntry,\n addTimesheetEntry,\n deleteTimesheetEntry,\n} from '../../redux/actions/AllActions';\nimport {\n assign,\n dateRangeOverlaps,\n uniqInArray,\n} from '../../Utils';\n\n\nclass TimesheetEntryEditor extends Component {\n handleInputChange = ({ name, value, checked }, tsEntry) => {\n let val = value;\n if (name === 'Travel') {\n val = !checked;\n }\n const changes = { [name]: val, edited: true };\n // eslint-disable-next-line no-underscore-dangle\n this.props._editTimesheetEntry(assign(tsEntry, changes));\n }\n\n\n onDeleteClick = (tse) => {\n // eslint-disable-next-line no-alert\n if (window.confirm('Are you sure?')) {\n this.props._deleteTimesheetEntry(assign(tse, { isNew: false }));\n setTimeout(this.onSaveClick, 200);\n }\n }\n\n handleAddPress = (dayStr) => {\n const entry = this.createNewTimesheetEntry(dayStr);\n return entry;\n }\n\n handleChange = (args) => {\n const { timesheetEntry } = this.props;\n /* handle the time input change */\n if (args.target.name.includes('DateTime')) {\n const parsedArgs = assign(args.target, {\n value: moment(args.target.value).format('YYYY-MM-DD HH:mm:ss'),\n });\n return this.handleInputChange(\n parsedArgs, timesheetEntry);\n }\n return this.handleInputChange(args.target, timesheetEntry);\n }\n\n isValid = (entry) => {\n const {\n deleted,\n StartDateTime,\n FinishDateTime,\n TimesheetEntryId,\n } = entry;\n const { timesheetEntries } = this.props;\n // TODO remove deleted\n if (deleted) {\n return true;\n }\n if (moment(FinishDateTime).isBefore(moment(StartDateTime)) || !(StartDateTime && FinishDateTime)) {\n return false;\n }\n const overlapsOtherEntry = !!timesheetEntries.filter(\n tse => !tse.deleted && tse.TimesheetEntryId !== TimesheetEntryId).find(\n tse => dateRangeOverlaps(\n StartDateTime, FinishDateTime, tse.StartDateTime, tse.FinishDateTime));\n return !overlapsOtherEntry;\n }\n\n createNewTimesheetEntry = (startDateStr) => {\n const {\n timesheet,\n me,\n company,\n _addTimesheetEntry,\n } = this.props;\n const newEntry = timesheet.getNewTimesheetEntry(\n moment(startDateStr),\n me.WorkerId,\n '07:00',\n '19:00',\n '12:00',\n '12:30'\n );\n _addTimesheetEntry(newEntry);\n return newEntry;\n \n }\n\n render() {\n return (\n
\n { this.props.children }\n
\n );\n }\n}\n\nexport const mapStateToProps = (state, ownProps) => {\n const {\n sites, me,\n } = state;\n const ts = ownProps.timesheet;\n // get all the timesheetentries for the timesheet and for the day;\n const entries = ts ? ts.timesheetEntryList.getEntriesByDay(ownProps.startDate) : [];\n const {\n WorkingDayDefaultStart,\n DefaultLunchEnd,\n DefaultLunchStart,\n WorkingDayDefaultFinish,\n } = me.company;\n const siteNames = uniqInArray(entries.map((e) => {\n const site = sites.all.find(s => s.SiteId === e.SiteId);\n return site ? site.Name : 'Unknown';\n })).join(' ,');\n return {\n timesheet: ts,\n sites: sites.all,\n timesheetEntries: entries,\n me: me.me,\n WorkingDayDefaultStart,\n DefaultLunchEnd,\n DefaultLunchStart,\n WorkingDayDefaultFinish,\n company: me.company,\n siteNames,\n };\n};\n\nexport const mapDispatchToProps = (dispatch, ownProps) => ({\n _addTimesheetEntry: x => dispatch(addTimesheetEntry(x)),\n _deleteTimesheetEntry: x => dispatch(deleteTimesheetEntry(x)),\n _editTimesheetEntry: x => dispatch(editTimesheetEntry(x)),\n});\n\nexport default TimesheetEntryEditor;\n","/* eslint-disable */\nexport default (theme) => ({\n container: {\n display: 'flex',\n padding: '0px 10px 10px 10px',\n flex: 1,\n },\n formControl: {\n paddingTop: '5px',\n minWidth: 180,\n /*marginLeft: theme.spacing.unit,\n\n flex: 1,*/\n },\n selectEmpty: {\n marginTop: theme.spacing.unit * 2,\n },\n switchLabel: {\n color: \"rgba(0, 0, 0, 0.54)\",\n },\n durationInputWrapper: {\n flex: 1,\n paddingTop: '5px',\n },\n durationInput: {\n display: 'inline',\n width: '80px',\n textAlign: 'right',\n paddingRight: '30px',\n },\n durationInputFormControl: {\n marginTop: '13px',\n },\n durationInputLabel: {\n transform: 'translate(0px, 5px) scale(0.8)'\n },\n durationInputLabelInline: {\n transform: 'translate(48px, 10px) scale(0.8)'\n },\n textField: {\n minWidth: '250px',\n }\n});\n","import React, { Component } from 'react';\nimport moment from 'moment';\nimport {\n Grid, Switch, FormControlLabel, TextField, InputLabel, Select,\n MenuItem, FormControl, FormHelperText, Input,\n} from '@material-ui/core';\nimport Fab from '@material-ui/core/Fab';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { withStyles } from '@material-ui/core/styles';\nimport formStyles from '../Common/FormStyles';\n\n\nconst styles = {\n padTop: { paddingTop: '30px' },\n};\n\n\nclass TimesheetForm extends Component {\n onTimeChange = ({ target }) => {\n const { value, name } = target;\n const tse = this.props.timesheetEntry;\n const tsTime = moment(tse[name]);\n const hrs = parseInt(value.split(':')[0], 0);\n const mins = parseInt(value.split(':')[1], 0);\n tsTime.hours(hrs);\n tsTime.minutes(mins);\n const changeEvt = {\n target:\n { name, value: tsTime.toDate() },\n };\n this.props.onInputChange(\n changeEvt, tse,\n );\n }\n\n handleDelete = () => {\n const { onDeleteClick, timesheetEntry } = this.props;\n onDeleteClick(timesheetEntry);\n }\n\n render() {\n const {\n onInputChange, timesheetEntry, sites, onClosePress,\n classes, theme,\n } = this.props;\n const {\n mStartDateTime, mFinishDateTime, Travel, SiteId, Description,\n } = timesheetEntry;\n const sitesPlus = [{ SiteId: -1, Name: 'Unknown' }, ...sites];\n const startTimeStr = mStartDateTime.format('HH:mm');\n const finishTimeStr = mFinishDateTime.format('HH:mm');\n const warningStyle = { color: theme.palette.warning.main };\n const siteWarningStyle = !SiteId || SiteId === -1 ? warningStyle : {};\n return (\n \n \n \n \n \n \n \n \n \n )}\n label={Travel ? 'Travel To' : 'On Site'}\n />\n \n \n \n Site\n \n )}\n variant=\"outlined\"\n >\n { sitesPlus.map((s, i) => (\n \n { s.Name }\n \n )) }\n \n \n \n \n {Description}\n \n \n
\n \n \n \n
\n
\n
\n );\n }\n}\n\nexport default withStyles(formStyles, { withTheme: true })(TimesheetForm);\n","import React, { Component } from 'react';\nimport {\n Modal,\n Grid,\n Paper,\n Button,\n Typography,\n} from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport TimesheetForm from './TimesheetForm';\nimport TimesheetEntryEditor, { mapStateToProps, mapDispatchToProps } from './TimesheetEntryEditor';\nimport { assign } from '../../Utils';\n\nexport class TimesheetFormModal extends TimesheetEntryEditor {\n state = {\n origTimesheetEntry: null,\n }\n\n componentDidMount() {\n this.setState({ origTimesheetEntry: { ...this.props.timesheetEntry } });\n }\n\n onSaveClick = () => {\n this.setState({ origTimesheetEntry: null });\n this.props.onClose();\n this.props.onSaveClick();\n }\n\n onDeleteClick = (tse) => {\n // eslint-disable-next-line no-alert\n if (window.confirm('Are you sure?')) {\n this.props._deleteTimesheetEntry(assign(tse, { isNew: false }));\n setTimeout(this.onSaveClick, 200);\n this.props.onClose();\n }\n }\n\n handleCancelPress = (e, action) => {\n // if the entry has changed put it back\n const { origTimesheetEntry } = this.state;\n const { _editTimesheetEntry, timesheetEntryId, timesheetEntries } = this.props;\n const timesheetEntry = timesheetEntries.find(\n t => t.TimesheetEntryId === timesheetEntryId);\n if (JSON.stringify(origTimesheetEntry) !== JSON.stringify(timesheetEntry)) {\n _editTimesheetEntry(origTimesheetEntry);\n }\n this.setState({ origTimesheetEntry: null });\n if(origTimesheetEntry.isNew) {\n this.props._deleteTimesheetEntry(timesheetEntry);\n }\n this.props.onClose();\n }\n\n handleClose = (tse, action) => {\n const { onClose } = this.props;\n if (action === 'delete') {\n this.onDeleteClick();\n } else {\n this.setState({ origTimesheetEntry: null });\n onClose();\n }\n }\n\n render() {\n const {\n startDate, timesheetEntry,\n } = this.props;\n const isValid = this.isValid(timesheetEntry);\n return (\n \n \n \n \n \n \n { moment(startDate).format('dddd Do MMM') }\n \n \n \n \n \n \n \n \n cancel\n \n \n \n \n save\n \n \n \n\n \n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TimesheetFormModal);\n","import React from 'react';\nimport logo from '../../Images/logo-small.png';\n\n\nexport default function ({ width }) {\n return \"SiteM8;\n}\n","import React from 'react';\nimport {\n Grid,\n Typography,\n} from '@material-ui/core';\nimport SiteM8Logo from '../Common/SiteM8Logo';\n\n\nexport default function TimesheetTableHeader({ timesheet, worker }) {\n const totalTimeStr = timesheet.timesheetEntryList.getTotalTimeStr();\n const dateDesc = timesheet.getDateDescription();\n return (\n \n \n \n \n \n \n \n { worker.Name }\n \n \n \n \n { `${dateDesc}`}\n \n \n \n \n { `${totalTimeStr} hrs`}\n \n \n \n \n );\n}\n","/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport MUIDataTable from 'mui-datatables';\nimport {\n Tooltip,\n Button,\n Typography,\n Modal,\n TextField,\n Select,\n MenuItem,\n} from '@material-ui/core';\nimport LocationIcon from '@material-ui/icons/LocationOn';\nimport PersonIcon from '@material-ui/icons/Person';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport moment from 'moment';\nimport {\n editTimesheetEntry,\n addTimesheetEntry,\n deleteTimesheetEntry,\n editUnpaidTimesheetEntry,\n setUnpaidTimesheetEntries,\n} from '../../redux/actions/AllActions';\nimport TimesheetEntryEditor from './TimesheetEntryEditor';\n// eslint-disable-next-line import/no-named-as-default\nimport TimesheetFormModal from './TimesheetFormModal';\nimport TimesheetTableHeader from './TimesheetTableHeader';\nimport { \n getUnpaidTimesheetEntries,\n updateUnpaidTimesheetEntry,\n} from '../../API';\nimport EditIcon from '@material-ui/icons/Edit';\n\n\nconst tableStyle = {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n minHeight: '600px',\n};\n\nfunction renderSiteCell({\n siteStr, Description, ModifiedWorkerId, iconColor,\n}, tableMeta, updateValue) {\n if (!siteStr) {\n return ;\n }\n const iconProps = { style: { color: iconColor, opacity: 0.5 }, fontSize: 'small' };\n const icon = ModifiedWorkerId ? : ;\n return (\n \n
\n { icon }\n {siteStr}\n \n
\n
\n );\n}\n\n\n\nfunction renderWorkTimes(setting) {\n return setting && (\n
\n {`${moment(setting.StartDateTime).format('HH:mm')} - ${moment(setting.EndDateTime).format('HH:mm')}`}\n
\n );\n}\n\nfunction renderUnpaidTime(value, tableMeta, openBreakTimeEditor) {\n return value ? (\n
openBreakTimeEditor(tableMeta.rowData[5])}>\n {value}\n \n
\n ) : '';\n}\n\nfunction getCorrespondingWorkerShift(dayString, workerShifts) {\n\n var daynum = moment().day(dayString.split(' ')[0]).day();\n var setting = workerShifts.find(wt => moment(wt.StartDateTime).day() == daynum);\n return setting;\n\n}\n\nfunction renderDateSiteCell(value, tableMeta, updateValue, workerShifts) {\n const setting = !value.siteStr && getCorrespondingWorkerShift(value, workerShifts);\n return value.siteStr ? renderSiteCell(value) : (
{value}{renderWorkTimes(setting)}
);\n}\n\n\nexport function getLabels(onAddClick, workerShifts, openBreakTimeEditor) {\n return [\n {\n name: 'date / site',\n options: {\n filter: false,\n customBodyRender: (a, b, c) => workerShifts && renderDateSiteCell(a, b, c, workerShifts),\n },\n },\n {\n name: 'Lunch',\n options: {\n customBodyRender: (value, tableMeta, updateValue) => {\n return (value && renderUnpaidTime(value, tableMeta, openBreakTimeEditor));\n },\n },\n },\n {\n name: 'Start',\n options: {\n customBodyRender: (value, tableMeta, updateValue) => (\n {value}\n ),\n },\n\n },\n {\n name: 'Finish',\n options: {\n customBodyRender: (value, tableMeta, updateValue) => (\n \n {value}\n
\n ),\n },\n },\n {\n name: 'Hours',\n options: {\n customBodyRender: ({ value, fontWeight }, tableMeta, updateValue) => (\n {value}\n ),\n },\n },\n {\n name: 'add row',\n options: {\n customBodyRender: mDay => mDay && (\n onAddClick(mDay)}\n color=\"primary\"\n >\n Add Row\n \n ),\n },\n },\n {\n name: 'data',\n options: {\n display: 'excluded',\n },\n },\n ];\n}\n\nexport function getOptions(toolbar, onRowClick, timesheet, worker) {\n return {\n filterType: 'multiselect',\n selectableRows: false,\n rowsPerPageOptions: [1000],\n rowsPerPage: 1000,\n fixedHeader: false,\n filter: false,\n search: false,\n print: false,\n viewColumns: false,\n download: false,\n customToolbar: () => ({toolbar}),\n onRowClick,\n };\n}\n\nexport class TimesheetTableClass extends TimesheetEntryEditor {\n state = {\n timesheetEntryEditingId: null,\n showWorkTimePopup: false,\n unpaidHours: undefined,\n unpaidMinutes: undefined,\n editingUnpaidTimesheetEntry: null,\n }\n\n editField() {\n\n }\n\n handleUnpaidTimeEntrySaveClick = async () => {\n const { unpaidHours, unpaidMinutes, editingUnpaidTimesheetEntry } = this.state;\n const { _setUnpaidTimesheetEntries } = this.props;\n const minStr = unpaidMinutes > 10 ? unpaidMinutes : `0${unpaidMinutes || 0}`;\n const hourStr = unpaidHours > 10 ? unpaidHours : `0${unpaidHours || 0}`;\n const newEntry = { ...editingUnpaidTimesheetEntry, UnpaidTime: `${hourStr}:${minStr}` };\n this.props._editUnpaidTimesheetEntry(newEntry);\n this.setState({ editingUnpaidTimesheetEntry: null, unpaidHours: undefined, unpaidMinutes: undefined });\n updateUnpaidTimesheetEntry(newEntry).then(\n data => getUnpaidTimesheetEntries(newEntry.TimesheetId).then(\n data => _setUnpaidTimesheetEntries(data)));\n }\n\n handleOpenUnpaidTimeEditor = (dt) => {\n this.setState({\n editingUnpaidTimesheetEntry: this.props.unpaidTimesheetEntries.find(d => moment(d.DateTime).day() === dt.day())\n });\n }\n\n addRow = (mStartDate) => {\n const entry = this.handleAddPress(mStartDate);\n setTimeout(() => this.setState({ timesheetEntryEditingId: entry.TimesheetEntryId }));\n }\n\n handleCloseModal = (tse) => {\n this.setState({ timesheetEntryEditingId: null });\n }\n\n handleRowClick = (rowData) => {\n this.setState({ timesheetEntryEditingId: rowData[6].TimesheetEntryId || null });\n }\n\n getOptions = () => {\n const { timesheet, worker } = this.props;\n return getOptions('Click a row to edit', this.handleRowClick, timesheet, worker);\n }\n\n getLabels = () => getLabels(this.addRow, this.props.workerShifts, this.handleOpenUnpaidTimeEditor)\n\n render() {\n const { timesheetEntryEditingId, showWorkTimePopup } = this.state;\n const {\n rows, timesheet, worker, style, workDayTimeSettings,\n } = this.props;\n const timesheetEntry = timesheet.timesheetEntryList.findById(timesheetEntryEditingId);\n return (\n
\n { timesheetEntry\n && (\n \n )\n }\n this.setState({ editingUnpaidTimesheetEntry: false })}\n disablePortal\n disableEnforceFocus\n disableAutoFocus\n aria-labelledby=\"simple-modal-title\"\n aria-describedby=\"simple-modal-description\"\n style={modalStyle}\n >\n
\n
\n this.setState({ unpaidHours: evt.target.value <= 23 ? evt.target.value : 23 })}\n />\n this.setState({ unpaidMinutes: evt.target.value <= 59 ? evt.target.value : 59 })}\n />\n
\n
\n \n
\n
\n \n
\n }\n data={rows}\n columns={this.getLabels()}\n options={this.getOptions()}\n />\n
\n
\n\n );\n }\n}\n\n\nconst mapStateToProps = (state, ownProps) => {\n const {\n me,\n workers,\n unpaidTimesheetEntries,\n } = state;\n const worker = workers.all.find(w => w.WorkerId === ownProps.timesheet.WorkerId);\n const workerShifts = state.timesheets.workerShifts;\n ownProps.timesheet.setWorkerShifts(workerShifts);\n return {\n me: me.me,\n company: me.company,\n worker,\n style: tableStyle,\n unpaidTimesheetEntries: unpaidTimesheetEntries.all,\n rows: ownProps.timesheet.getTableRows(unpaidTimesheetEntries.all),\n timesheetId: ownProps.timesheet.TimesheetId,\n workerShifts,\n };\n};\n\nconst modalStyle = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n};\n\nconst innerModal = { \n backgroundColor: '#fff',\n border: '2px black',\n padding: '22px',\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n _addTimesheetEntry: x => dispatch(addTimesheetEntry(x)),\n _deleteTimesheetEntry: x => dispatch(deleteTimesheetEntry(x)),\n _editTimesheetEntry: x => dispatch(editTimesheetEntry(x)),\n _editUnpaidTimesheetEntry: x => dispatch(editUnpaidTimesheetEntry(x)),\n _setUnpaidTimesheetEntries: x => dispatch(setUnpaidTimesheetEntries(x)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles({}, { withTheme: true })(TimesheetTableClass)));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport moment from 'moment';\nimport {\n Grid, Typography, Button,\n ExpansionPanelDetails, ExpansionPanelSummary, ExpansionPanel,\n Hidden,\n} from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport Fab from '@material-ui/core/Fab';\nimport AddIcon from '@material-ui/icons/Add';\nimport WarningIcon from '@material-ui/icons/WarningRounded';\n\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport TimesheetForm from './TimesheetForm';\nimport {\n removeLeadingZero, assign,\n} from '../../Utils';\nimport TimesheetEntryEditor,\n{ mapDispatchToProps } from './TimesheetEntryEditor';\n\n\nclass TimesheetPanel extends TimesheetEntryEditor {\n handleClosePress = (timeSheetEntry) => {\n if (window.confirm('Are you sure?')) {\n this.props._deleteTimesheetEntry(timeSheetEntry);\n }\n }\n\n handleChange = (args, tse) => {\n /* handle the time input change */\n if (args.target.name.includes('DateTime')) {\n const parsedArgs = assign(args.target, {\n value: moment(args.target.value).format('YYYY-MM-DD HH:mm:ss'),\n });\n return this.handleInputChange(\n parsedArgs, tse);\n }\n return this.handleInputChange(args.target, tse);\n }\n\n addRow = () => {\n this.handleAddPress(this.props.startDate);\n }\n\n render() {\n const {\n sites, timesheetEntries, theme,\n siteNames, index, timesheet, startDate,\n } = this.props;\n const dateStr = moment(startDate).format('ddd Do MMM');\n // TODO DO AWAY WITH THE DELETED FLAG\n const notDeleted = timesheetEntries.filter(t => !t.deleted);\n \n const totalTimeStr = timesheet.timesheetEntryList.formatTotalTimeStr(notDeleted);\n\n const warning = !!notDeleted.find(t => !t.SiteId || t.SiteId === -1);\n const warnStyle = { opacity: warning ? 1 : 0, color: theme.palette.warning.main };\n const forms = notDeleted.map(\n (tse, i) => (\n this.handleChange(evt, tse)}\n onClosePress={() => this.handleClosePress(tse)}\n onDeleteClick={this.onDeleteClick}\n timesheetEntry={tse}\n isValid={this.isValid(tse)}\n key={i}\n sites={sites}\n />\n ),\n );\n\n const canSave = !notDeleted.find(\n t => !this.isValid(t),\n ) && timesheetEntries.find(\n t => t.edited || t.deleted || t.isNew,\n );\n\n let startTime = '';\n let endTime = '';\n let breakTime = '';\n\n if (notDeleted.length) {\n startTime = removeLeadingZero(timesheet.timesheetEntryList.formatStartTimeStr(notDeleted));\n endTime = removeLeadingZero(timesheet.timesheetEntryList.formatEndTimeStr(notDeleted));\n breakTime = timesheet.timesheetEntryList.formatTotalBreakStr(notDeleted);\n }\n\n return (\n \n } className=\"\">\n \n \n
\n { removeLeadingZero(dateStr) }\n
\n
\n \n { totalTimeStr === '0' ? '' : totalTimeStr }\n \n
\n \n
\n
\n
\n \n \n \n {startTime && endTime && { `${startTime} to ${endTime}`}}\n \n \n \n \n { siteNames }\n \n \n \n \n \n { breakTime && Breaks: { breakTime } }\n \n \n \n \n
\n
\n \n \n \n { forms }\n \n \n \n \n Save\n \n \n \n \n
\n \n \n \n
\n
\n
\n
\n
\n
\n );\n }\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction mapStateToProps(state, ownProps) {\n return { sites: state.sites.all, me: state.me.me, company: state.me.company };\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles({}, { withTheme: true })(TimesheetPanel)));\n","import React from 'react';\nimport TimeSheetPanel from './TimesheetPanel';\nimport { weekOfDates } from '../../Utils';\n\n\nexport default function TimesheetPanelList({ timesheet, handleSaveClick }) {\n if (!timesheet) {\n return null;\n }\n const week = weekOfDates(timesheet.StartDateTime, timesheet.FinishDateTime);\n const panels = week.map(\n (dt, i) => (\n \n ),\n );\n return (\n
\n { panels }\n
\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport moment from 'moment';\nimport { getRawData } from '../../API';\nimport momenttz from 'moment-timezone';\n\nexport function makeBatteryChargeFromVoltage(rawbatt) {\n const voltage = parseInt(rawbatt) / 1000; \n if (voltage > 4.15) {\n return 100;\n } else if (voltage > 3.8) {\n return (55 + (voltage - 3.8) * 128.571);\n } else if(voltage > 3.65) {\n return 5 + (voltage - 3.65) * 333.333;\n } else if (voltage > 3.5) {\n return (voltage - 3.5) * 33.333;\n }\n return 0;\n}\n\nconst eventNames = {\n 0: 'Reserved1',\n 1: 'Reserved2',\n 2: 'AutoReport',\n 3: 'Button',\n 4: 'Lowbatt',\n 5: 'BatteryPowerOFF',\n 6: 'ChargeStart',\n 7: 'ChargeFull',\n 8: 'PowerOnPowerSavingMode',\n 9: 'PowerOffPowerSavingMode',\n}\n\nfunction DeviceLog(props) {\n const { log } = props;\n if(log.includes('R') || log.includes('timestamp')) {\n return
{log}
\n };\n const parts = log.split(';');\n\n const [indx, mode, imei, timestamp,\n gps, wifi, cell, eventid, data_combo,\n battery, signal, sequence ] = parts;\n const [satnum, lat, lon ] = gps.split(',');\n const time = momenttz.utc(`20${timestamp}`, 'YYYYMMDDHHmmSS').local().format('MMM-DD HH:mm');\n const batpct = makeBatteryChargeFromVoltage(battery);\n return
\n
\n { log }\n
\n
\n {time} mode:{mode}, {batpct.toFixed(0)}%, sats: {satnum}, sig: {signal}, pos:[ {lat},{lon} ], evt: {eventNames[eventid]}\n
\n
\n}\n\n\nexport default function({ workerId, startDate, endDate }) {\n\n const [data, setData] = useState([]);\n\n useEffect(() => {\n const a = moment(startDate).format('yyyy-MM-DD HH:MM:SS');\n const b = moment(endDate).format('yyyy-MM-DD HH:MM:SS');\n getRawData(workerId, a, b).then(logs => setData(logs));\n }, [workerId]);\n\n return
\n {\n data.map((t, i) => )\n }\n\n
\n\n}","import React, { useState } from 'react';\nimport moment from 'moment';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport { \n Timeline,\n TimelineItem,\n TimelineSeparator,\n TimelineConnector,\n TimelineContent,\n TimelineOppositeContent,\n TimelineDot,\n Autocomplete,\n} from '@material-ui/lab';\n\nimport {\n Typography,\n Paper,\n TextField,\n Grid,\n FormControl,\n} from '@material-ui/core';\nimport { getEventItemsByWorkerAndDate, getDeviceEventItemsByWorkerAndDate } from '../../API';\nimport RawDeviceLogs from './RawDeviceLogs';\n\n//sosreport\nimport WarningIcon from '@material-ui/icons/Warning';\n//lowbattery\nimport Battery20Icon from '@material-ui/icons/Battery20';\n//batterypoweroff\nimport BatteryAlertIcon from '@material-ui/icons/BatteryAlert';\n//CHARGINGSTART\nimport BatteryCharging20Icon from '@material-ui/icons/BatteryCharging20';\n//CHARGINGFULL\nimport BatteryChargingFullIcon from '@material-ui/icons/BatteryChargingFull';\n//POWERONUNDERPOWERSAVINGMODE\nimport WbSunnyIcon from '@material-ui/icons/WbSunny';\n//POWEROffUNDERPOWERSAVINGMODE\nimport NightsStayIcon from '@material-ui/icons/NightsStay';\n//offsite\n//import CommuteIcon from '@material-ui/icons/Commute';\n//import DepartureBoardIcon from '@material-ui/icons/DepartureBoard';\nimport FlightTakeoffIcon from '@material-ui/icons/FlightTakeoff';\n//import TrainIcon from '@material-ui/icons/Train';\nimport LocationOffIcon from '@material-ui/icons/LocationOff';\n//onsite\n//import LocationOnIcon from '@material-ui/icons/LocationOn';\nimport BusinessIcon from '@material-ui/icons/Business';\nimport ThumbDownIcon from '@material-ui/icons/ThumbDown';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport TuneIcon from '@material-ui/icons/Tune';\n//import LocationCityIcon from '@material-ui/icons/LocationCity';\n//import BuildIcon from '@material-ui/icons/Build';\n\n\ninterface eventItem {\n SiteName: string;\n WorkerName: string;\n EventType: string;\n EventTime: string;\n CreationDateTime: string;\n CreatedAtUtc: string;\n Description: string;\n}\n\nconst eventTypeOnsite = 'ONSITE';\nconst eventTypeNoLocation = 'UNKNOWN';\nconst eventTypeOffsite = 'OFFSITE';\nconst eventTypeSosReport = 'SOSREPORT';\nconst eventTypeLowBattery = 'LOWBATTERY';\nconst eventTypeBatteryPowerOff = 'BATTERYPOWEROFF';\nconst eventTypeChargingStart = 'CHARGINGSTART';\nconst eventTypeChargingFull = 'CHARGINGFULL';\nconst eventTypePowerOnSleep = 'POWERONUNDERPOWERSAVINGMODE';\nconst eventTypePowerOffSleep = 'POWEROFFUNDERPOWERSAVINGMODE';\nconst eventTypeModeChangeSent = \"MODECHANGESENT\";\nconst eventTypeModeSuccessReceived = \"MODESUCCESSRECEIVED\";\nconst eventTypeModeFailReceived = \"MODEFAILRECEIVED\";\n\n\nconst eventTypeDescriptions = {\n [eventTypeOnsite]: 'On Site',\n [eventTypeOffsite]: 'Off Site',\n [eventTypeSosReport]: 'Button Pressed',\n [eventTypeLowBattery]: 'Low Battery',\n [eventTypeBatteryPowerOff]: 'Flat Battery',\n [eventTypeChargingStart]: 'Charging Start',\n [eventTypeChargingFull]: 'Charging Full',\n [eventTypePowerOnSleep]: 'Power On From Sleep Mode',\n [eventTypePowerOffSleep]: 'Power Off To Sleep Mode',\n [eventTypeNoLocation]: 'Location Not Available',\n [eventTypeModeChangeSent]: 'Config Change Sent',\n [eventTypeModeSuccessReceived]: 'Config Change Success Received',\n [eventTypeModeFailReceived]: 'Config Change Fail Received',\n};\n\nconst eventTypeIcons = {\n [eventTypeOnsite]: ,\n [eventTypeOffsite]: ,\n [eventTypeSosReport]: ,\n [eventTypeLowBattery]: ,\n [eventTypeBatteryPowerOff]: ,\n [eventTypeChargingStart]: ,\n [eventTypeChargingFull]: ,\n [eventTypePowerOnSleep]: ,\n [eventTypePowerOffSleep]: ,\n [eventTypeNoLocation]: ,\n [eventTypeModeChangeSent]: ,\n [eventTypeModeSuccessReceived]: ,\n [eventTypeModeFailReceived]: ,\n};\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n padding: '6px 16px',\n },\n secondaryTail: {\n backgroundColor: theme.palette.secondary.main,\n },\n}));\n\n\nfunction EventItemRender(props) {\n const item:eventItem = props.item;\n const displayDate = item.EventTime;\n const displayCreationDate = item.CreationDateTime;\n const displayOnsiteOffsiteCreatedDate = item.CreatedAtUtc;\n const icon = eventTypeIcons[item.EventType];\n const eventTypeDescription = eventTypeDescriptions[item.EventType];\n return (\n \n \n \n { displayDate }\n \n \n { displayCreationDate }\n { displayOnsiteOffsiteCreatedDate }\n \n \n \n \n { icon }\n \n \n \n \n \n \n { eventTypeDescription }\n \n { item.SiteName }\n { item.Description }\n \n \n \n )\n}\n\n\nfunction WorkerTimelineForm(props) {\n const { workers, classes, handleDateChange, handleEndDateChange, startDate, endDate, handleShowHide, showhide, showLogs, onLogsChange } = props;\n return (\n \n show device events\n load all device logs (lots)\n \n handleDateChange(evt.target.value)}\n InputLabelProps={{\n shrink: true,\n }}\n />\n \n \n handleEndDateChange(evt.target.value)}\n InputLabelProps={{\n shrink: true,\n }}\n />\n \n ({ key: w.WorkerId, value: w.Name })) }\n getOptionLabel={(o: any) => `${o.value}` }\n getOptionSelected={(option: any, value: any) => option.key === value.key}\n renderInput={(params) => } \n defaultValue={ \"\" }\n onChange={props.onChange}\n />\n \n \n );\n}\n\nexport function EventItems({ items, classes }) {\n return \n { items.map((item, index) => ) }\n \n}\n\nexport function EventsList({ items, classes }) {\n return \n \n \n}\n\nexport default function EventTimeline(props) {\n const classes = useStyles();\n var day = null;\n const [ selectedWorkerId, setSelectedWorkerId] = useState(props.workers[0]);\n const [ eventItems, setEventItems ] = useState([]);\n const [ showDeviceEvents, setShowDeviceEvents] = useState(true);\n const [ deviceEventItems, setDeviceEventItems ] = useState([]);\n const [ startDate, setStartDate ] = useState(moment().format('yyyy-MM-DD'));\n const [ endDate, setEndDate ] = useState(moment().add('days', 1).format('yyyy-MM-DD'));\n const [ showLogs, setShowLogs ] = useState(false);\n\n const onWorkerChange = (_, opt) => {\n if(!opt) {\n return;\n }\n setSelectedWorkerId(opt.key);\n \n getEventItemsByWorkerAndDate(opt.key, \n moment(startDate).format('yyyy-MM-DD HH:MM:SS'), moment(endDate).format('yyyy-MM-DD HH:MM:SS')).then(\n evts => {\n setEventItems(evts);\n });\n\n getDeviceEventItemsByWorkerAndDate(opt.key, \n moment(startDate).format('yyyy-MM-DD HH:MM:SS'), moment(endDate).format('yyyy-MM-DD HH:MM:SS')).then(\n evts => {\n setDeviceEventItems(evts);\n });\n }\n\n const onShowHideChange = (evt) => {\n setShowDeviceEvents(evt.target.checked);\n }\n\n const onLogsChange = (evt) => {\n setShowLogs(evt.target.checked);\n }\n\n let allEvents = [...eventItems];\n if(showDeviceEvents) {\n allEvents = eventItems.concat(deviceEventItems);\n }\n allEvents.sort((a, b) => {\n var ad:any = new Date(a.EventTime);\n var bd:any = new Date(b.EventTime);\n return bd - ad;\n }).reverse();\n\n return (\n \n \n \n \n \n \n
\n `\n
\n
\n {showLogs && }\n
\n
\n
\n
\n\n )\n}\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { \n getEventItemsByWorkerAndDate,\n getDeviceEventItemsByWorkerAndDate,\n approvalAllTimesheets,\n} from '../../API';\n\n\nimport {\n ExpansionPanelDetails,\n ExpansionPanelSummary,\n ExpansionPanel,\n Hidden,\n Grid,\n Paper,\n Typography,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {\n getTimesheetEntries,\n getUnlockedTimesheets,\n getApprovalsData,\n getTimesheetNotes,\n updateTimesheetEntries,\n getUnpaidTimesheetEntries,\n getWorkerShiftsForWorkerAndRange,\n getWorkerTimesheets,\n} from '../../API';\nimport {\n setSites, WorkerActions,\n setTimesheets, \n setTimesheetEntries,\n setApprovalTimesheet,\n setTimesheetNotes,\n setLoading,\n setUnpaidTimesheetEntries,\n setApprovalsWorkerShifts,\n} from '../../redux/actions/AllActions';\nimport ApprovalsFormMobile from './ApprovalsFormMobile';\nimport ApprovalsFormLarge from './ApprovalsFormLarge';\nimport TimesheetNotesForm from './TimesheetNotesForm';\nimport TimesheetNotesList from './TimesheetNotesList';\nimport TimesheetTable from './TimesheetTable';\nimport TimesheetPanelList from './TimesheetPanelList';\nimport getActiveApprovalTimesheet from '../../redux/selectors/approvalCurrentTimesheet';\nimport { EventsList } from '../SuperAdmin/WorkerTimeline';\n\nconst drawerWidth = 240;\n\nexport const styles = theme => ({\n root: {\n\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing.unit * 3,\n width: '100vw',\n height: 'calc(100vh - 68px)',\n overflowY: 'scroll',\n },\n innerGrid: { maxWidth: '1400px', margin: '0px auto 0px auto' },\n heading: {\n ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n headingNotes: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightRegular,\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n },\n drawerPaper: {\n width: drawerWidth,\n },\n toolbar: theme.mixins.toolbar,\n textField: {\n minWidth: '300px',\n }\n});\n\n\nexport class ApprovalsClass extends Component {\n state = {\n loaded: false,\n events: [],\n timesheetWorkerIds: [],\n selectedWorker: null,\n }\n\n title = 'Approvals';\n\n componentDidMount() {\n const { timesheet, _setLoading } = this.props;\n this.getData();\n }\n\n componentWillReceiveProps(nextProps, nextState){\n if(!this.props.me.IsSuperAdministrator) {\n return;\n }\n if(nextProps.timesheet && JSON.stringify(nextProps.timesheet) !== JSON.stringify(this.props.timesheet)) {\n // go get the events and put them in state\n const { WorkerId, StartDateTime, FinishDateTime } = nextProps.timesheet;\n \n if(this.props.timesheet && \n `${WorkerId}-${StartDateTime}` === `${this.props.timesheet.WorkerId}-${this.props.timesheet.StartDateTime}`) {\n return;\n }\n\n if(this.props.me.IsSuperAdministrator) {\n /*Promise.all([\n getEventItemsByWorkerAndDate(WorkerId, StartDateTime, FinishDateTime),\n getDeviceEventItemsByWorkerAndDate(WorkerId, StartDateTime, FinishDateTime),\n ]).then(data => {\n const events = [...data[0], ...data[1] ]\n events.sort((a, b) => {\n var ad = new Date(a.EventTime);\n var bd = new Date(b.EventTime);\n return bd - ad;\n }).reverse();\n this.setState({ events });\n });*/\n }\n }\n }\n\n getData = async () => {\n this.props._setLoading(true);\n const data = await getApprovalsData();\n const { sites, workers, timesheetWorkerIds } = data;\n const { _setWorkers, _setLoading } = this.props;\n let timesheets = [];\n if(!this.state.selectedWorker) {\n const usefulWorkers = workers.filter(\n w => timesheetWorkerIds.includes(w.WorkerId) &! w.IsArchived && w.IsEnabled);\n timesheets = await getWorkerTimesheets(usefulWorkers[0].WorkerId);\n if(usefulWorkers.length) {\n this.setState({ selectedWorker: usefulWorkers[0] });\n }\n } else {\n timesheets = await getWorkerTimesheets(this.state.selectedWorker.WorkerId);\n }\n \n _setWorkers(workers);\n\n const timesheet = this.props.timesheet || timesheets[0];\n \n if (!timesheet) {\n _setLoading(false);\n this.setState({\n timesheetWorkerIds,\n loaded: true,\n });\n return;\n }\n\n const {\n workerShifts,\n timesheetEntries,\n unpaidTimesheetEntries,\n timesheetNotes,\n } = await this.getTimesheetData(timesheet);\n\n this.setData(sites, workers, timesheets,\n timesheetEntries, \n timesheet.TimesheetId,\n timesheetNotes,\n unpaidTimesheetEntries,\n workerShifts,\n );\n _setLoading(false);\n this.setState({\n timesheetWorkerIds,\n loaded: true,\n });\n \n }\n\n getTimesheetData = async (timesheet) => {\n const workerShifts = await getWorkerShiftsForWorkerAndRange(timesheet.WorkerId, timesheet.StartDateTime, timesheet.FinishDateTime);\n let timesheetEntries = await getTimesheetEntries(timesheet.TimesheetId);\n const unpaidTimesheetEntries = await getUnpaidTimesheetEntries(timesheet.TimesheetId);\n const timesheetNotes = await getTimesheetNotes(timesheet.TimesheetId);\n timesheetEntries = timesheetEntries.map(tse => ({\n ...tse, edited: false, isNew: false, deleted: false,\n }));\n return {\n workerShifts,\n timesheetEntries,\n unpaidTimesheetEntries,\n timesheetNotes,\n };\n }\n\n setData(sites, workers, timesheets, timesheetEntries, tsId, notes, unpaidTimesheetEntries, workerShifts) {\n const {\n _setSites, _setWorkers, _setTimesheets,\n _setTimesheetEntries, _setApprovalTimesheet,\n _setTimesheetNotes,\n _setUnpaidTimesheetEntries,\n _setApprovalsWorkerShifts,\n } = this.props;\n\n _setSites(sites);\n _setWorkers(workers);\n _setTimesheets(timesheets);\n _setApprovalTimesheet(tsId);\n _setTimesheetEntries(timesheetEntries);\n _setTimesheetNotes(notes);\n _setUnpaidTimesheetEntries(unpaidTimesheetEntries);\n _setApprovalsWorkerShifts(workerShifts);\n console.log(this.state.timesheetWorkerIds, 'ts2')\n }\n\n handleSaveClick = async () => {\n // TODO save things when needed;\n const {\n timesheet, _setLoading,\n } = this.props;\n _setLoading(true);\n await updateTimesheetEntries(\n timesheet.timesheetEntryList.getEntriesForPost(), timesheet.TimesheetId,\n );\n await this.getData();\n _setLoading(false);\n }\n\n onNotesPanelChange = (e, expanded) => {\n this.setState({ expanded });\n }\n\n onWorkerSelectChange = async (workerId) => {\n const selectedWorker = this.props.workers.find(w => w.WorkerId == workerId);\n this.setState({ selectedWorker });\n await this.getData();\n const timesheets = this.props.timesheets;\n const timesheet = timesheets[0];\n const {\n workerShifts,\n timesheetEntries,\n unpaidTimesheetEntries,\n timesheetNotes,\n } = await this.getTimesheetData(timesheets[0]);\n this.props._setApprovalTimesheet(timesheet.TimesheetId);\n this.props._setTimesheetEntries(timesheetEntries);\n this.props._setTimesheetNotes(timesheetNotes);\n this.props._setUnpaidTimesheetEntries(unpaidTimesheetEntries);\n this.props._setApprovalsWorkerShifts(workerShifts);\n }\n\n handleApprovalAllPress = async () => {\n if(!this.state.selectedWorker) {\n return;\n }\n const { Name, WorkerId } = this.state.selectedWorker;\n var doIt = window.confirm(`Approve All Timesheets for ${Name}`);\n if(!doIt) {\n return;\n }\n await approvalAllTimesheets(WorkerId);\n this.setState({ selectedWorker: null});\n await this.getData();\n if(this.state.selectedWorker) {\n await this.onWorkerSelectChange(this.state.selectedWorker.WorkerId);\n }\n }\n\n render() {\n const {\n timesheet, classes, numNotes, token, me\n } = this.props;\n const { expanded, loaded, events, timesheetWorkerIds, selectedWorker } = this.state;\n const notesOpen = !!expanded;\n const superAdmin = false;//me.IsSuperAdministrator;\n console.log(timesheetWorkerIds)\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }>\n {`Timesheet Notes (${numNotes})`}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n { superAdmin && (\n \n \n \n \n )}\n \n {timesheet && (\n \n )}\n \n \n \n \n \n \n \n \n
\n );\n }\n}\n\nexport const mapStateToProps = (state) => {\n const {\n timesheetNotes,\n workers,\n me,\n } = state;\n const timesheet = getActiveApprovalTimesheet(state, {});\n return {\n timesheet,\n numNotes: timesheetNotes.all.length,\n me: me.me,\n workers: workers.all,\n timesheets: state.timesheets.all,\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setSites: x => dispatch(setSites(x)),\n _setWorkers: x => dispatch(WorkerActions.setWorkers(x)),\n _setTimesheets: x => dispatch(setTimesheets(x)),\n _setTimesheetEntries: x => dispatch(setTimesheetEntries(x)),\n _setApprovalTimesheet: x => dispatch(setApprovalTimesheet(x)),\n _setTimesheetNotes: x => dispatch(setTimesheetNotes(x)),\n _setLoading: x => dispatch(setLoading(x)),\n _setUnpaidTimesheetEntries: x => dispatch(setUnpaidTimesheetEntries(x)),\n _setApprovalsWorkerShifts: x => dispatch(setApprovalsWorkerShifts(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(ApprovalsClass)));\n","import momenttz from 'moment-timezone';\nimport moment from 'moment';\nimport * as turf from '@turf/turf';\nimport wkt from 'terraformer-wkt-parser';\n\nclass GPSKalmanFilter {\n constructor(decay = 3) {\n this.decay = decay;\n this.variance = -1;\n this.minAccuracy = 5;\n }\n\n process(lat, lng, orginalAccuracy, timestampInMs) {\n let accuracy = orginalAccuracy;\n if (accuracy < this.minAccuracy) {\n accuracy = this.minAccuracy;\n }\n\n if (this.variance < 0) {\n this.timestampInMs = timestampInMs;\n this.lat = lat;\n this.lng = lng;\n this.variance = accuracy * accuracy;\n } else {\n const timeIncMs = timestampInMs - this.timestampInMs;\n\n if (timeIncMs > 0) {\n this.variance += (timeIncMs * this.decay * this.decay) / 1000;\n this.timestampInMs = timestampInMs;\n }\n\n const _k = this.variance / (this.variance + (accuracy * accuracy));\n this.lat += _k * (lat - this.lat);\n this.lng += _k * (lng - this.lng);\n\n this.variance = (1 - _k) * this.variance;\n }\n\n return [this.lng, this.lat];\n }\n}\n\nexport function snapLocationTimestampsToSite(sites, locs) {\n return locs.map((loc) => {\n if (loc.ClosestSiteDistance < 2 || !loc.ClosestSiteId) {\n return loc;\n }\n const site = sites.find(s => s.SiteId === loc.ClosestSiteId);\n const line = turf.polygonToLine(site.GeoJSON);\n const point = turf.point([loc.Longitude, loc.Latitude]);\n const snapped = turf.nearestPointOnLine(line, point, { units: 'metres' });\n return {\n ...loc,\n Latitude: snapped.geometry.coordinates[1],\n Longitude: snapped.geometry.coordinates[0],\n };\n });\n}\n\nexport default function filterLocationTimestamps(locs) {\n const kalmanFilter = new GPSKalmanFilter(1.5);\n const updatedCoords = [];\n /* eslint-disable */\n for (let index = 0; index < locs.length; index++) {\n const { Latitude, Longitude, NumberOfSatellites, LocationDateTime } = locs[index];\n const timestampInMs = momenttz(LocationDateTime).unix() * 1000;\n const accuracy = NumberOfSatellites;\n const [lon, lat] = kalmanFilter.process(Latitude, Longitude, accuracy || 0, timestampInMs);\n updatedCoords[index] = { ...locs[index], Latitude: lat, Longitude: lon };\n }\n /* eslint-enable */\n\n return updatedCoords;\n}\n\nexport function snapGeoJSONFeaturesToSite(sites, geojson) {\n const features = geojson.features.filter(f => f.geometry && !!f.properties.ClosestSiteId);\n const snapped = features.map((feat) => {\n const { properties } = feat;\n if (properties.ClosestSiteDistance < 1 || !properties.ClosestSiteId) {\n return feat;\n }\n const site = sites.find(s => s.SiteId === properties.ClosestSiteId);\n const line = turf.polygonToLine(site.GeoJSON);\n const point = feat;\n const snapped = turf.nearestPointOnLine(line, point, { units: 'metres' });\n return { ...feat, geometry: snapped.geometry };\n });\n\n return { ...geojson, features: snapped };\n}\n\nexport function clusteriseContactTracingResults(locs, workerId) {\n\n const points = locs.map(({ wkt_point, WorkerId, LocationTimestampId,\n LocationDateTime, ClosestSiteId, Name, ContactName, ZoneId,\n NumberOfSatellites, ClosestSiteDistance }) => {\n return turf.point(wkt.parse(wkt_point).coordinates, \n { WorkerId, LocationTimestampId, LocationDateTime: momenttz.utc(LocationDateTime).tz('Pacific/Auckland').toISOString(),\n ClosestSiteId, Name, ContactName, NumberOfSatellites, ClosestSiteDistance, ZoneId, \n compositeId: `${WorkerId}-${ClosestSiteId}-${ZoneId}` });\n });\n\n const featureCollection = turf.featureCollection(points);\n \n const workerSiteZoneIds = [...new Set(featureCollection.features.map(\n ({ properties }) => properties.compositeId))];\n\n const clustered = turf.clustersKmeans(featureCollection, { numberOfClusters: Math.ceil(Math.sqrt(points.length / 2)) });\n \n const clusters = workerSiteZoneIds.map((compositeId) => {\n return turf.getCluster(clustered, { compositeId });\n });\n\n const features = [].concat.apply([], clusters.map(({features}) => features));\n return turf.featureCollection(features);\n}\n\nexport function locationTimestampsToPoints(locs) {\n return turf.featureCollection([...locs.map(\n wt => turf.point([wt.Longitude, wt.Latitude], wt))]);\n}\n\nexport function createCenterLocationTimestampFromSite(site, deviceId) {\n\n const location = turf.centroid(site.GeoJSON);\n const loc = {\n deviceId,\n batteryPercentage: 0,\n deviceCharging: false,\n locationDateTime: momenttz().format('YYYY-MM-DD HH:mm'),\n sosButton: false,\n altitude: 0,\n rawDeviceData: \"MANUAL\",\n numberOfSatellites: 0,\n signalStrength: 0,\n location: {\n latitude: location.geometry.coordinates[1],\n longitude: location.geometry.coordinates[0]\n }\n }\n return loc;\n}","import React, { Component } from 'react';\nimport MapGL, { GeoJSONLayer, Popup } from 'react-mapbox-gl';\nimport * as turf from '@turf/turf';\nimport {\n Grid,\n} from '@material-ui/core';\nimport moment from 'moment';\nimport { MAPBOX_TOKEN, SAT_MAP_URI, SITE_FILL_STYLE, ZONE_FILL_STYLE } from '../../Constants/Constants';\nimport { snapLocationTimestampsToSite } from '../../GeoFunctions';\nimport { formatUtcDateAsNZTime } from '../../Utils';\n\n\nconst nzBbox = [180.4833, -34.05265942137597, 163.65234, -47.57652];\nconst nzBounds = [[nzBbox[0], nzBbox[1]], [nzBbox[2], nzBbox[3]]];\n\nconst Map = MapGL({\n accessToken: MAPBOX_TOKEN,\n});\n\nconst CIRCLE_STYLE = {\n 'circle-opacity': 0.5,\n 'circle-radius': 6,\n 'circle-color': '#0bc3c6',\n};\n\n\nconst CIRCLE_STYLE_RAW = {\n 'circle-opacity': 0.8,\n 'circle-radius': 7,\n 'circle-color': {\n \"property\": \"eventType\",\n \"type\": \"categorical\",\n \"stops\": [\n ['2', '#c43b00' ], //NORMAL\n ['3', '#bac400' ], //YELLOW SOS\n ['4', '#001eff'], //BLUE //LOW BATTERY\n ['5', '#00ffee'], //CYAN //Flat Battery \n ['6', '#38ff56' ], //Green //Charging Start\n ['7', '#ff00ea'], //PINK //Charging Full\n ['8', '#ffffff'], //White - Wake Up From Sleep (power on) mode 1\n ['9', '#000000'] //Black - Go Back To Sleep (power off) mode 1\n ]\n }\n};\n\nconst LINE_STYLE = {\n 'line-color': '#1badc6',\n 'line-width': 1.5,\n 'line-opacity': 0.8,\n};\n\nconst MIN_DURATION_MINUTES = 25;\n\nclass DevicesReportMap extends Component {\n state = {\n lines: null,\n polygons: null,\n points: null,\n bounds: nzBounds,\n bboxPadding: 1,\n popup: null,\n }\n\n componentWillReceiveProps(props) {\n const { locationTimestamps, sites } = props;\n\n const snappedLocs = snapLocationTimestampsToSite(sites, locationTimestamps);\n\n const lines = this.getLocationLinesFeatures(snappedLocs);\n const polygons = this.getSiteFeatures(sites);\n const points = this.getLocationPointsFeatures(snappedLocs);\n\n this.setState({\n polygons: turf.featureCollection(polygons),\n lines: turf.featureCollection(lines),\n points: turf.featureCollection(points),\n bounds: this.getBounds(polygons, lines),\n bboxPadding: this.getBBoxPadding(sites, snappedLocs),\n });\n }\n\n getLocationLinesFeatures = (locs) => {\n const coords = locs.map(x => [x.Longitude, x.Latitude]);\n if (coords.length < 2) {\n return [];\n }\n return [turf.lineString(coords)];\n }\n\n getLocationPointsFeatures = locs => locs.map(\n lt => turf.point([lt.Longitude, lt.Latitude], lt))\n\n shouldComponentUpdate() {\n setTimeout(\n // hack to keep the map the right size all the time\n // eslint-disable-next-line no-undef\n () => window.dispatchEvent(new Event('resize')), 300);\n return true;\n }\n\n getSiteFeatures = (sites) => {\n if (!sites.length) {\n return [];\n }\n const feats = sites.filter(\n s => !!s.GeoJSON,\n ).map(b => b.GeoJSON);\n return feats;\n }\n\n getBounds = (polygons, lines) => {\n if (lines.length) {\n const bbox = turf.bbox(turf.featureCollection(lines));\n return [[bbox[0], bbox[1]], [bbox[2], bbox[3]]];\n }\n if (polygons.length) {\n const bbox = turf.bbox(turf.featureCollection(polygons));\n return [[bbox[0], bbox[1]], [bbox[2], bbox[3]]];\n }\n // nz bbox\n return nzBounds;\n }\n\n getBBoxPadding = (sites, locationTimestamps) => {\n if (locationTimestamps.length) {\n return 140;\n }\n if (sites.length) {\n return 50;\n }\n return 1;\n }\n\n handleStyleLoad = map => (map && map.resize())\n\n handleLocationHover = (e) => {\n const { features, lngLat, type } = e;\n\n if (type === 'mouseleave') {\n return this.setState({ popup: null });\n }\n\n const labels = [];\n features.sort(\n (a, b) => (moment(a.properties.LocationDateTime).isBefore(\n moment(b.properties.LocationDateTime)) ? -1 : 1));\n\n features.forEach(({ properties }) => {\n const d1 = moment(properties.LocationDateTime);\n\n if (labels.length > 1) {\n const previous = labels.slice(-2);\n const previousDiff = Math.abs(moment.duration(previous[0].date.diff(previous[1].date)).asMinutes());\n const currentDiff = Math.abs(moment.duration(previous[0].date.diff(d1)).asMinutes());\n if (previousDiff < MIN_DURATION_MINUTES && currentDiff < MIN_DURATION_MINUTES) {\n labels.pop();\n }\n }\n\n labels.push({ date: d1, battery: properties.Battery });\n });\n\n const popup = (\n \n { labels.map(\n (dt, i) => (\n
\n { `${dt.date.format('hh:mm:ss a')} (${dt.battery}%)` }\n
\n )) }\n \n );\n this.setState({ popup });\n }\n\n handleRawHover = (e) => {\n const { features, lngLat, type } = e;\n \n if (type === 'mouseleave') {\n return this.setState({ popup: null });\n }\n\n const r = features[0].properties;\n const datee = moment.utc(r.str.split(';')[3], 'YYMMDDHHmmss');\n const dateStrr = formatUtcDateAsNZTime(datee, 'HH:mm:ss a');\n const popup = (\n \n { dateStrr }\n );\n \n this.setState({ popup });\n\n }\n\n render() {\n const {\n bounds, bboxPadding, popup, points, polygons, lines,\n } = this.state;\n\n var rawlocs = this.props.rawdats.filter(r => !!parseInt(r.split(',')[1]) &! r.includes('R')).map(r => {\n var parts = r.split(',');\n var evt = r.split(';')[7];\n return turf.point([parseFloat(parts[2]) , parseFloat(parts[1])], { raw: true, str: r, eventType: evt });\n });\n\n var rawCol = turf.featureCollection(rawlocs);\n\n var zones = this.props.zones.map(z => z.GeoJSON);\n var zoneColl = turf.featureCollection(zones);\n //console.log(zoneColl);\n /*\n \n */\n return (\n \n \n {[\n ,\n ,\n ,\n ,\n ,\n popup,\n ]}\n \n\n \n );\n }\n}\n\nexport default DevicesReportMap;\n","\nimport React, { Component } from 'react';\nimport {\n Grid,\n FormControl,\n Select,\n FormHelperText,\n Input,\n MenuItem,\n TextField,\n Button,\n} from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport styles from '../Common/FormStyles';\n\n\nclass ReportingDevicesForm extends Component {\n componentDidMount() {\n\n }\n\n render() {\n const {\n classes, workers, startDate, handleDateChange,\n selectedWorkerId, handleDeviceSelectChange,\n handleStartTimeChange, handleEndTimeChange,\n handleToggleTimeFilter, startTime, endTime,\n isTimeFiltering,\n } = this.props;\n const timeFiltering = (startTime && endTime && isTimeFiltering);\n const buttonText = timeFiltering ? 'Filtering Time' : 'Filter Time';\n const buttonType = timeFiltering ? 'secondary' : 'primary';\n return (\n
\n
\n \n \n \n \n )}\n variant=\"outlined\"\n >\n {workers.filter(ww => !!ww.WorkerId).map(\n (w, i) => {w.Name})}\n \n Select Worker\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n {buttonText}\n \n \n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles, { withTheme: true })(ReportingDevicesForm);\n","/* eslint-disable */\nwindow.__MUI_USE_NEXT_TYPOGRAPHY_VARIANTS__ = true;\nexport const drawerWidth = 320;\nexport const styles = theme => ({\n typography: {\n useNextVariants: true,\n suppressDeprecationWarnings: true,\n },\n root: {\n display: 'flex',\n flexGrow: 1,\n },\n hide: {\n display: 'none',\n },\n toolbar: {\n marginLeft: 'auto',\n paddingRight: '10px',\n },\n fullPageDrawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n marginTop: '70px',\n overflowY: 'scroll',\n height: 'calc(100vh - 68px)',\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n marginTop: '70px',\n overflowY: 'scroll',\n height: 'calc(100vh - 68px)',\n },\n drawerOpen: {\n width: drawerWidth,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n drawerOpenWide: {\n width: '100vw',\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen * 0.7,\n }),\n },\n drawerClose: {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: theme.spacing.unit * 6,\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing.unit * 8,\n },\n },\n drawerHidden: {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: 0,\n [theme.breakpoints.up('sm')]: {\n width: 0,\n },\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing.unit * 3,\n width: '100vw',\n height: 'calc(100vh - 68px)',\n overflowY: 'scroll',\n },\n heading: {\n ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n modalPaper: {\n position: 'absolute',\n width: theme.spacing.unit * 50,\n backgroundColor: theme.palette.background.paper,\n boxShadow: theme.shadows[5],\n padding: theme.spacing.unit * 4,\n },\n modalStyle: {\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n }\n});\nexport const mapStyle = {\n flexGrow: 1,\n padding: 0,\n width: '100%',\n height: 'calc(100vh - 60px)',\n};\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport moment from 'moment';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport {\n Grid, Drawer, CssBaseline, \n} from '@material-ui/core';\nimport {\n isMobile,\n} from 'react-device-detect';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport IconButton from '@material-ui/core/IconButton';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport DevicesReportMap from './DevicesReportMap';\nimport { getDevicesReport, getApprovalsData, getRawData, getAllZones } from '../../API';\nimport {\n WorkerActions, setSites, setTimesheetEntries,\n setApprovalTimesheet, setTimesheets,\n} from '../../redux/actions/AllActions';\nimport Timesheet from '../../Models/Timesheet';\nimport ReportingDevicesForm from './ReportingDevicesForm';\nimport { styles } from '../Common/GlobalStyles';\nimport { utcToNZT } from '../../Utils';\n\n\n\nconst START_DAY = '00:00';\nconst END_DAY = '23:59';\n\n\nclass DevicesReport extends Component {\n state = {\n selectedWorkerId: null,\n startDate: moment(),\n reportData: {},\n open: true,//!isMobile,\n isTimeFiltering: false,\n startTime: START_DAY,\n endTime: END_DAY,\n rawdats: [],\n zones: [],\n }\n\n toggleDrawer = (e, open = false) => {\n this.setState(\n prevState => ({ open: open || !prevState.open }),\n );\n }\n\n handleStartTimeChange = ({ currentTarget }) => {\n this.setState({ startTime: currentTarget.value });\n }\n\n handleEndTimeChange = ({ currentTarget }) => {\n this.setState({ endTime: currentTarget.value });\n }\n\n handleToggleTimeFilter = (val) => {\n // eslint-disable-next-line react/no-access-state-in-setstate\n this.setState({ isTimeFiltering: !this.state.isTimeFiltering });\n }\n\n handleDeviceSelectChange = ({ target }) => {\n this.setState({ selectedWorkerId: target.value });\n this.handleSearch(this.state.startDate, target.value);\n }\n\n handleDateChange = ({ target }) => {\n this.setState({ startDate: target.value });\n this.handleSearch(target.value, this.state.selectedWorkerId);\n }\n\n componentDidMount() {\n this.getData();\n }\n\n handleSearch = async (startDate, selectedWorkerId) => {\n const mStartDate = moment(startDate);\n if (!mStartDate.isValid()) {\n return;\n }\n const res = await getDevicesReport(moment(startDate).format('YYYY-MM-DD'), selectedWorkerId);\n if(this.props.me.IsSuperAdministrator){\n const rawdats = await getRawData(selectedWorkerId, \n moment(startDate).format('YYYY-MM-DD'),\n moment(startDate).add(1, 'days').format('YYYY-MM-DD'));\n this.setState({ reportData: res, rawdats });\n } else {\n this.setState({ reportData: res });\n }\n }\n\n getData = async () => {\n const { sites, workers } = await getApprovalsData();\n const sDate = this.state.startDate.format('YYYY-MM-DD');\n const {\n setAllSites, setAllWorkers, setAllTimesheets,\n setAllTimesheetEntries, setCurrentTimesheet,\n } = this.props;\n\n setAllSites(sites);\n setAllWorkers(workers);\n\n const res = await getDevicesReport(sDate, workers[0].WorkerId);\n const zones = await getAllZones();\n this.setState({ reportData: res, zones });\n \n if (workers.length > 1) {\n this.setState({\n selectedWorkerId: workers[0].WorkerId,\n startDate: sDate,\n });\n }\n }\n\n\n renderDrawerContent = () => {\n const {\n workers,\n } = this.props;\n const {\n open, startDate, selectedWorkerId, startTime, endTime,\n isTimeFiltering,\n } = this.state;\n const openDrawer = () => this.toggleDrawer(null, true);\n return (open\n && (\n !w.IsArchived)}\n handleDateChange={this.handleDateChange}\n handleDeviceSelectChange={this.handleDeviceSelectChange}\n startDate={startDate}\n selectedWorkerId={selectedWorkerId}\n handleEndTimeChange={this.handleEndTimeChange}\n handleStartTimeChange={this.handleStartTimeChange}\n handleToggleTimeFilter={this.handleToggleTimeFilter}\n startTime={startTime}\n endTime={endTime}\n isTimeFiltering={isTimeFiltering}\n />\n )\n );\n }\n\n getReportData = () => {\n const {\n isTimeFiltering, reportData, startTime, endTime,\n } = this.state;\n const { locationTimestamps } = reportData;\n if (!isTimeFiltering || !(locationTimestamps && locationTimestamps.length)) {\n return reportData.locationTimestamps;\n }\n const startParts = startTime.split(':');\n const endParts = endTime.split(':');\n const startTimeFilter = moment(locationTimestamps[0].LocationDateTime);\n startTimeFilter.minutes(parseInt(startParts[1], 0));\n startTimeFilter.hours(parseInt(startParts[0], 0));\n const endTimeFilter = moment(locationTimestamps[0].LocationDateTime);\n endTimeFilter.minutes(parseInt(endParts[1], 0));\n endTimeFilter.hours(parseInt(endParts[0], 0));\n\n const filteredLocations = locationTimestamps.filter((l) => {\n const time = moment(l.LocationDateTime);\n return time.isAfter(startTimeFilter) && time.isBefore(endTimeFilter);\n });\n return filteredLocations;\n }\n\n filterRawDats = (rawdats) => {\n const {\n isTimeFiltering, startTime, endTime\n } = this.state;\n if(!isTimeFiltering) {\n return rawdats;\n }\n return rawdats.filter(r => {\n const dateutc = moment.utc(r.split(';')[3], 'YYMMDDHHmmss');\n const datenz = utcToNZT(dateutc);\n const startParts = startTime.split(':');\n const endParts = endTime.split(':');\n const startTimeFilter = moment(datenz);\n startTimeFilter.minutes(parseInt(startParts[1], 0));\n startTimeFilter.hours(parseInt(startParts[0], 0));\n const endTimeFilter = moment(datenz);\n endTimeFilter.minutes(parseInt(endParts[1], 0));\n endTimeFilter.hours(parseInt(endParts[0], 0));\n return datenz.isAfter(startTimeFilter) && datenz.isBefore(endTimeFilter);\n });\n }\n\n render() {\n const {\n sites, classes,\n } = this.props;\n const {\n open,\n rawdats\n } = this.state;\n const locationTimestamps = this.getReportData();\n return (\n
\n \n \n
\n \n {open ? : }\n \n
\n { this.renderDrawerContent() }\n \n\n
\n \n \n !!s.Active)} \n locationTimestamps={locationTimestamps || []} \n zones={this.state.zones}\n />\n \n \n
\n
\n\n\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {\n workers, sites, timesheets, timesheetEntries, me\n } = state;\n let timesheet = null;\n if (timesheets.approvalCurrentTimesheetId) {\n timesheet = new Timesheet(timesheets.approvalCurrentTimesheetId);\n timesheet.setTimesheetEntryList(timesheetEntries.all.filter(\n r => r.TimesheetId === timesheet.TimesheetId));\n }\n\n return { workers: workers.all, sites: sites.all, timesheet, me: me.me };\n};\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n setAllWorkers: ws => dispatch(WorkerActions.setWorkers(ws)),\n setAllSites: ws => dispatch(setSites(ws)),\n setAllTimesheetEntries: ws => dispatch(setTimesheetEntries(ws)),\n setCurrentTimesheet: ws => dispatch(setApprovalTimesheet(ws)),\n setAllTimesheets: ws => dispatch(setTimesheets(ws)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(withStyles(styles, { withTheme: true })(DevicesReport)));\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport MUIDataTable from 'mui-datatables';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n marginTop: theme.spacing.unit * 3,\n overflowX: 'auto',\n },\n table: {\n minWidth: 1000,\n },\n});\n\nconst options = {\n filterType: 'multiselect',\n selectableRows: false,\n filter: true,\n download: false,\n rowsPerPageOptions: [10, 20, 50, 100],\n};\n\nconst reportTableColumns = [\n 'Payroll ID',\n { name: 'Worker', options: { sort: true, sortDirection: 'asc' } },\n 'Site',\n 'Day Worked',\n 'Start Time',\n 'Finish Time',\n 'Hours Worked',\n 'Hours Break',\n 'Status',\n];\n\n\nfunction ReportingTable(props) {\n const { rows } = props;\n return (\n \n );\n}\n\nexport default withStyles(styles)(ReportingTable);\n","\nimport React, { Component } from 'react';\nimport {\n Grid,\n FormGroup,\n FormControl,\n Select,\n FormHelperText,\n Button,\n MenuItem,\n Radio,\n RadioGroup,\n FormControlLabel,\n FormLabel,\n Input,\n} from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport moment from 'moment';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport styles from '../Common/FormStyles';\nimport { CSV_FORMAT_MAP } from '../../Constants/Constants';\n\n\nclass TimesheetsForm extends Component {\n componentDidMount() {\n\n }\n\n render() {\n const {\n classes, timesheets, selectedTimesheetId, onDateChange,\n onExportClick, onLockClick,\n } = this.props;\n const opts = timesheets.map((ts, i) => (\n \n {moment(ts.StartDateTime).format('Do MMM')}\n {' - '}\n {moment(ts.FinishDateTime).add(-1, 'days').format('Do MMM')}\n \n ));\n return (\n
\n \n \n \n
\n

\n Weekly process for timesheets:\n

\n
    \n
  1. \n Supervisors approve timesheets.\n
  2. \n
  3. \n Administrator locks timesheets.\n
  4. \n
  5. \n CSV export for payroll.\n
  6. \n
\n
\n
\n
\n \n \n \n \n Lock\n \n \n \n \n Export CSV\n \n\n \n \n \n \n \n \n )}\n variant=\"outlined\"\n >\n { opts }\n \n Select Date Range\n \n \n\n \n \n \n CSV Type\n \n {\n Object.keys(CSV_FORMAT_MAP).map(\n k => (\n }\n label={CSV_FORMAT_MAP[k]}\n />\n ))\n }\n \n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles, { withTheme: true })(TimesheetsForm);\n","import React, { Component } from 'react';\nimport moment from 'moment';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport {\n Grid, Drawer,\n Typography, Button,\n} from '@material-ui/core';\nimport classNames from 'classnames';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { withStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport Modal from '@material-ui/core/Modal';\nimport {\n isMobile,\n} from 'react-device-detect';\nimport ReportingTable from './ReportingTable';\nimport TimesheetsForm from './TimesheetsForm';\nimport { downloadCSVContent, uniqInArray, formatDuration } from '../../Utils';\nimport {\n setTimesheetRange,\n setReportDate,\n updateTimesheetReportTable,\n setLoading,\n} from '../../redux/actions/AllActions';\nimport {\n getDistinctTimesheets,\n getTimesheetReport,\n getExportTimesheet,\n lockTimesheets,\n getAllSites,\n getApprovedTimesheetCount,\n} from '../../API';\nimport { styles } from '../Common/GlobalStyles';\n\nconst statuses = {\n 0: 'Draft',\n 1: 'Approved',\n 2: 'Locked',\n};\n\n\nfunction countStatus(report, status) {\n return uniqInArray(report.filter(\n r => r.Status === status).map(r => `${r.PayrollId}`)).length;\n}\n\n// Create a report component, both container and table\nclass ReportContainer extends Component {\n state = {\n timesheetRows: [],\n datesSpan: null,\n timesheets: [],\n selectedTimesheetId: null,\n statusCounts: {},\n open: true,//!isMobile,\n csvFormat: '0',\n loaded: false,\n }\n\n // Fixed Function that can initialize dom nodes\n componentDidMount() {\n this.setInitialData();\n }\n\n setInitialData = async () => {\n this.props.setLoading(true);\n const timesheets = await getDistinctTimesheets();\n const sites = await getAllSites();\n if (!timesheets.length) {\n return;\n }\n const ts = timesheets.length > 1 ? timesheets[1] : timesheets[0];\n await this.getReport(ts.TimesheetId);\n this.setState({\n datesSpan: `${moment(ts.StartDateTime).format('Do MMM')} - ${moment(ts.FinishDateTime).add(-1, 'days').format('Do MMM')}`,\n timesheets,\n selectedTimesheetId: ts.TimesheetId,\n sites,\n loaded: true,\n });\n this.props.setLoading(false);\n }\n\n onCsvFormatChange = async (e, csvFormat) => {\n this.setState({ csvFormat });\n const { selectedTimesheetId } = this.state;\n if (selectedTimesheetId) {\n this.getReport(selectedTimesheetId, csvFormat);\n }\n }\n\n getReport = async (tsId, format) => {\n const { csvFormat } = this.state;\n this.props.setLoading(true);\n const data = await Promise.all([\n getTimesheetReport(tsId, format || csvFormat),\n getApprovedTimesheetCount(tsId),\n ]);\n const approvedCount = data[1];\n const report = data[0];\n const draft = countStatus(report, 0);\n const locked = countStatus(report, 2);\n const draftTimesheets = uniqInArray(report.filter(\n r => r.Status === 0).map(r => `${r.PayrollId} - ${r.DayWorked}`)).length;\n this.setState({\n timesheetRows: report,\n statusCounts: {\n approved: approvedCount, locked, draft, draftTimesheets,\n },\n });\n this.props.setLoading(false);\n }\n\n onDateChange = async ({ target }) => {\n const { value } = target;\n const { timesheets } = this.state;\n const id = parseInt(value, 0);\n const ts = timesheets.find(t => t.TimesheetId === id);\n await this.getReport(id);\n this.setState({\n datesSpan: `${moment(ts.StartDateTime).format('Do MMM')} - ${moment(ts.FinishDateTime).add(-1, 'days').format('Do MMM')}`,\n selectedTimesheetId: id,\n });\n }\n\n // Export CSV function\n exportCSV = async () => {\n const { selectedTimesheetId, csvFormat } = this.state;\n // do a popup with the callback =\n const data = await getExportTimesheet(selectedTimesheetId, csvFormat);\n downloadCSVContent(data);\n this.setState({\n showAfterCSVModal: true,\n });\n }\n\n // Lock function\n lockTimesheets = async () => {\n const { selectedTimesheetId } = this.state;\n await lockTimesheets(selectedTimesheetId);\n await this.getReport(selectedTimesheetId);\n this.setState({\n showLockModal: false,\n });\n }\n\n showLockModal = async () => {\n this.setState({\n showLockModal: true,\n });\n }\n\n showAfterCSVModal = async () => {\n this.setState({\n showAfterCSVModal: false,\n });\n }\n\n afterModalClose = async () => {\n await this.getReport(this.state.selectedTimesheetId);\n this.setState({\n showAfterCSVModal: false,\n showLockModal: false,\n });\n }\n\n renderAfteCSVModal = () => {\n const { locked, approved, draft } = this.state.statusCounts;\n const { datesSpan } = this.state;\n const { classes } = this.props;\n const showNotExport = !!(approved + draft);\n return (\n \n
\n \n Export Completed\n \n \n

{ `Locked timesheets exported for ${locked} users for ${datesSpan}.`}

\n { showNotExport &&

{`Timesheets for ${approved + draft} users were NOT exported.`}

}\n
\n \n \n \n \n \n
\n \n );\n }\n\n renderLockModal = () => {\n const { approved, draftTimesheets } = this.state.statusCounts;\n const { datesSpan } = this.state;\n const { classes } = this.props;\n const msg1 = `Please confirm you want to lock timesheets ${approved} users for ${datesSpan}.`;\n const msg2 = draftTimesheets ? `There are ${draftTimesheets} timesheets that cannot be locked` : '';\n return (\n \n
\n \n Please Confirm\n \n \n

{ msg1}

\n { draftTimesheets > 0 &&

{ msg2 }

}\n
\n\n \n \n \n \n \n \n \n \n
\n \n );\n }\n\n toggleDrawer = (e, open = false) => {\n this.setState(\n prevState => ({ open: open || !prevState.open }));\n }\n\n renderDrawerContent = () => {\n const { timesheets, selectedTimesheetId, csvFormat } = this.state;\n const { classes } = this.props;\n const onDateChange = this.onDateChange.bind(this);\n return (\n
\n \n\n
\n\n );\n }\n\n render() {\n const {\n timesheetRows, open, showLockModal, showAfterCSVModal, sites, loaded,\n } = this.state;\n if (!(loaded && sites)) {\n return
;\n }\n const { classes } = this.props;\n const tableRows = timesheetRows.map((n) => {\n const breaktime = formatDuration(n.HoursBreak);\n const workTime = formatDuration(0, n.HoursWorked * 60);\n return [\n n.PayrollId || '',\n n.Name,\n n.SiteName || 'Unknown',\n n.DayWorked ? moment(n.DayWorked).format('YYYY-MM-DD') : '',\n moment(n.StartDateTime).format('H:mm'),\n moment(n.FinishDateTime).format('H:mm'),\n workTime,\n breaktime,\n statuses[n.Status],\n ];\n });\n\n return (\n\n
\n \n { showLockModal && this.renderLockModal() }\n { showAfterCSVModal && this.renderAfteCSVModal() }\n \n
\n \n {open ? : }\n \n
\n { open && this.renderDrawerContent() }\n \n\n
\n \n \n \n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const { timesheetReport } = state;\n return { timesheetReport: timesheetReport.all };\n};\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n updateTimesheetReportTable: x => dispatch(updateTimesheetReportTable(x)),\n setTimesheetRange: x => dispatch(setTimesheetRange(x)),\n setReportDate: x => dispatch(setReportDate(x)),\n setLoading: x => dispatch(setLoading(x)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(ReportContainer)));\n","/* eslint-disable no-case-declarations */\nimport React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport MUIDataTable from 'mui-datatables';\nimport moment from 'moment';\n\n\nconst COLUM_INDEXS = {\n NAME : 0,\n DESCRIPTION : 1,\n WORKEDID :2,\n LAST_UPDATED_COL:3,\n BATTERY :4,\n TIMESTAMP: 5\n};\n\nconst styles = theme => ({\n root: {\n width: '100%',\n marginTop: theme.spacing.unit * 3,\n overflowX: 'auto',\n },\n table: {\n maxWidth: '100vw',\n },\n});\n\n\nconst timesort = (data, colIndex, order) => data.sort( (a, b) => { \n const orderedData = (order === 'asc') ? [a.data, b.data] : [b.data, a.data];\n switch (colIndex) {\n case COLUM_INDEXS.LAST_UPDATED_COL:\n case COLUM_INDEXS.TIMESTAMP:\n const isAfter = moment(orderedData[0][COLUM_INDEXS.TIMESTAMP]).isAfter(moment(orderedData[1][COLUM_INDEXS.TIMESTAMP]));\n return isAfter ? 1 : -1;\n default:\n return orderedData[0][colIndex] > orderedData[1][colIndex] ? 1 : -1;\n }\n });\n\nconst tableLabels = [\n /* {\n name: 'Photo',\n options: {\n filter: true,\n customBodyRender: value => (\n \n
\n \n
\n \n
\n
\n
\n ),\n display: true,\n },\n }, */\n\n { name: 'Name', options: { sort: true } },\n { name: 'Description', options: { display: true, sort: false }},\n { name: 'WorkerId', options: { display: false, sort: false }},\n { name: 'Last Updated', options: {display: true, sort: false,}},\n { name: 'Battery', options: { display: true, sort: false } },\n { name: 'Timestamp', options: { display: false, sort: false } },\n { name: 'DeviceId', options: { display: false, sort: false } },\n];\n\n\nclass WorkerLocationTable extends Component {\n \n\n onChangeRowsPerPage = (rowsPerPage) => {\n this.setState({ \n options: { ...this.state.options, rowsPerPage }, \n columns: this.state.columns \n });\n }\n\n setRowProps = (row) => {\n if (row[COLUM_INDEXS.WORKEDID] === this.props.selectedWorkerId) {\n return {\n style: { background: 'lightgrey' },\n };\n }\n }\n \n onColumnsChanged = (columName, action) => {\n const columSource = tableLabels;\n const column = columSource.find(x => x.name === columName);\n if(column){\n column.options.display = (action === 'add');\n } \n }\n \n\n // This mast come after clas functions are assigned otherwise they are undefined\n state = {\n options: {\n selectableRows: false,\n rowsPerPage: 100,\n filter: false,\n download: false,\n print: false,\n viewColumns: true,\n rowsPerPageOptions: [20, 50, 100 ],\n responsive: 'scroll',\n customSort: timesort,\n onChangeRowsPerPage: this.onChangeRowsPerPage,\n setRowProps: this.setRowProps,\n onViewColumnsChange : this.onColumnsChanged,\n onColumnViewChange : this.onColumnsChanged,\n }\n }\n\n render() {\n const {rows, classes, onRowsSelect,onRowClick, onRowsDelete } = this.props;\n\n const options = {\n ...this.state.options,\n onRowClick,\n onRowsDelete,\n onRowsSelect,\n };\n \n\n return (\n \n );\n }\n}\n\n\nexport default withStyles(styles)(WorkerLocationTable);\n","/* eslint-disable react/no-unused-state */\nimport React, { Component } from 'react';\nimport MapGL, {\n GeoJSONLayer,\n} from 'react-mapbox-gl';\nimport * as turf from '@turf/turf';\nimport {\n MAPBOX_TOKEN,\n SAT_MAP_URI,\n} from '../../Constants/Constants';\n\n\nconst Map = MapGL({\n accessToken: MAPBOX_TOKEN,\n});\n\nconst LINE_STYLE = {\n 'line-color': '#1badc6',\n 'line-width': 2.5,\n 'line-opacity': 0.8,\n };\n\nconst CIRCLE_STYLE = {\n 'circle-opacity': 0.9,\n 'circle-radius': 8,\n 'circle-color': '#e33d3d',\n};\n\nexport default class DashboardMapBase extends Component {\n getSiteFeatureCollection = () => {\n const { sites } = this.props;\n return sites ? turf.featureCollection(sites.map(s => s.GeoJSON)) : [];\n }\n\n getWorkerMarkers = () => {\n const { workerLocations, selectedWorkerId } = this.props;\n const features = turf.featureCollection(workerLocations.filter(wl => wl.WorkerId !== selectedWorkerId).map(l => (\n turf.feature({\n type: 'Point',\n coordinates: [l.Longitude, l.Latitude],\n }))));\n return features;\n }\n\n getSiteCenter = (feat) => {\n if (feat) {\n const centroid = turf.centroid(feat);\n return centroid.geometry.coordinates;\n }\n return this.state.center;\n }\n\n setCenter = () => {\n this.setState({ center: null });\n }\n\n getMapURI = () => {\n const { customSettings } = this.props;\n return customSettings ? customSettings.map_uri : SAT_MAP_URI;\n }\n\n getBounds = (feat, buffer) => {\n const bbox = turf.bbox(turf.buffer(feat, buffer || 570, { units: 'meters' }));\n return [[bbox[0], bbox[1]], [bbox[2], bbox[3]]];\n }\n\n setFitboundsFromNextProps = ({ siteSelected, selectedWorkerId }) => {\n if (siteSelected && JSON.stringify(siteSelected) !== JSON.stringify(this.props.siteSelected)) {\n this.setState({\n fitBounds: this.getBounds(siteSelected.GeoJSON),\n });\n } else if (selectedWorkerId && selectedWorkerId !== this.props.selectedWorkerId) {\n\n try {\n const bbox = this.getBounds(this.getWorkerFeature(selectedWorkerId), 550);\n this.setState({ fitBounds: bbox });\n } catch (e) {\n console.log(e);\n }\n } else if (!selectedWorkerId && selectedWorkerId !== this.props.selectedWorkerId && this.props.siteSelected && siteSelected) {\n this.setState({\n fitBounds: this.getBounds(siteSelected.GeoJSON),\n });\n } else if (this.props.sites && this.props.sites.length && !this.state.fitBoundsSet) {\n const bbox = turf.bbox(this.getSiteFeatureCollection());\n this.setState({ fitBounds: [[bbox[0], bbox[1]], [bbox[2], bbox[3]]], fitBoundsSet: true });\n }\n }\n\n handleStyleLoad = map => (map && map.resize())\n\n render() {\n const {\n siteSelected, selectedWorkerId, workerLocations, contactGeojson, workerTrack,\n } = this.props;\n\n const extraLayer = contactGeojson && (\n \n );\n\n const extraLayer2 = contactGeojson && (\n \n );\n\n const extraLayer3 = workerTrack && (\n \n );\n\n const mapProps = this.getMapProps();\n return (\n \n {\n [(\n \n ),\n extraLayer2, extraLayer, extraLayer3,\n ]\n }\n \n );\n }\n}","/* eslint-disable react/no-unused-state */\nimport { connect } from 'react-redux';\nimport React from 'react';\nimport * as turf from '@turf/turf';\nimport MapGL, {\n GeoJSONLayer,\n Popup,\n} from 'react-mapbox-gl';\nimport { WorkerActions } from '../../redux/actions/AllActions';\nimport {\n MAPBOX_TOKEN,\n SAT_MAP_URI,\n} from '../../Constants/Constants';\nimport { uniqInArray } from '../../Utils';\nimport moment from 'moment';\nimport DashboardMapBase from './DashboardMapBase';\nimport { randomColor } from '../../Utils';\n\nconst Map = MapGL({\n accessToken: MAPBOX_TOKEN,\n});\n\n\n\n\nclass WorkerLocationMap extends DashboardMapBase {\n state = {\n zoom: 11,\n pitch: 0,\n fitBounds: [\n [180.4833, -34.05265942137597],\n [163.65234, -47.57652],\n ],\n bearing: undefined,\n }\n\n componentDidMount() {\n if (this.props.siteSelected) {\n this.setState({ fitBounds: this.getBounds(this.props.siteSelected.GeoJSON) });\n this.setState({ bearing: this.getBearing() });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n this.setFitboundsFromNextProps(nextProps);\n }\n\n\n getWorkerFeature = (selectedWorkerId) => {\n const { workerLocations } = this.props;\n return workerLocations.features.find(wl => wl.properties.WorkerId === selectedWorkerId);\n }\n\n getMapURI = () => SAT_MAP_URI\n\n getMapProps = () => {\n const { pitch, fitBounds } = this.state;\n return {\n pitch: [pitch],\n fitBounds,\n // fitBoundsOptions: { padding: 0, offset: [0, -60] },\n style: this.getMapURI(),\n onMove: this.handleMove,\n className: 'dashboard-map dashboard-responsive',\n onStyleLoad: this.handleStyleLoad,\n };\n }\n\n handleCircleHover = (e) => {\n const { features, lngLat, type } = e;\n\n if (type === 'mouseleave') {\n return this.setState({ popup: null });\n }\n\n /* eslint-disable */\n const names = uniqInArray(features.map(\n ({ properties }) => {\n const worker = this.props.workers.find(w => w.WorkerId === properties.WorkerId);\n return `${worker.Name} ${moment(properties.LocationDateTime).format('HH:mm')}`;\n }));\n const toShow = names.map((n) => {\n return (\n
\n {n}\n
\n );\n });\n /* eslint-enable */\n\n const popup = (\n \n { toShow }\n \n );\n this.setState({ popup });\n }\n\n render() {\n const {\n selectedWorkerId, workerLocations, zones,\n } = this.props;\n const selectedWorker = workerLocations && workerLocations.features.find(wl => wl.properties.WorkerId === selectedWorkerId);\n const workerFeat = selectedWorker && turf.featureCollection([selectedWorker]);\n const zonesColl = turf.featureCollection(zones.map(z => z.GeoJSON));\n const extraLayer3 = workerLocations && (\n \n );\n \n for(var i=0; i {\n return (\n \n )\n });\n\n const mapProps = this.getMapProps();\n return (\n \n {\n [(\n \n ),\n extraLayer3,\n extraLayer2,\n this.state.popup,\n ]\n }\n \n );\n }\n}\n\nconst mapStateToProps = state => ({\n selectedWorkerId: state.ui.selectedDashboardWorkerId,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n selectWorker: x => dispatch(WorkerActions.setSelectedDashboardWorker(x)),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(WorkerLocationMap);\n","import React, { Component } from 'react';\nimport geojson2svg from 'geojson2svg';\nimport geojsonbounds from 'geojson-bounds';\nimport proj4 from 'proj4';\nimport reproject from 'reproject';\nimport GridListTile from '@material-ui/core/GridListTile';\nimport GridListTileBar from '@material-ui/core/GridListTileBar';\n\n\nfunction parseSVG(s) {\n // eslint-disable-next-line no-undef\n const div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n div.innerHTML = `${s}`;\n // eslint-disable-next-line no-undef\n const frag = document.createDocumentFragment();\n while (div.firstChild.firstChild) { frag.appendChild(div.firstChild.firstChild); }\n return frag;\n}\n\nexport default class SitePickerTile extends Component {\n getStrokeWidth = (newProps) => {\n const { isSelected } = newProps;\n return isSelected ? '3' : '1';\n }\n\n getStyle = props => `stroke:#F7D74A; fill: #564d4b;stroke-width:${this.getStrokeWidth(props)};`\n\n componentDidMount() {\n const { site } = this.props;\n\n const geojson3857 = reproject.reproject(\n site.GeoJSON, 'EPSG:4326', 'EPSG:3857', proj4.defs);\n const bounds = geojsonbounds.extent(geojson3857);\n const style = this.getStyle(this.props);\n const converter = geojson2svg(\n {\n mapExtent: {\n left: bounds[0], bottom: bounds[1], right: bounds[2], top: bounds[3],\n },\n attributes: {\n id: `site-tile-svg-${site.SiteId}`,\n style,\n 'vector-effect': 'non-scaling-stroke',\n },\n viewportSize: {\n width: 120,\n height: 120,\n },\n explode: false,\n output: 'svg',\n });\n\n const svgElements = converter.convert(geojson3857);\n // eslint-disable-next-line no-undef\n const svgMap = document.getElementById(`site-tile-${site.SiteId}`);\n svgElements.forEach((svgStr) => {\n const svg = parseSVG(svgStr);\n svgMap.appendChild(svg);\n });\n }\n\n componentWillReceiveProps(newProps) {\n const { site } = newProps;\n\n // eslint-disable-next-line no-undef\n const svg = document.getElementById(`site-tile-svg-${site.SiteId}`);\n const style = this.getStyle(newProps);\n svg.setAttribute('style', style);\n }\n\n render() {\n const { site, onClick, isSelected } = this.props;\n return (\n \n
\n \n
\n \n
\n );\n }\n}\n","import React from 'react';\nimport GridList from '@material-ui/core/GridList';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport { func } from 'prop-types';\nimport SitePickerTile from './SitePickerTile';\n\n\nconst styles = {\n gridList: {\n flexWrap: 'nowrap',\n backgroundColor: 'rgb(117, 102, 35)',\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: 'translateZ(0)',\n },\n leftPicker: {\n position: 'absolute',\n height: '120px',\n width: '22px',\n backgroundColor: 'rgba(0,0,0,0.5)',\n left: 0,\n top: 0,\n zIndex: 9,\n },\n rightPicker: {\n position: 'absolute',\n height: '120px',\n width: '22px',\n backgroundColor: 'rgba(0,0,0,0.5)',\n right: 0,\n top: 0,\n zIndex: 9,\n },\n leftChevron: {\n color: 'white',\n marginTop: '40px',\n },\n};\n\nfunction scrollGridLeft() {\n const glist = document.getElementById('site-picker-list');\n glist.scrollTo(glist.scrollLeft - 800, 0);\n}\n\nfunction scrollGridRight() {\n const glist = document.getElementById('site-picker-list');\n glist.scrollTo(glist.scrollLeft + 800, 0);\n}\n\nfunction removeUnusedIcons() {\n const gList = document.getElementById('site-picker-list');\n if (gList && gList.scrollWidth <= gList.offsetWidth) {\n document.getElementById('left-picker-icon').setAttribute('style', 'display: none');\n document.getElementById('right-picker-icon').setAttribute('style', 'display: none');\n }\n}\n\nexport default function SiteGridList(props) {\n const { sites, siteSelected, onClick } = props;\n setTimeout(() => {\n removeUnusedIcons();\n }, 100);\n\n\n const tiles = sites.map((s, i) => (\n onClick(s)}\n />\n ));\n return (\n
\n
\n \n {tiles}\n \n
\n
\n );\n}\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport * as turf from '@turf/turf';\nimport moment from 'moment';\nimport {\n Grid,\n} from '@material-ui/core';\nimport {\n getWorkerLocations,\n getWorkers,\n getAllSites,\n getAllZones,\n} from '../../API';\nimport {\n WorkerActions,\n setSites,\n setLocations,\n setLoading,\n setSnackbar, \n} from '../../redux/actions/AllActions';\nimport WorkerLocationTable from './WorkerLocationTable';\nimport WorkerLocationMap from './WorkerLocationMap';\nimport SitePicker from './SitePicker';\nimport { snapLocationTimestampsToSite } from '../../GeoFunctions';\n\n\n\nclass Dashboard extends Component {\n state = {\n rowsSelected: [],\n siteSelected: null,\n workerGeo: null,\n zones: [],\n }\n\n componentDidMount() {\n this.props.setLoading(true);\n this.loadData();\n this.timer = setInterval(this.loadData, 300000);\n }\n\n componentWillUnmount() {\n clearInterval(this.timer);\n }\n\n loadData = async () => {\n const {\n setAllWorkers, setWorkerLocations, setAllSites, setLoading,\n } = this.props;\n try {\n const data = await Promise.all(\n [getWorkerLocations(), getAllSites(), getWorkers(), getAllZones()]);\n \n const [workerLocations, sites, workers, zones] = data;\n var activeSites = data[1].filter(s => s.Active);\n // this has to be first because sitetile checks it on componentdidmount\n if (!this.state.siteSelected) {\n setTimeout(() => {\n this.setState({ siteSelected: activeSites.length && activeSites[0] });\n }, 1500);\n }\n\n this.setState({ zones });\n\n setAllWorkers(workers);\n setAllSites(sites);\n setWorkerLocations(workerLocations);\n\n if (data[0]) {\n const filteredLocs = workerLocations.filter(\n wl => wl.Latitude && wl.Longitude && wl.ClosestSiteId && moment(wl.LocationDateTime).isSame(moment(), 'day')\n );\n const workerFeatures = snapLocationTimestampsToSite(sites, filteredLocs).map(\n l => turf.feature({\n type: 'Point',\n coordinates: [l.Longitude, l.Latitude],\n }, l));\n if(workerFeatures.length) {\n this.setState({ workerGeo: turf.featureCollection(workerFeatures) });\n }\n }\n\n setLoading(false);\n } catch (e) {\n console.warn(e);\n this.setState({zones: []});\n setAllWorkers([]);\n setAllSites([]);\n setWorkerLocations([]);\n setLoading(false);\n }\n }\n\n onRowClick = (data, rowMeta) => {\n const { workerLocations } = this.props;\n const { workerGeo } = this.state;\n const wl = workerLocations.find(\n w => w.WorkerId === data[2] && workerGeo && workerGeo.features.find(f => f.properties.WorkerId === data[2]));\n\n if (!wl) {\n this.props.setSnackbar({\n message: `Current location of ${data[0]} is unknown`,\n openTime: new Date().getTime(),\n });\n return;\n }\n \n if (this.props.selectedWorkerId === data[2]) {\n this.setState({\n rowsSelected: [],\n selectedWorkerId: null,\n });\n this.props.setSelectedWorker(null);\n return;\n }\n\n this.props.setSelectedWorker(data[2]);\n this.setState({\n rowsSelected: [rowMeta.rowIndex],\n selectedWorkerId: data[2],\n });\n }\n\n onRowsDelete = () => {\n this.setState({ rowsSelected: [] });\n }\n\n onRowsSelect = (selectedRows) => {\n const { rowsSelected } = this.state;\n const { index } = selectedRows[0];\n const stateIndex = rowsSelected.indexOf(index);\n if (stateIndex !== -1) {\n if (rowsSelected.length === 1) {\n this.setState({ rowsSelected: [] });\n } else {\n this.setState({ rowsSelected: rowsSelected.splice(stateIndex, 1) });\n }\n } else {\n this.setState({ rowsSelected: [...rowsSelected, index] });\n }\n }\n\n getTableRecords = () => {\n const { workers, workerLocations } = this.props;\n\n const ws = workerLocations.filter(\n wl => workers.find(ww => ww.WorkerId === wl.WorkerId)).map(\n (wl) => {\n const w = workers.find(ww => ww.WorkerId === wl.WorkerId);\n const {\n ClosestSiteDescription,\n LocationDateTimeDescription,\n BatteryDescription,\n LocationDateTime,\n DeviceId,\n } = wl;\n return [\n // { img: w.Base64Image || '/img/user.png', status: WORKER_STATUS[LocationStatus] },\n w.Name,\n ClosestSiteDescription,\n w.WorkerId,\n LocationDateTimeDescription,\n BatteryDescription,\n LocationDateTime,\n DeviceId,\n ].map(t => t || 'not available');\n });\n return ws;\n }\n\n onSiteTileClick = (site) => {\n this.setState({ siteSelected: site });\n }\n\n render() {\n const { sites, workers, selectedWorkerId } = this.props;\n const { rowsSelected, siteSelected } = this.state;\n const records = this.getTableRecords();\n return (\n \n \n \n s.Active)} siteSelected={siteSelected} onClick={this.onSiteTileClick} />\n \n \n s.Active)}\n zones={this.state.zones}\n />\n \n \n \n \n \n \n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const { workers, sites } = state;\n return {\n workers: workers.all,\n sites: sites.all,\n workerLocations: workers.locations,\n selectedWorkerId: state.ui.selectedDashboardWorkerId,\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n setAllWorkers: ws => dispatch(WorkerActions.setWorkers(ws)),\n setAllSites: ws => dispatch(setSites(ws)),\n setWorkerLocations: ws => dispatch(setLocations(ws)),\n setSnackbar: ws => dispatch(setSnackbar(ws)),\n setLoading: ws => dispatch(setLoading(ws)),\n setSelectedWorker: workerId => dispatch(WorkerActions.setSelectedDashboardWorker(workerId)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Dashboard));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport {\n Grid, Button,\n} from '@material-ui/core';\nimport ApprovalsForm, {\n mapDispatchToProps,\n mapStateToProps,\n} from '../Approvals/ApprovalsForm';\n\n\nclass MyTimesheetForm extends ApprovalsForm {\n render() {\n const {\n timesheet, timesheetList,\n } = this.props;\n const index = this.getIndex();\n return (\n \n \n \n Back\n \n \n Next\n \n \n \n );\n }\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(MyTimesheetForm));\n","/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n// eslint-disable-next-line import/named\nimport { TimesheetTableClass, getLabels, getOptions } from '../Approvals/TimesheetTable';\nimport MyTimesheetForm from './MyTimesheetForm';\n\nconst emptyness = () => {};\nconst tableStyle = {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n minHeight: '100%',\n height: '100%',\n};\n\nexport class TimesheetsTable extends TimesheetTableClass {\n getOptions = () => {\n const { timesheet, worker, token } = this.props;\n const form = (\n \n );\n return { ...getOptions(form, emptyness, timesheet, worker), responsive: 'scroll' };\n }\n\n getLabels = () => getLabels(emptyness, emptyness, emptyness).slice(0, 5)\n}\n\nconst mapStateToProps = (state, ownProps) => {\n const {\n me,\n workers,\n } = state;\n const { WorkingDayDefaultStart, WorkingDayDefaultFinish } = me.company;\n const worker = workers.all.find(w => w.WorkerId === ownProps.timesheet.WorkerId);\n return {\n me: worker,\n company: me.company,\n worker,\n style: tableStyle,\n rows: ownProps.timesheet.getMyTimesheetTableRows(\n WorkingDayDefaultStart, WorkingDayDefaultFinish),\n };\n};\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles({}, { withTheme: true })(TimesheetsTable)));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n Grid,\n ExpansionPanel,\n ExpansionPanelSummary,\n Typography,\n ExpansionPanelDetails,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {\n getMyTimesheetEntries,\n getMyDistinctTimesheets,\n getMyTimesheetData,\n getMyTimesheetNotes,\n getWorkersFromToken,\n} from '../../API';\nimport Timesheet from '../../Models/Timesheet';\nimport { ApprovalsClass, mapDispatchToProps, styles } from '../Approvals/Approvals';\nimport TimesheetList from '../../Models/TimesheetList';\nimport MyTimesheetTable from './MyTimesheetTable';\nimport TimesheetNotesForm from '../Approvals/TimesheetNotesForm';\nimport TimesheetNotesList from '../Approvals/TimesheetNotesList';\n\nclass MyTimesheet extends ApprovalsClass {\n title='My Timesheet';\n\n componentDidMount() {\n if (this.props.token) {\n this.getData();\n }\n }\n\n componentDidUpdate() {\n if (this.props.token && !this.state.requested) {\n this.getData();\n }\n }\n\n getData = async () => {\n const { timesheet, token } = this.props;\n this.setState({ requested: true });\n const data = await Promise.all([\n getMyTimesheetData(token),\n getMyDistinctTimesheets(token),\n ]);\n const timesheets = data[1];\n const { sites, workers } = data[0];\n const mytimesheet = timesheet || timesheets[0];\n if (!mytimesheet) {\n this.setData(sites, workers, [],\n [], null, []);\n return;\n }\n const timesheetEntries = await getMyTimesheetEntries(token, mytimesheet.TimesheetId);\n const timesheetNotes = await getMyTimesheetNotes(token, mytimesheet.TimesheetId);\n this.setData(sites, workers, timesheets,\n timesheetEntries, mytimesheet.TimesheetId, timesheetNotes);\n /* I know how bad this is */\n // eslint-disable-next-line no-undef\n document.body.removeAttribute('style');\n }\n\n render() {\n const {\n timesheet, classes, token, numNotes,\n } = this.props;\n const { expanded } = this.state;\n if (!timesheet) {\n return
;\n }\n const table = timesheet && (\n \n );\n return (\n
\n \n \n \n }>\n {`Timesheet Notes (${numNotes})`}\n \n \n \n \n \n \n \n \n \n \n { table }\n \n \n
\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {\n me, timesheets, timesheetEntries, sites, workers,\n timesheetNotes,\n } = state;\n const timesheetList = new TimesheetList(timesheets.all);\n\n if (!timesheets.approvalCurrentTimesheetId) {\n return { token: me.auth.token };\n }\n const worker = workers.all.find(\n w => w.WorkerId === timesheets.approvalCurrentTimesheetId.TimesheetId);\n const timesheet = new Timesheet(timesheets.approvalCurrentTimesheetId);\n timesheet.setCompany(me.company);\n timesheet.setTimesheetEntryList(timesheetEntries.all.filter(\n t => t.TimesheetId === timesheet.TimesheetId));\n timesheet.timesheetEntryList.setSiteList(sites.all);\n return {\n timesheetList,\n timesheet,\n worker,\n me: worker,\n token: me.auth.token,\n numNotes: timesheetNotes.all.length,\n };\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(MyTimesheet)));\n","import React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport MUIDataTable from 'mui-datatables';\nimport Paper from '@material-ui/core/Paper';\nimport { assign } from '../../Utils';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n marginTop: theme.spacing.unit * 3,\n overflowX: 'auto',\n },\n table: {\n minWidth: 900,\n },\n});\n\n\nclass UsersTable extends Component {\n state = {\n rowsPerPage: 50,\n }\n\n handleChangeRowsPerPage = (rowsPerPage) => {\n this.setState({ rowsPerPage });\n }\n\n render() {\n const {\n rows, labels, onRowClick,\n } = this.props;\n if (!rows.length) {\n return null;\n }\n const options = {\n filterType: 'multiselect',\n selectableRows: false,\n responsive: 'scroll',\n rowsPerPage: this.state.rowsPerPage,\n rowsPerPageOptions: [10, 20, 50, 100],\n onRowClick: (a) => {\n onRowClick(a[a.length - 1]);\n },\n onChangeRowsPerPage: this.handleChangeRowsPerPage,\n };\n return (\n
\n \n
\n\n );\n }\n}\n\nexport default UsersTable;\n","import React from 'react';\nimport { render } from 'react-dom';\nimport matchSorter from 'match-sorter';\nimport {\n Checkbox,\n} from '@material-ui/core';\n\nconst statuses = {\n 0: 'draft',\n 1: 'approved',\n 2: 'locked',\n};\n\nconst test = {\n true: 1,\n false: 0,\n};\n\n\nexport const usersTableColumns = [\n {\n name: 'Photo',\n options: {\n filter: false,\n customBodyRender: (value) => {\n return (\n value ? : No Photo\n );\n },\n },\n },\n {\n name: 'Payroll ID',\n options: {\n filter: false,\n },\n },\n {\n name: 'Device ID',\n },\n {\n name: 'name',\n },\n {\n name: 'Enabled',\n options: { \n customBodyRender: v => ,\n customFilterListOptions: { render: v => `Enabled` },\n filterType: \"checkbox\",\n filterOptions: {\n names: [true],\n },\n },\n },\n {\n name: 'Worker',\n options: { \n customBodyRender: v => ,\n customFilterListOptions: { render: v => `Worker` },\n filterType: \"checkbox\",\n filterOptions: {\n names: [true],\n },\n },\n },\n {\n name: 'Supervisor',\n options: { \n customBodyRender: v => ,\n customFilterListOptions: { render: v => `Supervisor` },\n filterType: \"checkbox\",\n filterOptions: {\n names: [true],\n },\n },\n },\n {\n name: 'Administrator',\n options: { \n customBodyRender: v => ,\n customFilterListOptions: { render: v => `Administrator` },\n filterType: \"checkbox\",\n filterOptions: {\n names: [true],\n },\n },\n },\n {\n name: 'WorkerId',\n options: { \n display: false,\n filter: false,\n }\n }\n];\n\nexport const usersForSupervisorTableColumns = [\n {\n name: 'Payroll ID',\n options: { customBodyRender: v => },\n },\n {\n name: 'name',\n options: { customBodyRender: v => },\n },\n {\n name: 'Enabled',\n options: { customBodyRender: v => },\n },\n {\n name: 'Worker',\n options: { customBodyRender: v => },\n },\n {\n name: 'Supervisor',\n options: { customBodyRender: v => },\n },\n {\n name: 'Administrator',\n options: { customBodyRender: v => },\n },\n\n];\n","import { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { assign } from '../../Utils';\n\n\nclass ObjectEditForm extends Component {\n save(toSave) {\n }\n\n handleComplete = () => {\n const {\n originalObj, initialObj, onComplete,\n } = this.props;\n const { editingObj } = this.state;\n const toSave = assign(originalObj, editingObj);\n this.save(toSave);\n this.setState({ editingObj: initialObj });\n onComplete();\n }\n\n handleTextChange = ({ target }) => {\n const { editingObj } = this.state;\n const {\n name, value,\n } = target;\n const edited = assign(editingObj, { [name]: value });\n this.setState({ editingObj: edited });\n }\n\n handleSelectChange = ({ target }) => {\n const { editingObj } = this.state;\n const {\n name, value,\n } = target;\n this.setState({ editingObj: assign(editingObj, { [name]: value }) });\n }\n\n handleCheckboxChange = ({ target }, checked) => {\n const { editingObj } = this.state;\n const { name } = target;\n this.setState({ editingObj: assign(editingObj, { [name]: !!checked }) });\n }\n}\n\nObjectEditForm.propTypes = {\n originalObj: PropTypes.object.isRequired,\n onComplete: PropTypes.func.isRequired,\n};\n\nexport default ObjectEditForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ValidatorForm, TextValidator } from 'react-material-ui-form-validator';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport classNames from 'classnames';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\n\n\nimport {\n Select,\n MenuItem,\n Grid,\n FormHelperText,\n FormControlLabel,\n Input,\n FormControl,\n Switch,\n FormGroup,\n Button,\n TextField,\n} from '@material-ui/core';\nimport Dropzone from 'react-dropzone';\nimport ObjectEditForm from '../Common/ObjectEditForm';\nimport styles from '../Common/FormStyles';\nimport { WorkerActions } from '../../redux/actions/AllActions';\nimport {\n base64FromFile,\n resizeB64Image,\n assign,\n fixImageRotaionUsingExif,\n validateEmail,\n validateMobile,\n arrayUniqueByKey,\n} from '../../Utils';\n\n\nconst colStlye = { paddingLeft: '40px' };\n\nexport class UserForm extends ObjectEditForm {\n state = {\n editingObj: {},\n rawImage: null,\n }\n\n save = async (user) => {\n const { rawImage } = this.state;\n if (user.WorkerId) {\n this.props.editWorker(assign(user,\n { Base64Image: rawImage || user.Base64Image }));\n } else {\n const sending = assign(user, {\n WorkerId: `no-id${Math.random()}`,\n Base64Image: rawImage || user.Base64Image,\n });\n this.props.createWorker(sending);\n }\n }\n\n handleDeviceSelect = (device) => {\n const { editingObj } = this.state;\n this.setState({ editingObj: { ...editingObj, DeviceId: device ? device.DeviceId : ''} });\n }\n\n validateMobile(value) {\n return validateMobile(value);\n }\n\n validateEmail(value) {\n return validateEmail(value);\n }\n\n handleUserTypeChange({ target }) {\n }\n\n handleIsWorkerChange = ({ target }, checked) => {\n const { editingObj } = this.state;\n const { Supervisor } = editingObj;\n this.setState({\n editingObj: assign(editingObj, {\n IsWorker: !!checked,\n Supervisor: checked ? Supervisor : '',\n }),\n });\n }\n\n onFileUpload = async (acceptedFiles, rejectedFiles) => {\n if (rejectedFiles.length) {\n // eslint-disable-next-line no-undef\n alert('unexpected photo rejection - please try something else');\n return;\n }\n try {\n const f = acceptedFiles[0];\n const blobFixed = await fixImageRotaionUsingExif(f);\n const b64 = await base64FromFile(blobFixed);\n const resizedImgB64 = await resizeB64Image(b64, 64, 64, 'jpeg', 0.6);\n this.setState({ rawImage: resizedImgB64 });\n this.handleTextChange({ target: { Base64Image: resizedImgB64 } });\n } catch (e) {\n console.warn(e);\n // eslint-disable-next-line no-undef\n alert('unexpected photo rejection - please try something else');\n }\n }\n\n deletePhoto = () => {\n this.setState({ rawImage: null });\n this.handleTextChange({ target: { Base64Image: null } });\n }\n\n render() {\n const {\n originalObj,\n supervisors,\n classes,\n onCancel,\n devices,\n extraDevices,\n agencyConsultants,\n labourAgencies,\n } = this.props;\n const { editingObj, rawImage } = this.state;\n const user = assign(originalObj, editingObj);\n const {\n IsEnabled, IsAdministrator, IsWorker, Name,\n IsSupervisor, Email, EmailNotifications, PayrollId,\n Mobile, MobileNotifications, Supervisor,\n DeviceId, Base64Image, AgencyConsultantId, IsArchived,\n } = user;\n const img = rawImage || Base64Image;\n const mobileValid = this.validateMobile(Mobile);\n const emailValid = this.validateEmail(Email);\n const payrollValid = !!PayrollId;\n const nameValid = !!Name;\n const workerRoleValid = !IsEnabled || (IsAdministrator || IsSupervisor || IsWorker);\n const notifsValid = (mobileValid && MobileNotifications) || (emailValid && EmailNotifications);\n \n const supervisorValid = !IsWorker || (IsWorker && !!Supervisor);\n const allValid = notifsValid && nameValid && payrollValid && supervisorValid;\n const supervisorOptions = supervisors.map(\n (w, i) => ({w.Name}));\n console.log(supervisors)\n const agencyOptions = agencyConsultants.map(\n (w, i) => {\n const name = labourAgencies.find(l => l.LabourAgencyId === w.LabourAgencyId).Name;\n return {`(${name}) ${w.Name}`}\n });\n const selectedDevice = [...devices, ...extraDevices].find(d => d.DeviceId === DeviceId);\n return (\n \n \n {}}\n >\n \n \n \n \n \n \n \n \n {\n this.handleDeviceSelect(newValue);\n }}\n value={selectedDevice}\n getOptionLabel={(opt) => opt.Description}\n renderInput={(params) => }\n />\n Select Device\n \n \n \n \n \n \n \n \n \n \n )}\n variant=\"outlined\"\n >\n { supervisorOptions }\n \n Select Supervisor\n \n \n \n \n \n )}\n variant=\"outlined\"\n >\n No Agency\n { agencyOptions }\n \n Select Agency\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {({ getRootProps, getInputProps, isDragActive }) => (\n \n { /* eslint-disable-next-line jsx-a11y/alt-text */}\n { img && }\n \n
\n )}\n \n \n {'Click or drag & drop to select an image'}\n \n \n \n \n \n \n )}\n label=\"Email Notifications\"\n />\n \n \n \n \n \n )}\n label=\"Mobile Notifications\"\n />\n \n \n \n \n \n)}\n label=\"Admin\"\n />\n \n \n \n \n\n \n)}\n label=\"Supervisor\"\n />\n \n \n \n \n \n)}\n label=\"Worker\"\n />\n \n \n \n \n \n)}\n label=\"Enabled\"\n />\n \n \n \n \n \n)}\n label=\"Archived (disabled only)\"\n />\n \n \n \n \n \n \n {notifsValid ? 'nofications ok' : 'Select a notification type'}\n \n \n \n \n {workerRoleValid ? 'user role ok' : 'Select a user role'}\n \n \n \n \n {supervisorValid ? 'supervisor ok' : 'Select a supervisor'}\n \n \n \n \n \n \n Cancel\n \n \n \n \n Save\n \n \n \n \n \n \n \n );\n }\n}\n\nUserForm.propTypes = assign(ObjectEditForm.propTypes, {\n originalObj: PropTypes.object.isRequired,\n});\n\nconst mapStateToProps = state => ({\n supervisors: state.workers.all.filter(w => !!w.IsSupervisor && !w.IsSuperAdministrator && !w.IsArchived),\n devices: state.me.devices,\n});\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n editWorker: x => dispatch(WorkerActions.editWorker(x)),\n createWorker: x => dispatch(WorkerActions.createWorker(x)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(UserForm)));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport {\n Drawer,\n IconButton,\n Fab,\n} from '@material-ui/core';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport AddIcon from '@material-ui/icons/Add';\nimport ArchiveIcon from '@material-ui/icons/Archive';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { getWorkers, getAvailableDevices,\n getAllDevicesAllCompanies, getCompanies,\n getAllUsersAllCompanies, getAllAgencyConsultants,\n getLabourAgencies,\n} from '../../API';\nimport { WorkerActions, setDevices, setSnackbar } from '../../redux/actions/AllActions';\nimport { assign } from '../../Utils';\nimport UsersTable from './UsersTable';\nimport { usersTableColumns } from './UsersTableColumns';\nimport UsersForm from './UsersForm';\nimport { styles } from '../Common/GlobalStyles';\n\n\nconst initialUser = {\n DeviceId: '',\n PayrollId: '',\n Name: '',\n Email: '',\n Mobile: '',\n MobileNotifications: false,\n EmailNotifications: false,\n IsEnabled: true,\n IsWorker: true,\n IsSupervisor: false,\n IsAdministrator: false,\n Supervisor: '',\n IsArchived: false,\n};\n\n\n// Create ManageUsers Container\nclass ManageUsersContainer extends Component {\n // Set up state, fileter's default is showAll, editingUser is null\n state = {\n editingUser: null,\n open: false,\n snackOpen: false,\n extraDevices: [],\n showArchived: false,\n }\n\n // initialize constructor\n\n // Set initial\n componentDidMount() {\n setTimeout(() => {\n this.setInitialData();\n //this.pollNewDevices();\n }, 1000);\n }\n\n componentWillUnmount() {\n clearInterval(this.interval);\n }\n\n createSuperUserDeviceDescription(device, workers, companies) {\n const company = companies.find(c => c.CompanyId === device.CompanyId);\n const worker = workers.find(w => w.DeviceId === device.DeviceId);\n const desc = `* ${device.DeviceId} (${company.Name}) ${worker ? worker.Name.substr(0, 10) : ''}`;\n return desc;\n }\n\n // using Api to get workers and using Redux to update view.\n setInitialData = async () => {\n const workers = await getWorkers();\n const agencyConsultants = await getAllAgencyConsultants();\n const labourAgencies = await getLabourAgencies();\n this.setState({ agencyConsultants, labourAgencies });\n\n if (workers.filter(u => u.IsEnabled).length < 3) {\n this.setState({ snackOpen: true });\n }\n\n this.props.setWorkers(workers);\n if (this.props.currentUser.IsSuperAdministrator) {\n const allDevicesAllCompanies = await getAllDevicesAllCompanies();\n const allCompanies = await getCompanies();\n const allWorkersAllCompanies = await getAllUsersAllCompanies();\n /* eslint-disable */\n allDevicesAllCompanies.sort((a, b) => {\n return a.CompanyId < b.CompanyId ? -1 : 1;\n });\n const extraDevices = allDevicesAllCompanies.filter(\n (d) => d.DeviceId[0] === '8' || d.DeviceId[0] === '3' || d.DeviceId[0] == '9').map(\n d => ({ ...d, Description: this.createSuperUserDeviceDescription(\n d, allWorkersAllCompanies, allCompanies)}));\n /* eslint-enable */\n this.setState({ extraDevices });\n }\n }\n\n pollNewDevices = async () => {\n const devices = await getAvailableDevices();\n\n if (!devices) {\n return;\n }\n\n const newDevice = devices.find(\n d => d.DeviceId\n && !this.props.users.find(d2 => d.DeviceId === d2.DeviceId)\n && !this.props.devices.find(d2 => d.DeviceId === d2.DeviceId));\n\n if (newDevice && !newDevice.Assigned) {\n this.props.setSnackbar({\n message: `Device ready to assign ${newDevice.Description}`,\n openTime: new Date().getTime(),\n });\n }\n this.props.setDevices(devices);\n }\n\n selectChange = (event) => {\n this.setState({ filter: event.target.value });\n }\n\n filterUsers = (users) => {\n if(this.state.showArchived) {\n return users;\n }\n return users.filter(u => !u.IsArchived);\n }\n\n onEditClick = (workerId) => {\n const user = this.props.users.find(u => u.WorkerId === workerId);\n this.setState({\n editingUser: user,\n open: true,\n });\n }\n\n onAddUserClick = () => {\n this.setState({\n editingUser: initialUser,\n open: true,\n });\n }\n\n onComplete = () => {\n this.setState({\n editingUser: null,\n open: false,\n });\n }\n\n toggleDrawer = (open) => {\n this.setState({ open });\n }\n\n render() {\n const {\n users, supervisors, classes,\n } = this.props;\n const { editingUser, open, extraDevices, agencyConsultants, labourAgencies } = this.state;\n\n const tableRows = this.filterUsers(users);\n\n const tablerr = tableRows.map(n => [\n n.Base64Image || '',\n n.PayrollId || '',\n n.DeviceId || '',\n n.Name || '',\n !!n.IsEnabled,\n !!n.IsWorker,\n !!n.IsSupervisor,\n !!n.IsAdministrator,\n n.WorkerId,\n ]);\n const openClass = open ? classes.drawerOpenWide : classes.drawerHidden;\n return (\n
\n \n \n {open && (\n
{ this.toggleDrawer(false); }}>\n \n \n \n
\n )\n }\n {open && editingUser && (\n
\n \n
\n )}\n \n
\n \n {'Always setup company and sites before supervisors and workers.'}\n \n )}\n action={[\n this.setState({ snackOpen: false })}\n >\n \n ,\n ]}\n />\n {\n this.toggleDrawer(true); this.onAddUserClick();\n }}\n >\n \n \n \n
\n {\n this.setState({ showArchived: !this.state.showArchived })\n }}\n >\n \n \n \n
\n \n \n
\n );\n }\n}\n\n\nconst mapStateToProps = (state) => {\n const { workers, me } = state;\n const supervisors = workers.all.filter(x => x.IsSupervisor).map(\n x => assign(x, { Supervisor: x.WorkerId }));\n return {\n users: workers.all,\n supervisors,\n devices: me.devices,\n currentUser: me.me,\n };\n};\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n setWorkers: x => dispatch(WorkerActions.setWorkers(x)),\n setDevices: x => dispatch(setDevices(x)),\n setSnackbar: x => dispatch(setSnackbar(x)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(ManageUsersContainer)));\n\n// export default withRouter(ManageUsersContainer);\n","import React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { formatDuration } from '../../Utils';\nimport styles from '../Common/FormStyles';\nimport {\n FormHelperText,\n InputLabel,\n Input,\n Grid,\n FormControl,\n} from '@material-ui/core';\n\nclass DurationInput extends Component {\n\n onChange = ({ target }) => {\n const { value, onChange, name } = this.props;\n const { mins, hours } = this.parseTimeDuration(value);\n const change = {\n hours,\n mins,\n };\n change[target.name] = parseInt(target.value);\n onChange({ target: {\n name,\n value: formatDuration(change.hours, change.mins),\n }\n });\n }\n\n parseTimeDuration = (durationStr) => {\n const parts = durationStr.split(':');\n return {\n hours: parseInt(parts[0]),\n mins: parseInt(parts[1]),\n };\n }\n\n render() {\n const { value, label, id, classes } = this.props;\n const { mins, hours } = this.parseTimeDuration(value);\n const minVal = mins > 9 ? mins : `0${mins}`;\n const hrsVal = hours > 9 ? hours : `0${hours}`;\n return (\n \n \n \n { label }\n \n \n \n \n \n \n hrs\n \n \n \n \n \n \n \n min\n \n \n \n \n )\n }\n}\n\nexport default withStyles(styles, { withTheme: true })(DurationInput);\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ValidatorForm, TextValidator } from 'react-material-ui-form-validator';\nimport {\n Select,\n MenuItem,\n Grid,\n FormControlLabel,\n InputLabel,\n FormHelperText,\n Input,\n FormControl,\n Switch,\n Typography,\n Button,\n Paper,\n TextField,\n} from '@material-ui/core';\nimport { setCompany, setLoading } from '../../redux/actions/AllActions';\nimport styles from '../Common/FormStyles';\nimport DurationInput from '../Common/DurationInput';\nimport { assign } from '../../Utils';\nimport { getCompany } from '../../API';\n\n\nclass SettingsForm extends Component {\n\n componentDidMount() {\n getCompany().then(this.props.setCompany);\n }\n\n onSaveClick = () => {\n const { company, setLoading, setCompany } = this.props;\n setLoading(true);\n const comped = assign(company, { needSave: true });\n this.props.setCompany(comped);\n setTimeout(() => {\n getCompany().then((c) => {\n setCompany(c);\n setLoading(false);\n });\n }, 1000);\n }\n\n handleTextChange = ({ target }) => {\n const { name, value } = target;\n const { company } = this.props;\n const comped = assign(company, { [name]: value });\n this.props.setCompany(comped);\n }\n\n handleSwitchChange = ({ target }, value) => {\n this.handleTextChange({\n target: {\n name: target.name,\n value,\n },\n });\n }\n\n handleSelectChange = (e) => {\n this.handleTextChange(e);\n }\n\n render() {\n const { classes, company } = this.props;\n const days = ['Sunday', 'Monday', 'Tuesday',\n 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const opts = days.map((d, i) => {d});\n\n const {\n Name,\n StartDayOfWeek,\n MinimumWorkingDayDuration,\n DailyTimesheetProcessing,\n DailyApprovalReminder,\n WorkingDayEarliestStart,\n WorkingDayDefaultStart,\n WorkingDayDefaultFinish,\n WorkingDayLatestFinish,\n MinimumLunchStart,\n DefaultLunchStart,\n DefaultLunchEnd,\n MaximumLunchEnd,\n MinimumWorkingTimeToRemoveLunchBreak,\n PrivateModeStart,\n PrivateModeFinish,\n GlitchRemovalPeriod,\n IsSmsEnabled,\n IsEmailEnabled,\n Timezone,\n } = company;\n const headingStyle = { paddingTop: '15px' };\n\n return (\n \n {}}\n >\n \n \n \n < Typography variant=\"h6\" style={headingStyle}>Company Info\n \n \n \n \n \n \n \n \n )}\n label=\"Sms Enabled\"\n />\n \n \n \n )}\n label=\"Email Enabled\"\n />\n \n \n \n TimeZone\n \n \n {\"New Zealand Standard Time\"}\n \n \n {\"Australia/Perth\"}\n \n \n \n \n { /*\n \n \n Start Day Of Week\n \n \n )}\n variant=\"outlined\"\n >\n { opts }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Working Day\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Lunch Break\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 Advanced Settings\n \n \n \n )}\n label=\"Private Mode\"\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n */ }\n \n \n this.handleTextChange(\n { target: { name: 'needSave', value: true } })}\n >\n Save\n \n \n \n \n \n \n\n \n );\n }\n}\n\n\nconst mapStateToProps = (state) => {\n const { me } = state;\n return {\n company: me.company,\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n setCompany: x => dispatch(setCompany(x)),\n setLoading: x => dispatch(setLoading(x)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(SettingsForm)));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport Button from '@material-ui/core/Button';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n Grid, Switch, FormControl, FormControlLabel, FormGroup, Select, Input, MenuItem, InputLabel\n} from '@material-ui/core';\nimport wkt from 'terraformer-wkt-parser';\nimport * as turf from '@turf/turf';\nimport { ValidatorForm, TextValidator } from 'react-material-ui-form-validator';\nimport { assign } from '../../Utils';\nimport styles from '../Common/FormStyles';\nimport {\n createSite,\n updateSite,\n} from '../../redux/actions/AllActions';\nimport {\n getSiteDeviceSettings\n} from '../../API';\n\n// Mode names\nconst DEEP_SLEEP_INTERVAL_MODE = 1;\nconst GPS_SLEEP_MODE = 5;\nconst GPS_ALWAYS_ON_MODE = 6;\nconst POWER_SAVING_MODE = 7;\n\nclass SiteForm extends Component {\n state = {\n Name: '',\n checked: undefined,\n MinsBeforeStart: 10,\n MinsAfterStart: 10,\n StartMode: GPS_SLEEP_MODE,\n StartInterval: 5,\n DuringMode: GPS_SLEEP_MODE,\n DuringInterval: 5,\n MinsBeforeFinish: 10,\n MinsAfterFinish: 10,\n FinishMode: GPS_SLEEP_MODE,\n FinishInterval: 5,\n OvertimeMode: GPS_SLEEP_MODE,\n OvertimeInterval: 5,\n SleepMode: DEEP_SLEEP_INTERVAL_MODE,\n SleepInterval: 120,\n DistanceBufferMeters: 0,\n MinimumWorkingTimeHoursForBreak: 0,\n MinimumBreakTimeMinsForWorkDay: 0,\n ShouldUseSkyhook: true,\n }\n\n componentDidMount() {\n if(!this.props.site.SiteId)\n {\n return;\n }\n \n getSiteDeviceSettings(this.props.site.SiteId).then(siteDeviceSettings => {\n this.setState({ \n MinsBeforeStart: siteDeviceSettings.MinsBeforeStart,\n MinsAfterStart: siteDeviceSettings.MinsAfterStart,\n StartMode: siteDeviceSettings.StartMode,\n StartInterval: siteDeviceSettings.StartInterval,\n DuringMode: siteDeviceSettings.DuringMode,\n DuringInterval: siteDeviceSettings.DuringInterval,\n MinsBeforeFinish: siteDeviceSettings.MinsBeforeFinish,\n MinsAfterFinish: siteDeviceSettings.MinsAfterFinish,\n FinishMode: siteDeviceSettings.FinishMode,\n FinishInterval: siteDeviceSettings.FinishInterval,\n OvertimeMode: siteDeviceSettings.OvertimeMode,\n OvertimeInterval: siteDeviceSettings.OvertimeInterval,\n SleepMode: siteDeviceSettings.SleepMode,\n SleepInterval: siteDeviceSettings.SleepInterval,\n ShouldUseSkyhook: siteDeviceSettings.ShouldUseSkyhook,\n });\n });\n \n }\n\n handleChange = ({ target }) => {\n const { name, value } = target;\n this.setState({ [name]: value });\n };\n\n getOptionsForRegularModes = () => {\n return [DEEP_SLEEP_INTERVAL_MODE, GPS_SLEEP_MODE, GPS_ALWAYS_ON_MODE, POWER_SAVING_MODE].map((s, i) => (\n \n { s }\n \n )) \n }\n\n getOptionsForSleepModes = () => {\n return [DEEP_SLEEP_INTERVAL_MODE, GPS_SLEEP_MODE].map((s, i) => (\n \n { s }\n \n )) \n }\n\n // eslint-disable-next-line no-unused-vars\n handleCheckboxChange = ({ target }, checked) => {\n this.setState({ checked });\n };\n\n handleSaveClick = () => {\n const { \n Name, \n checked, \n SitePayrollId,\n MinsBeforeStart,\n MinsAfterStart,\n StartMode,\n StartInterval,\n DuringMode,\n DuringInterval,\n MinsBeforeFinish,\n MinsAfterFinish,\n FinishMode,\n FinishInterval,\n OvertimeMode,\n OvertimeInterval,\n SleepMode,\n SleepInterval,\n MinimumBreakTimeMinsForWorkDay,\n MinimumWorkingTimeHoursForBreak,\n DistanceBufferMeters,\n ShouldUseSkyhook,\n } = this.state;\n const { site, polygon } = this.props;\n const p = polygon || wkt.convert(site.GeoJSON.geometry);\n const updatedSite = {\n Name: Name || site.Name,\n Active: checked === undefined ? site.Active : checked,\n WKT: p,\n GeoJSON: turf.feature(wkt.parse(p)),\n SitePayrollId: SitePayrollId || site.SitePayrollId,\n DistanceBufferMeters: DistanceBufferMeters || site.DistanceBufferMeters,\n MinimumWorkingTimeHoursForBreak: MinimumWorkingTimeHoursForBreak || site.MinimumWorkingTimeHoursForBreak,\n MinimumBreakTimeMinsForWorkDay: MinimumBreakTimeMinsForWorkDay || site.MinimumBreakTimeMinsForWorkDay,\n SiteDeviceSettings: {\n SiteId: site.SiteId || 0,\n MinsBeforeStart,\n MinsAfterStart,\n StartMode,\n StartInterval,\n DuringMode,\n DuringInterval,\n MinsBeforeFinish,\n MinsAfterFinish,\n FinishMode,\n FinishInterval,\n OvertimeMode,\n OvertimeInterval,\n SleepMode,\n SleepInterval,\n ShouldUseSkyhook,\n }\n };\n debugger;\n const toSave = assign(site, updatedSite);\n if (toSave.SiteId) {\n this.props.updateSite(toSave);\n } else {\n this.props.createSite(assign(toSave, { SiteId: `${Math.random()}` }));\n }\n this.props.onCancelClick();\n }\n\n isValid = () => {\n const { Name } = this.state;\n const { site, polygon } = this.props;\n const { GeoJSON, Geom } = site;\n return !!((Name || site.Name) && (polygon || GeoJSON || Geom.Geography.WellKnownText));\n }\n\n render() {\n const {\n classes, onCancelClick, site, IsSuperAdministrator\n } = this.props;\n\n const {\n Name,\n checked,\n SitePayrollId, \n DistanceBufferMeters,\n MinimumWorkingTimeHoursForBreak,\n MinimumBreakTimeMinsForWorkDay,\n ShouldUseSkyhook,\n } = this.state;\n\n return (\n
\n {}}\n >\n \n \n \n \n \n \n \n { IsSuperAdministrator && \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Start Mode\n \n )}\n variant=\"outlined\"\n > { this.getOptionsForRegularModes() }\n \n \n \n \n \n \n \n \n \n \n During Mode\n \n )}\n variant=\"outlined\"\n > { this.getOptionsForRegularModes() }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Finish Mode\n \n )}\n variant=\"outlined\"\n > { this.getOptionsForRegularModes() }\n \n \n \n \n \n \n \n \n \n \n Overtime Mode\n \n )}\n variant=\"outlined\"\n > { this.getOptionsForRegularModes() }\n \n \n \n \n \n \n \n \n \n \n Sleep Mode\n \n )}\n variant=\"outlined\"\n > { this.getOptionsForSleepModes() }\n \n \n \n \n \n \n \n \n \n \n { \n this.setState({ ShouldUseSkyhook: !ShouldUseSkyhook })\n }}\n />\n }\n label=\"Should Use Skyhook\"\n />\n \n \n }\n \n \n \n \n \n \n Cancel\n \n \n \n \n Save\n \n \n \n \n
\n );\n }\n}\n\nSiteForm.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\n\n// eslint-disable-next-line no-unused-vars\nconst mapStateToProps = _state => ({});\n\n// eslint-disable-next-line no-unused-vars\nconst mapDispatchToProps = (dispatch, _ownProps) => ({\n createSite: x => dispatch(createSite(x)),\n updateSite: x => dispatch(updateSite(x)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(SiteForm)));\n","import React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport AddIcon from '@material-ui/icons/AddCircleOutline';\n\n\nconst styles = theme => ({\n root: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper,\n },\n nested: {\n paddingLeft: theme.spacing.unit * 4,\n },\n});\n\nconst newSite = {\n Name: '',\n Active: true,\n WKT: '',\n Geom: { Geography: { WellKnownText: '' } },\n SiteId: '',\n};\n\nclass SitesList extends Component {\n handleClick = () => {\n this.setState(state => ({ open: !state.open }));\n };\n\n render() {\n const { sites, onSiteClick, onNewSiteClick } = this.props;\n\n const items = sites.map((s, i) => (\n onSiteClick(s)}>\n \n \n ));\n\n return (\n Sites}\n >\n onNewSiteClick(newSite)}>\n \n \n \n { items }\n \n );\n }\n}\n\nexport default withStyles(styles)(SitesList);\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React, { Component } from 'react';\nimport ReactMapboxGl, { GeoJSONLayer } from 'react-mapbox-gl';\nimport ErrorBoundary from 'react-error-boundary';\nimport wkt from 'terraformer-wkt-parser';\nimport * as turf from '@turf/turf';\nimport MapboxDraw from '@mapbox/mapbox-gl-draw';\nimport { MAPBOX_TOKEN, SITES_MAP_URI, SITE_FILL_STYLE, ZONE_FILL_STYLE } from '../../Constants/Constants';\n// Don't forget to import the CSS\nimport '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';\n\n\nconst Map = ReactMapboxGl({\n accessToken: MAPBOX_TOKEN,\n});\n\nclass UpdateSiteMap extends Component {\n state = {\n createFeature: null,\n bbox: undefined,\n }\n\n componentDidUpdate(prevProps, prevState) {\n const prevSite = prevProps.newSite || prevProps.editingSite;\n const newSite = this.props.newSite || this.props.editingSite;\n \n if (this.draw && (!newSite || (prevSite && (newSite.SiteId !== prevSite.SiteId)))) {\n this.deleteDrawFeatures();\n }\n\n if(this.props.editingSite && !prevProps.editingSite) {\n this.setState({ bbox: undefined });\n this.draw.add(JSON.parse(JSON.stringify(this.props.editingSite.GeoJSON)));\n }\n\n if (prevState.createFeature) {\n // I know its bad but I'm doing it anyways cos it works\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ createFeature: null });\n }\n }\n\n shouldComponentUpdate() {\n return true;\n }\n\n deleteDrawFeatures = () => {\n const { features } = this.draw.getAll();\n features.forEach(f => this.draw.delete(f.id));\n }\n\n onDrawModeChange = (e) => {\n console.log(e);\n if(e.mode == 'draw_polygon'){\n if(this.props.editingSite) {\n const { features } = this.draw.getAll();\n const toDelete = features.filter(x => !!x.properties.SiteId);\n toDelete.forEach(x => this.draw.delete(x.id));\n }\n }\n }\n\n addDraw = (map) => {\n if (map._controls.length < 3) {\n this.map = map;\n this.draw = new MapboxDraw({\n displayControlsDefault: false,\n controls: {\n polygon: true,\n trash: true,\n },\n });\n\n map.addControl(this.draw);\n map.on('draw.create', this.drawCreate);\n map.on('draw.delete', this.drawDelete);\n map.on('draw.update', this.drawUpdate);\n map.on('draw.modechange', (e) => this.onDrawModeChange(e));\n }\n }\n\n drawCreate = (e) => {\n const { features } = this.draw.getAll();\n const [lastFeature] = features.slice(-1);\n if (features.length > 1) {\n this.draw.delete(features[0].id);\n }\n // do not do this unless we have a site to edit\n this.props.onDrawCreate(\n wkt.convert(lastFeature.geometry));\n this.setState({ createFeature: wkt.convert(lastFeature.geometry) });\n }\n\n drawDelete = (e) => {\n this.props.onDrawDelete();\n this.setState({ createFeature: null });\n }\n\n drawUpdate = (e) => {\n const { features } = this.draw.getAll();\n const feature = features[0];\n this.props.onDrawUpdate(wkt.convert(feature.geometry));\n this.setState({ createFeature: wkt.convert(feature.geometry) });\n }\n\n getSiteFeatureCollection = () => {\n const { sites, editingSite, newSite } = this.props;\n\n const { createFeature } = this.state;\n if (createFeature) {\n // const featts = turf.buffer(turf.feature(wkt.parse(createFeature)), 50, { units: 'metres' });\n const featts = turf.feature(wkt.parse(createFeature));\n return turf.featureCollection([featts]);\n }\n\n const allSites = (editingSite && !newSite) ? [editingSite] : sites.filter(\n s => !!(s.GeoJSON || s.Geom),\n );\n\n const feats = allSites.map((b) => {\n const g = b.GeoJSON || turf.feature(wkt.parse(b.Geom.Geography.WellKnownText));\n const geom = g;\n geom.properties = { SiteId: b.SiteId };\n return geom;\n });\n return turf.featureCollection(feats);\n }\n\n getBounds = () => {\n const { sites } = this.props;\n\n if (sites.length > 0) {\n const bbox = turf.bbox(\n this.getSiteFeatureCollection());\n return [[bbox[0], bbox[1]], [bbox[2], bbox[3]]];\n }\n // nz bbox\n return [[180.4833, -34.05265942137597],\n [163.65234, -47.57652]];\n }\n\n getBBoxPadding = () => {\n const { sites } = this.props;\n if (sites.length > 1) {\n return 200;\n }\n // nz bbox\n return 10;\n }\n\n handleStyleLoad = (map) => {\n map.resize();\n }\n\n handleMapClick = (map, e) => {\n const features = map.queryRenderedFeatures(e.point);\n if (features.length) {\n this.props.onMapClick(features[0].properties.SiteId);\n }\n }\n\n handleZoom = (map, e) => {\n !this.state.bbox && this.setState({ bbox: true });\n }\n\n handleMouseMove = (map, e) => {\n const features = map.queryRenderedFeatures(e.point);\n // eslint-disable-next-line no-undef\n const mapelem = document.getElementsByClassName('mapboxgl-canvas')[0];\n if (features.find(f => f.source === 'geojase')) {\n mapelem.style.cursor = 'pointer';\n } else {\n mapelem.style.cursor = 'grab';\n }\n }\n\n render() {\n const { newSite, editingSite, zones } = this.props;\n const enableClick = !(newSite || editingSite);\n const bbox = this.getBounds();\n return (\n
\n \n console.warn(e)}\n style={this.props.baseMapUri}\n fitBounds={!this.state.bbox && bbox}\n fitBoundsOptions={{ padding: this.getBBoxPadding() }}\n onZoomEnd={this.handleZoom}\n onMove={this.handleMove}\n onRender={this.addDraw}\n onStyleLoad={this.handleStyleLoad}\n containerStyle={{\n height: 'calc(100vh - 60px)',\n width: '100%',\n }}\n onClick={enableClick && this.handleMapClick}\n onMouseMove={this.handleMouseMove}\n onMouseOut={this.handleMouseMove}\n onMouseEnter={this.handleMouseMove}\n >\n\n \n \n \n
\n );\n }\n}\n\n\nexport default UpdateSiteMap;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n isMobile,\n} from 'react-device-detect';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport {\n Drawer,\n IconButton,\n Button,\n Grid,\n Select,\n MenuItem,\n} from '@material-ui/core';\nimport classNames from 'classnames';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport SiteForm from './SiteForm';\nimport SitesList from './SitesList';\nimport UpdateSiteMap from './UpdateSiteMap';\nimport {\n setSites,\n} from '../../redux/actions/AllActions';\nimport { getAllSites, getAllZones } from '../../API';\nimport { styles, mapStyle } from '../Common/GlobalStyles';\nimport { deactivateSite, reactivateSite } from '../../API';\nimport {\n STREET_MAP_URI,\n SITEM8_MAP_URI,\n RACE_MAP_URI,\n SAT_MAP_URI,\n} from '../../Constants/Constants';\n\n\nexport function hideDrawControls() {\n const elems = document.getElementsByClassName('mapboxgl-ctrl-group');\n [...elems].forEach(el => el.classList.add('disabled'));\n}\n\nexport function showDrawControls() {\n const elems = document.getElementsByClassName('mapboxgl-ctrl-group');\n [...elems].forEach(el => el.classList.remove('disabled'));\n}\n\n\nexport class SetupSite extends Component {\n state = {\n editingSite: null,\n newSite: null,\n polygon: null,\n open: true,//!isMobile,\n showInactive: false,\n zones: [],\n baseMapUri: SAT_MAP_URI,\n }\n\n handleBaseMapChange = (e) => {\n this.setState({ baseMapUri: e.target.value});\n }\n\n toggleDrawer = (open) => {\n this.setState({ open });\n }\n\n componentDidMount() {\n this.getData().then(hideDrawControls);\n }\n\n // Draw a new polygon\n handleDrawCreate = (wktPolygon) => {\n this.setState({ polygon: wktPolygon });\n showDrawControls();\n }\n\n // Delete polygon\n handleDrawDelete = () => {\n this.setState({ polygon: null });\n }\n\n\n handleDrawUpdate = (wktPolygon) => {\n this.setState({ polygon: wktPolygon });\n }\n\n\n handleSiteClick = (site) => {\n this.setState({ newSite: null, editingSite: site });\n showDrawControls();\n }\n\n handleMapClick = (siteId) => {\n const { newSite, editingSite, sites } = this.props;\n if (!newSite && !editingSite) {\n const site = sites.find(s => s.SiteId === siteId);\n\n if (site) {\n this.setState({ newSite: null, editingSite: site });\n showDrawControls();\n }\n }\n }\n\n handleCancelClick = () => {\n this.setState({ editingSite: null, newSite: null });\n this.setState({ polygon: null });\n hideDrawControls();\n setTimeout(this.getData, 500);\n }\n\n handleNewSiteClick = (newSite) => {\n this.setState({ newSite, editingSite: null });\n showDrawControls();\n }\n\n getData = async () => {\n const sites = await getAllSites();\n const {\n setAllSites,\n } = this.props;\n setAllSites(sites);\n }\n\n handleActivationClick = () => {\n const { editingSite } = this.state;\n if (!window.confirm('are you sure?')) {\n return;\n }\n if (editingSite.Active) {\n deactivateSite(editingSite.SiteId).then(this.getData).then(this.handleCancelClick);\n } else {\n reactivateSite(editingSite.SiteId).then(this.getData).then(this.handleCancelClick);\n }\n }\n\n render() {\n const { sites, classes, IsSuperAdministrator } = this.props;\n const {\n editingSite, newSite, polygon, open, zones,\n } = this.state;\n const showForm = !!(editingSite || newSite);\n return (\n
\n \n \n {open ? (\n
this.toggleDrawer(false)}>\n \n \n \n
\n ) : (\n
this.toggleDrawer(true)}>\n \n \n \n
\n )}\n {open && !showForm && (\n s.Active)}\n onSiteClick={this.handleSiteClick}\n onNewSiteClick={this.handleNewSiteClick}\n />\n )}\n \n this.setState({ showInactive: !this.state.showInactive })}>\n {this.state.showInactive ? 'Hide Inactive' : 'Show Inactive'}\n \n \n {open && showForm && (\n \n \n \n )}\n {open && showForm && (\n \n )}\n {open && showForm && (\n \n \n {editingSite && editingSite.Active ? 'Deactivate' : 'Reactivate'}\n \n )\n }\n \n\n
\n \n
\n
\n );\n }\n}\n\n\nconst mapStateToProps = (state) => {\n const { sites, me } = state;\n const { IsSuperAdministrator } = me.me;\n return { sites: sites.all, IsSuperAdministrator };\n};\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n setAllSites: ws => dispatch(setSites(ws)),\n});\n\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(SetupSite)));\n\n\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n Grid, Switch, FormControl, FormControlLabel, FormGroup,\n} from '@material-ui/core';\nimport wkt from 'terraformer-wkt-parser';\nimport * as turf from '@turf/turf';\nimport { ValidatorForm, TextValidator } from 'react-material-ui-form-validator';\nimport { assign } from '../../Utils';\nimport styles from '../Common/FormStyles';\nimport {\n createZone,\n updateZone,\n} from '../../redux/actions/AllActions';\n\n\nclass ZoneForm extends Component {\n state = {\n Name: '',\n checked: undefined,\n }\n\n handleChange = ({ target }) => {\n const { name, value } = target;\n this.setState({ [name]: value });\n };\n\n // eslint-disable-next-line no-unused-vars\n handleCheckboxChange = ({ target }, checked) => {\n this.setState({ checked });\n };\n\n handleSaveClick = () => {\n const { Name, checked, ZonePayrollId } = this.state;\n const { zone, polygon } = this.props;\n const p = polygon || wkt.convert(zone.GeoJSON.geometry);\n const updatedZone = {\n Name: Name || zone.Name,\n Active: checked === undefined ? zone.Active : checked,\n WKT: p,\n GeoJSON: turf.feature(wkt.parse(p)),\n ZonePayrollId: ZonePayrollId || zone.ZonePayrollId,\n };\n const toSave = assign(zone, updatedZone);\n if (toSave.ZoneId) {\n this.props.updateZone(toSave);\n } else {\n this.props.createZone(assign(toSave, { ZoneId: `${Math.random()}` }));\n }\n this.props.onCancelClick();\n }\n\n isValid = () => {\n const { Name } = this.state;\n const { zone, polygon } = this.props;\n const { GeoJSON } = zone;\n return !!((Name || zone.Name) && (polygon || GeoJSON));\n }\n\n render() {\n const {\n classes, onCancelClick, zone,\n } = this.props;\n const {\n Name, checked, ZonePayrollId,\n } = this.state;\n\n return (\n
\n {}}\n >\n \n \n \n \n \n \n \n {/* \n \n */}\n \n \n )}\n label=\"Active\"\n />\n \n \n \n \n \n \n \n Cancel\n \n \n \n \n Save\n \n \n \n \n
\n );\n }\n}\n\nZoneForm.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\n// eslint-disable-next-line no-unused-vars\nconst mapStateToProps = _state => ({});\n\n// eslint-disable-next-line no-unused-vars\nconst mapDispatchToProps = (dispatch, _ownProps) => ({\n createZone: x => dispatch(createZone(x)),\n updateZone: x => dispatch(updateZone(x)),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(ZoneForm)));\n","import React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport AddIcon from '@material-ui/icons/AddCircleOutline';\n\n\nconst styles = theme => ({\n root: {\n width: '100%',\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper,\n },\n nested: {\n paddingLeft: theme.spacing.unit * 4,\n },\n});\n\nconst newZone = {\n Name: '',\n Active: true,\n WKT: '',\n Geom: { },\n ZoneId: '',\n};\n\nclass ZonesList extends Component {\n handleClick = () => {\n this.setState(state => ({ open: !state.open }));\n };\n\n render() {\n const { zones, onZoneClick, onNewZoneClick } = this.props;\n const items = zones.map((s, i) => (\n onZoneClick(s)}>\n \n \n ));\n\n return (\n Zones}\n >\n onNewZoneClick(newZone)}>\n \n \n \n { items }\n \n );\n }\n}\n\nexport default withStyles(styles)(ZonesList);\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React, { Component } from 'react';\nimport ReactMapboxGl, { GeoJSONLayer } from 'react-mapbox-gl';\nimport ErrorBoundary from 'react-error-boundary';\nimport wkt from 'terraformer-wkt-parser';\nimport * as turf from '@turf/turf';\nimport MapboxDraw from '@mapbox/mapbox-gl-draw';\nimport { MAPBOX_TOKEN, \n SITE_FILL_STYLE } from '../../Constants/Constants';\n// Don't forget to import the CSS\nimport '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';\n\n\nexport const SITE_STYLE = {\n 'fill-color': '#ffffff',\n 'fill-opacity': 0.5,\n 'fill-outline-color': '#888888',\n};\n\n\nconst Map = ReactMapboxGl({\n accessToken: MAPBOX_TOKEN,\n});\n\nclass UpdateZonesMap extends Component {\n state = {\n createFeature: null,\n bounds: [[180.4833, -34.05265942137597],\n [163.65234, -47.57652]],\n }\n\n componentDidUpdate(prevProps, prevState) {\n const prevZone = prevProps.newZone || prevProps.editingZone;\n const newZone = this.props.newZone || this.props.editingZone;\n if(prevProps.sites.length !== this.props.sites.length) {\n this.setState({ bounds: this.getBounds() });\n }\n if (this.draw && (!newZone || (prevZone && (newZone.ZoneId !== prevZone.ZoneId)))) {\n this.deleteDrawFeatures();\n }\n if(this.props.editingZone && !prevProps.editingZone) {\n this.draw.add(JSON.parse(JSON.stringify(this.props.editingZone.GeoJSON)));\n }\n if (prevState.createFeature) {\n // I know its bad but I'm doing it anyways cos it works\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ createFeature: null });\n }\n }\n\n shouldComponentUpdate() {\n return true;\n }\n\n deleteDrawFeatures = () => {\n const { features } = this.draw.getAll();\n features.forEach(f => this.draw.delete(f.id));\n }\n\n onDrawModeChange = (e) => {\n if(e.mode == 'draw_polygon'){\n if(this.props.editingSite) {\n const { features } = this.draw.getAll();\n const toDelete = features.filter(x => !!x.properties.ZoneId);\n toDelete.forEach(x => this.draw.delete(x.id));\n }\n }\n }\n\n addDraw = (map) => {\n if (map._controls.length < 3) {\n this.map = map;\n this.draw = new MapboxDraw({\n displayControlsDefault: false,\n controls: {\n polygon: true,\n trash: true,\n },\n });\n\n map.addControl(this.draw);\n map.on('draw.create', this.drawCreate);\n map.on('draw.delete', this.drawDelete);\n map.on('draw.update', this.drawUpdate);\n map.on('draw.modechange', (e) => this.onDrawModeChange(e));\n\n }\n }\n\n drawCreate = (e) => {\n const { features } = this.draw.getAll();\n const [lastFeature] = features.slice(-1);\n if (features.length > 1) {\n this.draw.delete(features[0].id);\n }\n // do not do this unless we have a zone to edit\n this.props.onDrawCreate(\n wkt.convert(lastFeature.geometry));\n this.setState({ createFeature: wkt.convert(lastFeature.geometry) });\n }\n\n drawDelete = (e) => {\n this.props.onDrawDelete();\n this.setState({ createFeature: null });\n }\n\n drawUpdate = (e) => {\n const { features } = this.draw.getAll();\n const feature = features[0];\n this.props.onDrawUpdate(wkt.convert(feature.geometry));\n this.setState({ createFeature: wkt.convert(feature.geometry) });\n }\n\n getZoneFeatureCollection = () => {\n const { zones, editingZone, newZone } = this.props;\n\n const { createFeature } = this.state;\n if (createFeature) {\n // const featts = turf.buffer(turf.feature(wkt.parse(createFeature)), 50, { units: 'metres' });\n const featts = turf.feature(wkt.parse(createFeature));\n return turf.featureCollection([featts]);\n }\n\n const allZones = (editingZone && !newZone) ? [editingZone] : zones.filter(\n s => !!(s.GeoJSON || s.Geom),\n );\n\n const feats = allZones.map((b) => {\n const g = b.GeoJSON || turf.feature(wkt.parse(b.Geom.Geography.WellKnownText));\n //const geom = turf.buffer(g, 5, { units: 'metres' });\n g.properties = { ZoneId: b.ZoneId };\n return g;\n });\n\n return turf.featureCollection(feats);\n }\n\n getSiteFeatureCollection = () => {\n const { sites } = this.props;\n const feats = sites.map((b) => {\n const g = b.GeoJSON || turf.feature(wkt.parse(b.Geom.Geography.WellKnownText));\n g.properties = { SiteId: b.SiteId };\n return g;\n });\n return turf.featureCollection(feats);\n }\n\n getBounds = () => {\n const { sites } = this.props;\n\n if (sites.length > 0) {\n const bbox = turf.bbox(\n this.getSiteFeatureCollection());\n return [[bbox[0], bbox[1]], [bbox[2], bbox[3]]];\n }\n // nz bbox\n return [[180.4833, -34.05265942137597],\n [163.65234, -47.57652]];\n }\n\n getBBoxPadding = () => {\n const { sites } = this.props;\n if (sites.length > 1) {\n return 200;\n }\n // nz bbox\n return 10;\n }\n\n handleStyleLoad = (map) => {\n map.resize();\n }\n\n handleMapClick = (map, e) => {\n const features = map.queryRenderedFeatures(e.point);\n if (features.length) {\n this.props.onMapClick(features[0].properties.ZoneId);\n }\n }\n\n handleMouseMove = (map, e) => {\n const features = map.queryRenderedFeatures(e.point);\n // eslint-disable-next-line no-undef\n const mapelem = document.getElementsByClassName('mapboxgl-canvas')[0];\n if (features.find(f => f.source === 'geojase')) {\n mapelem.style.cursor = 'pointer';\n } else {\n mapelem.style.cursor = 'grab';\n }\n }\n\n render() {\n const { newZone, editingZone } = this.props;\n const enableClick = !(newZone || editingZone);\n const bbox = this.getBounds();\n return (\n
\n \n console.warn(e)}\n style={this.props.baseMapUri}\n fitBounds={this.state.bounds}\n fitBoundsOptions={{ padding: this.getBBoxPadding() }}\n onZoomEnd={this.handleZoom}\n onMove={this.handleMove}\n onRender={this.addDraw}\n onStyleLoad={this.handleStyleLoad}\n containerStyle={{\n height: 'calc(100vh - 60px)',\n width: '100%',\n }}\n onClick={enableClick && this.handleMapClick}\n onMouseMove={this.handleMouseMove}\n onMouseOut={this.handleMouseMove}\n onMouseEnter={this.handleMouseMove}\n >\n\n \n\n \n\n \n \n
\n );\n }\n}\n\n\nexport default UpdateZonesMap;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n isMobile,\n} from 'react-device-detect';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport {\n Drawer,\n IconButton,\n Grid,\n FormControl,\n FormHelperText,\n Select,\n MenuItem,\n} from '@material-ui/core';\nimport classNames from 'classnames';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport ZoneForm from './ZoneForm';\nimport ZonesList from './ZonesList';\nimport UpdateZoneMap from './UpdateZonesMap';\nimport { SelectInput } from '../FormComponents';\nimport {\n setZones,\n setSites,\n} from '../../redux/actions/AllActions';\nimport { getAllZones, getAllSites } from '../../API';\nimport { styles, mapStyle } from '../Common/GlobalStyles';\nimport {\n STREET_MAP_URI,\n SITEM8_MAP_URI,\n RACE_MAP_URI,\n SAT_MAP_URI,\n} from '../../Constants/Constants';\n\nexport function hideDrawControls() {\n const elems = document.getElementsByClassName('mapboxgl-ctrl-group');\n [...elems].forEach(el => el.classList.add('disabled'));\n}\n\nexport function showDrawControls() {\n const elems = document.getElementsByClassName('mapboxgl-ctrl-group');\n [...elems].forEach(el => el.classList.remove('disabled'));\n}\n\n\nexport class SetupZone extends Component {\n state = {\n editingZone: null,\n newZone: null,\n polygon: null,\n open: !isMobile,\n selectedSiteId: null,\n baseMapUri: SAT_MAP_URI,\n }\n\n toggleDrawer = (open) => {\n this.setState({ open });\n }\n\n handleBaseMapChange = (e) => {\n this.setState({ baseMapUri: e.target.value});\n }\n\n componentDidMount() {\n this.getData().then(hideDrawControls);\n }\n\n // Draw a new polygon\n handleDrawCreate = (wktPolygon) => {\n this.setState({ polygon: wktPolygon });\n showDrawControls();\n }\n\n // Delete polygon\n handleDrawDelete = () => {\n this.setState({ polygon: null });\n }\n\n\n handleDrawUpdate = (wktPolygon) => {\n this.setState({ polygon: wktPolygon });\n }\n\n\n handleZoneClick = (zone) => {\n this.setState({ newZone: null, editingZone: zone });\n showDrawControls();\n }\n\n handleMapClick = (zoneId) => {\n const { newZone, editingZone, zones } = this.props;\n if (!newZone && !editingZone) {\n const zone = zones.find(s => s.ZoneId === zoneId);\n\n if (zone) {\n this.setState({ newZone: null, editingZone: zone });\n showDrawControls();\n }\n }\n }\n\n handleCancelClick = () => {\n this.setState({ editingZone: null, newZone: null });\n this.setState({ polygon: null });\n hideDrawControls();\n setTimeout(this.getData, 500);\n }\n\n handleNewZoneClick = (newZone) => {\n const { selectedSiteId } = this.state;\n if (!selectedSiteId) {\n return;\n }\n this.setState({\n newZone: { ...newZone, SiteId: selectedSiteId },\n editingZone: null,\n });\n showDrawControls();\n }\n\n getData = async () => {\n const zones = await getAllZones();\n const sites = await getAllSites();\n const {\n setAllZones,\n setAllSites,\n } = this.props;\n setAllSites(sites);\n setAllZones(zones);\n }\n\n onSiteChange = ({ target }) => {\n this.setState({ selectedSiteId: target.value });\n }\n\n render() {\n const { zones, classes, sites } = this.props;\n const {\n editingZone, newZone, polygon, open, selectedSiteId,\n } = this.state;\n const showForm = !!(editingZone || newZone);\n return (\n
\n \n \n {open ? (\n
this.toggleDrawer(false)}>\n \n \n \n
\n ) : (\n
this.toggleDrawer(true)}>\n \n \n \n
\n )}\n {open && showForm && (\n \n \n \n )}\n { open && (\n \n ({\n text: s.Name,\n SiteId: s.SiteId,\n }))\n }\n name=\"SiteId\"\n />\n \n Select site\n \n \n )}\n { open && !showForm && (\n z.SiteId == selectedSiteId)}\n onZoneClick={this.handleZoneClick}\n onNewZoneClick={this.handleNewZoneClick}\n />\n )}\n { open && showForm && (\n \n )}\n \n\n
\n \n
\n\n
\n );\n }\n}\n\n\nconst mapStateToProps = (state) => {\n const { zones, sites } = state;\n return { zones: zones.all, sites: sites.all };\n};\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n setAllZones: ws => dispatch(setZones(ws)),\n setAllSites: ws => dispatch(setSites(ws)),\n});\n\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(SetupZone)));\n\n\n// export default withRouter(ManageUsersContainer);\n// \n","import { Button, FormControl, FormHelperText, Grid, TextField } from \"@material-ui/core\";\nimport moment from \"moment\";\nimport MUIDataTable from 'mui-datatables';\nimport React, { Component } from \"react\";\nimport { getCompanies, getSitesByCompany, getBatteryConsumptionReport } from \"../../API\";\nimport { SelectInput } from \"../FormComponents\";\n\nenum DeviceMode {\n GpsOn = 6,\n Sleep = 1,\n GpsSleep = 5,\n Movement = 7\n}\n\n\nconst columns = [\n { name: 'date', label: 'Date' },\n { name: 'userName', label: 'User Name' },\n { name: 'locations', label: 'Locations' },\n \n { name: 'earlyStartTime', label: 'Early Start Time' },\n { name: 'earlyStartMode', label: 'Early Mode' },\n { name: 'earlyStartInterval', label: 'Early Interval' },\n\n { name: 'defaultStartTime', label: 'Default Start Time' },\n { name: 'defaultStartMode', label: 'Default Mode' },\n { name: 'defaultStartInterval', label: 'Default Interval (min)' },\n\n { name: 'defaultFinishTime', label: 'Default Finish Time' },\n { name: 'defaultFinishMode', label: 'Finish Mode' },\n { name: 'defaultFinishInterval', label: 'Finish Interval (min)' },\n { name: 'lateFinishTime', label: 'Late Finish Time' },\n\n { name: 'battPercentageFirstUpdate', label: 'Batt% First Update' },\n { name: 'battPercentageLastUpdate', label: 'Batt% Last Update' },\n\n { name: 'startFirstUpdate', label: 'Start First Update' },\n { name: 'finishLastUpdate', label: 'Finish Last Update' },\n\n { name: 'battUsed', label: 'Batt Used' },\n\n { name: 'hourWorked', label: 'Hour Worked' },\n { name: 'battDrainPerHour', label: 'Batt Drain/Hour' },\n];\n\n\nexport default class Reports extends Component {\n state = {\n company: 1,\n site: 0,\n earliestStartDate: moment().format('YYYY-MM-DD'),\n latestFinishDate: moment().add(1, 'days').format('YYYY-MM-DD'),\n rows: [],\n companies: [],\n sites: [],\n loaded: true\n };\n\n componentDidMount() {\n this.loadData();\n }\n\n getData = async () => {\n let batteryConsumptionReport = await getBatteryConsumptionReport(\n this.state.site == 0 ? this.state.sites\n .filter(s => s.SiteId != 0)\n .map(s => s.SiteId) :\n [this.state.site],\n this.state.earliestStartDate,\n this.state.latestFinishDate);\n\n const rowList = batteryConsumptionReport.map((w, i) => ({\n id: i,\n userName: w.WorkerName,\n date: moment(w.Date).format('YYYY-MM-DD'),\n locations: w.Location,\n earlyStartTime: w.EarlyStartTime,\n earlyStartMode: DeviceMode[w.EarlyStartMode],\n earlyStartInterval: w.EarlyStartInterval,\n defaultStartTime: w.DefaultStartTime,\n defaultStartMode: DeviceMode[w.DefaultStartMode],\n defaultStartInterval: w.DefaultStartInterval,\n defaultFinishTime: w.DefaultFinishTime,\n defaultFinishMode: DeviceMode[w.DefaultFinishMode],\n defaultFinishInterval: w.DefaultFinishInterval,\n lateFinishTime: w.LateFinishTime,\n battPercentageFirstUpdate: `${w.BatteryPercentageFirstUpdate}.00%`,\n battPercentageLastUpdate: `${w.BatteryPercentageLastUpdate}.00%`,\n startFirstUpdate: w.StartFirstUpdate,\n finishLastUpdate: w.FinishLastUpdate,\n battUsed: `${w.BatteryUsed}.00%`,\n hourWorked: w.HoursWorked,\n battDrainPerHour: `${w.BatteryDrainPerHour.toFixed(2)}%`\n }))\n\n this.setState({ rows: rowList });\n }\n\n loadData = async () => {\n // Get the required data for the report\n const comps = await getCompanies();\n const sites = await getSitesByCompany(1);\n this.setState({\n companies: comps.filter(c => !c.IsArchived),\n sites: [{ SiteId: 0, Name: 'All Sites' }].concat(sites.filter(x => x.Active)),\n site: 0\n });\n }\n\n handleCompanyChange = async ({ target }) => {\n const { value } = target;\n this.setState({\n company: value,\n sites: [{ SiteId: 0, Name: 'All Sites' }].concat(await getSitesByCompany(value)),\n site: 0\n });\n }\n\n handleSiteChange = ({ target }) => {\n const { value } = target;\n this.setState({ site: value })\n }\n\n handleEarliestStartDateChange = ({ target }) => {\n const { value } = target;\n this.setState({ earliestStartDate: value });\n }\n\n handleLatestFinishDateChange = ({ target }) => {\n const { value } = target;\n this.setState({ latestFinishDate: value })\n }\n\n onGenerateReportClick = async () => {\n this.setState({ loaded: false });\n await this.getData();\n this.setState({ loaded: true });\n }\n\n render() {\n return \n

Battery consumption (%) per hour

\n \n \n \n Select company\n \n ({\n Name: c.Name,\n CompanyId: c.CompanyId,\n }))}\n name=\"CompanyId\"\n />\n \n \n \n \n \n Select site\n \n ({\n Name: c.Name,\n SiteId: c.SiteId,\n }))}\n name=\"SiteId\"\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Generate Report\n \n \n \n {/* */}\n < div style={{ height: '100vh', width: '100%' }}>\n \n \n
\n }\n}","import React, { Component } from 'react';\nimport { postAddSystemAdmin } from '../../API';\nimport { validateEmail } from '../../Utils';\nimport { FormControl, Grid, Input, Button } from '@material-ui/core';\n\n\nexport default class AddSystemAdminForm extends Component {\n\n state = {\n email: '',\n emailIsValid: false,\n message: 'please enter a new email, or the email of an existing Admin user',\n }\n\n handleEmailInputChange = (email: string) => {\n const emailIsValid = validateEmail(email);\n this.setState({ email, emailIsValid });\n }\n\n handleButtonClick = async (e: React.MouseEvent) => {\n \n const newAdmin = await postAddSystemAdmin(this.state.email);\n if(newAdmin) {\n this.setState({\n email: '',\n emailIsValid: false,\n message: `${newAdmin.Name} ${newAdmin.Email} is a super admin now`,\n });\n } else {\n this.setState({ message: 'failure please use another email' });\n }\n\n }\n\n render() {\n const { email, emailIsValid, message } = this.state; \n const emailHandler = ({ target }: any) => this.handleEmailInputChange(target.value);\n return \n \n \n \n \n \n \n
{ message }
\n
\n }\n\n}","import React, { Component } from 'react';\nimport {\n FormHelperText,\n Input,\n FormControl,\n Button,\n Paper,\n Grid,\n} from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport styles from '../Common/FormStyles';\nimport { createCompany } from '../../API';\nimport { validateEmail, validateMobile } from '../../Utils';\n\nclass CreateCompanyForm extends Component {\n state = {\n email: '',\n name: '',\n mobile: '',\n companyName: '',\n }\n\n handleButton = async () => {\n const {\n email, name, mobile, companyName,\n } = this.state;\n if (name && companyName && validateEmail(email) && validateMobile(mobile)) {\n const res = await createCompany(this.state);\n alert(res);\n this.setState({\n email: '',\n name: '',\n mobile: '',\n companyName: '',\n });\n } else {\n alert('fix the details and try again');\n }\n }\n\n handleChange = ({ target }) => {\n this.setState({ [target.name]: target.value });\n }\n\n render() {\n const {\n companyName, email, name, mobile,\n } = this.state;\n const { classes } = this.props;\n return (\n \n \n \n \n \n Company Name\n \n \n \n \n \n User Name\n \n \n \n \n \n User Email\n \n \n \n \n \n User Cell\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles, { withTheme: true })(CreateCompanyForm);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { \n getDeviceVersions,\n getAllDevicesAllCompanies,\n updateDevicesVersion,\n getSetDeviceConfigRequired,\n getSetDeviceRebootRequired,\n} from '../../API';\nimport { Grid, Button, TextField } from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { RootReducerType } from '../../redux/store/rootReducer';\nimport { setDeviceVersions, setDevices } from '../../redux/actions/AllActions';\nimport { DeviceFirmware, Device } from '../../api/index';\n\ninterface StateProps {\n deviceFirmwares: Array;\n devices: Array;\n};\n\ninterface DispatchProps {\n _setDevices(ws: any): void;\n _setDeviceVersions(ws: any): void;\n};\n\ninterface DeviceFirmwareFormState {\n selectedDevice: Device;\n selectedDeviceFirmware: DeviceFirmware;\n}\n\ntype DeviceFirmwareFormProps = StateProps & DispatchProps;\n\nexport class DeviceFirmwareForm extends Component {\n\n state:DeviceFirmwareFormState = {\n selectedDevice: null,\n selectedDeviceFirmware: null,\n }\n\n componentDidMount() {\n this.loadData();\n }\n\n loadData = async () => {\n const { _setDevices, _setDeviceVersions } = this.props;\n const deviceFirmwares = await getDeviceVersions() as Array;\n const devices = await getAllDevicesAllCompanies() as Array;\n\n _setDevices(devices);\n _setDeviceVersions(deviceFirmwares);\n const selectedDeviceFirmware = deviceFirmwares.find(d => d.deviceFirmwareVersionId === devices[0].ExpectedDeviceFirmwareVersionId);\n\n this.setState({ selectedDevice:devices[0], selectedDeviceFirmware });\n }\n\n handleDeviceSelect = (selectedDevice: Device) => {\n const { deviceFirmwares } = this.props;\n if(!selectedDevice) {\n return;\n }\n this.setState({ \n selectedDevice,\n selectedDeviceFirmware: deviceFirmwares.find(\n d => d.deviceFirmwareVersionId === selectedDevice.ExpectedDeviceFirmwareVersionId)\n });\n }\n\n handleDeviceFirmwareVersionChange = (selectedDeviceFirmware: DeviceFirmware) => {\n if(!selectedDeviceFirmware) {\n return;\n }\n this.setState({ selectedDeviceFirmware });\n }\n\n handleSaveClick = async () => {\n const { selectedDeviceFirmware, selectedDevice } = this.state;\n if(selectedDevice.ExpectedDeviceFirmwareVersionId === selectedDeviceFirmware.deviceFirmwareVersionId) {\n alert('this device already has this firmware');\n return;\n }\n if(selectedDeviceFirmware.sequence !== 3) {\n alert('NOPE we only update to the latest at the monent');\n return;\n }\n const answer = prompt('Are You Sure You Want To Do this enter yes for yes?', \"no\");\n if(answer === 'yes') {\n await updateDevicesVersion(selectedDevice.DeviceId, selectedDeviceFirmware.deviceFirmwareVersionId);\n this.loadData();\n }\n }\n\n handleRequestRconf = async () => {\n const { selectedDevice } = this.state;\n var yesno = window.confirm(\"require rconf message from this device?\");\n if(yesno) {\n getSetDeviceConfigRequired(selectedDevice.DeviceId).then(\n (g) => alert(JSON.stringify(g))).then(this.loadData);\n } else {\n alert('no');\n }\n }\n\n handleRequestReboot = async () => {\n const { selectedDevice } = this.state;\n var yesno = window.confirm(\"require reboot message from this device?\");\n if(yesno) {\n getSetDeviceRebootRequired(selectedDevice.DeviceId).then(\n (g) => alert(JSON.stringify(g))).then(this.loadData);\n } else {\n alert('no');\n }\n }\n\n render() {\n const { devices, deviceFirmwares } = this.props;\n const { selectedDevice, selectedDeviceFirmware } = this.state;\n if(!selectedDevice) {\n return
;\n }\n return \n
\n {\n const device = newValue as Device;\n this.handleDeviceSelect(device);\n }}\n value={selectedDevice}\n getOptionLabel={(opt) => opt.DeviceId}\n renderInput={(params) => }\n />\n
\n
\n {\n const deviceFirmware = newValue as DeviceFirmware;\n this.handleDeviceFirmwareVersionChange(deviceFirmware);\n }}\n getOptionLabel={(opt) => opt.name}\n value={selectedDeviceFirmware}\n renderInput={(params) => }\n />\n
\n
\n

{ selectedDevice.DeviceId }

\n

{ selectedDeviceFirmware.name }

\n

{ selectedDeviceFirmware.description }

\n

{ selectedDeviceFirmware.version }

\n

config requested:{ `${selectedDevice.ConfigMsgRequired}` }

\n

reboot requested { `${selectedDevice.RebootRequired}` }

\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n Requesting a config msg or a reboot will cancel any previous requests\n \n
\n
\n }\n\n}\n\nconst mapDispatchToProps = (dispatch): DispatchProps => ({\n _setDevices: (w) => dispatch(setDevices(w)),\n _setDeviceVersions: (w) => dispatch(setDeviceVersions(w)),\n});\n\nexport const mapStateToProps = (state: RootReducerType):StateProps => {\n const { deviceFirmware, me } = state;\n return {\n devices: me.devices,\n deviceFirmwares: deviceFirmware.all,\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DeviceFirmwareForm);","import React, { useState, useEffect } from 'react';\nimport {\n TextField,\n FormHelperText,\n FormControl,\n Grid,\n Paper,\n Button,\n} from '@material-ui/core';\nimport {\n postNewWifiBeacon,\n postUpdateWifiBeacon,\n} from '../../../API';\n\n\nconst macAddressRegex = /^[0-9a-f]{1,2}([\\.:-])(?:[0-9a-f]{1,2}\\1){4}[0-9a-f]{1,2}$/;\n\nexport default function(props) {\n\n const [newWifiBeacon, setNewWifiBeacon] = useState({ name: '', lat: 0, lng: 0, macAddress: '' });\n const [beaconId, setBeaconId] = useState(undefined);\n\n const handleFieldChange = (e) => {\n const { name, value } = e.target;\n const change = { [name]: value };\n setNewWifiBeacon({ ...newWifiBeacon, ...change });\n }\n\n useEffect(() => {\n setNewWifiBeacon({ ...newWifiBeacon, ...props.lnglat });\n }, [props.lnglat.lat, props.lnglat.lat]);\n\n useEffect(() => {\n setNewWifiBeacon({\n name: props.updateableWifiBeacon.Name,\n lat: props.updateableWifiBeacon.Latitude,\n lng: props.updateableWifiBeacon.Longitude,\n macAddress: props.updateableWifiBeacon.MacAddress,\n });\n setBeaconId(props.updateableWifiBeacon.WifiBeaconId);\n }, [props.updateableWifiBeacon.WifiBeaconId]);\n\n const handleSaveClick = () => {\n if(!beaconId) {\n postNewWifiBeacon(newWifiBeacon).then(props.handleNewWifiBeacon);\n } else {\n postUpdateWifiBeacon(beaconId, newWifiBeacon).then(props.handleNewWifiBeacon);\n }\n setBeaconId(undefined);\n setNewWifiBeacon({name: '', macAddress: '', lat: 0, lng: 0});\n }\n\n const handleCancelClick = () => {\n setBeaconId(undefined);\n props.handleCancel();\n setNewWifiBeacon({name: '', macAddress: '', lat: 0, lng: 0});\n }\n\n const { name, macAddress, lat, lng } = newWifiBeacon;\n \n const macOk = macAddressRegex.test(macAddress);\n const latOk = lat >= -90 && lat <= 90;\n const lngOk = lng >= -180 && lng <= 180;\n\n return \n \n \n \n \n Name\n \n \n \n \n \n Mac\n \n \n \n \n \n Latitude\n \n \n \n \n \n Longitude\n \n \n \n \n \n \n \n \n \n ;\n}","import React, { useState, useEffect } from 'react';\nimport MapGL, {\n Layer,\n Feature,\n} from 'react-mapbox-gl';\nimport {\n MAPBOX_TOKEN,\n SAT_MAP_URI,\n \n} from '../../../Constants/Constants';\nimport 'mapbox-gl/dist/mapbox-gl.css';\n\n\nconst Map = MapGL({\n accessToken: MAPBOX_TOKEN,\n});\n\n\nexport default function(props) {\n\n const [zoom, setZoom] = useState(5);\n const [center, setCenter] = useState([171, -44]);\n\n useEffect(() => {\n props.lnglat.lng && setCenter([props.lnglat.lng, props.lnglat.lat]);\n }, [props.lnglat.lng, props.lnglat.lat])\n\n const onZoomEnd = (map) => {\n setZoom(map.getZoom());\n }\n\n const onMoveEnd = (map) => {\n const lnglat = map.getCenter();\n setCenter([lnglat.lng, lnglat.lat]);\n }\n\n const onLoaded = (map) => {\n map.resize();\n map.on('idle', function(){\n map.resize();\n });\n }\n\n return \n \n \n \n \n \n \n \n \n \n \n}","import React from 'react';\nimport {\n List,\n ListItem,\n ListItemText,\n Divider,\n Paper,\n} from '@material-ui/core';\n\nexport default function(props) {\n\n const onListClick = (b) => {\n return () => props.handleListClick(b);\n }\n\n return \n \n { props.beacons.map((b, i) => \n \n \n \n ) }\n \n \n\n}","import React, { useState, useEffect } from 'react';\nimport {\n Grid,\n} from '@material-ui/core';\nimport WifiBeaconForm from './WifiBeaconForm';\nimport WifiBeaconMap from './WifiBeaconMap';\nimport WifiBeaconList from './WifiBeaconList';\nimport {\n getWifiBeacons,\n} from '../../../API';\n\n\n\nexport default function(props) {\n \n const [wifiBeacons, setWifiBeacons] = useState([]);\n const [updateableWifiBeacon, setUpdateableWifiBeacon] = useState({});\n \n const [lnglat, setLnglat] = useState({}); \n \n const handleNewWifiBeacon = () => {\n getWifiBeacons().then(setWifiBeacons);\n }\n\n useEffect(() => {\n handleNewWifiBeacon();\n }, []);\n\n const handleMapClick = (map, e) => {\n setLnglat(e.lngLat || {});\n }\n\n const handleListClick = (beacon) => {\n setUpdateableWifiBeacon(beacon);\n setLnglat({ lat: beacon.Latitude, lng: beacon.Longitude });\n }\n\n const handleCancel = () => {\n setLnglat({});\n setUpdateableWifiBeacon({});\n }\n\n return \n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n\n}","import React, { Component } from 'react';\nimport {\n Paper,\n Grid,\n List,\n ListItem,\n ListSubheader,\n ListItemText,\n TextField,\n FormControl,\n FormHelperText,\n Button,\n Typography,\n Fab,\n Switch,\n} from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { withStyles } from '@material-ui/core/styles';\nimport styles from '../Common/FormStyles';\nimport { getLabourAgencies, postAddLabourAgency, postUpdateLabourAgency, getAgencyConsultants, postAgencyConsultant, deleteAgencyConsultant } from '../../API';\n\n\nexport function AgencyConsulant(props) {\n const { Name, CellPhone, Email, onClick, ShouldReceiveAllContact } = props;\n return \n \n \n { Email }\n \n \n { CellPhone }\n \n {ShouldReceiveAllContact &&\n \n ALL CONTACT\n \n }\n \n }\n />\n
\n \n \n \n
\n
\n}\n\n\n\nclass LabourAgencies extends Component {\n state = {\n agencies: [],\n newAgencyName: '',\n newConsultant: { Name: '', Email: '', CellPhone: '', AgencyConsultantId: null },\n selectedAgency: null,\n agencyConsultants: [],\n }\n\n componentDidMount() {\n this.getData();\n }\n\n onDeleteConsultantClick = async (agcid) => {\n if(window.confirm(\"are you sure you want to delete the consultant?\")) {\n await deleteAgencyConsultant(agcid);\n this.getData();\n }\n }\n\n getData = async () => {\n const data = await Promise.all([\n getLabourAgencies(),\n ]);\n let agencyConsultants = [];\n if(this.state.selectedAgency) {\n agencyConsultants = await getAgencyConsultants(this.state.selectedAgency.LabourAgencyId);\n }\n this.setState({\n agencies: data[0],\n newAgencyName: '',\n newConsultant: {},\n agencyConsultants,\n });\n }\n\n onNewAgencyNameChange = (e) => {\n this.setState({ \n newAgencyName: e.target.value,\n });\n }\n\n saveNewAgency = () => {\n postAddLabourAgency(this.state.newAgencyName).then(this.getData);\n }\n\n saveNewConsultant = () => {\n postAgencyConsultant(this.state.newConsultant).then(this.getData);\n }\n\n onConsultantInputChange = (e) => {\n let { name, value } = e.target;\n if(name == 'ShouldReceiveAllContact') {\n value = !!e.target.checked;\n }\n const newConsultant = { \n ...this.state.newConsultant,\n [name]: value,\n LabourAgencyId: this.state.selectedAgency.LabourAgencyId,\n AgencyConsultantId: null,\n };\n this.setState({ newConsultant });\n }\n\n onLabourAgencySelect = async (labourAgency) => {\n this.setState({ selectedAgency: labourAgency });\n var consultants = await getAgencyConsultants(labourAgency.LabourAgencyId);\n this.setState({ agencyConsultants: consultants });\n }\n\n renderLabourAgency = (labourAgency) => {\n return (\n this.onLabourAgencySelect(labourAgency)}\n key={`laba${labourAgency.LabourAgencyId}`}\n >\n \n { labourAgency.Name }\n \n \n );\n }\n\n render() {\n const {\n selectedAgency,\n agencyConsultants,\n newConsultant,\n newAgencyName,\n } = this.state;\n const canSaveConsultant = !!(newConsultant.Name && newConsultant.Email && newConsultant.CellPhone);\n const canSaveNewAgencty = !!newAgencyName;\n\n return (\n
\n \n \n \n Add a new Agency\n \n \n \n \n \n \n \n \n \n \n Add a new Consultant\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Check to make this consultant recieve all SMS\n \n \n \n \n \n \n \n \n All Agencies (click to select)}\n >\n { this.state.agencies.map(this.renderLabourAgency) }\n \n \n { selectedAgency && \n \n Consultants for { selectedAgency.Name }}\n >\n { agencyConsultants.map((ac) => ( this.onDeleteConsultantClick(ac.AgencyConsultantId)} />)) }\n \n \n }\n \n
\n );\n }\n}\n\n\nexport default withStyles(styles, { withTheme: true })(LabourAgencies);\n","import React, { Component } from 'react';\nimport {\n List,\n ListItem,\n ListItemText,\n} from '@material-ui/core';\nimport { getCompanies } from '../../API';\n\nclass CompaniesList extends Component {\n state = {\n companies: [],\n }\n\n componentDidMount() {\n this.getCompanies();\n }\n\n getCompanies = async () => {\n const data = await getCompanies();\n this.setState({ companies: data });\n }\n\n renderCompany = (company) => {\n return (\n this.props.onClick(company).then(this.getCompanies)}\n >\n \n \n );\n }\n\n render() {\n return ({ this.state.companies.map(this.renderCompany) })\n }\n}\n\nexport default CompaniesList;\n","import React, { Component } from 'react';\nimport {\n FormControl,\n Button,\n Paper,\n Grid,\n} from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport styles from '../Common/FormStyles';\nimport { updateCompany } from '../../API';\nimport CompaniesList from './CompanyList';\n\nclass ManageCompanies extends Component {\n state = {\n companies: [],\n }\n\n archiveCompany(company) {\n var question = company.IsArchived ? 'unarchive' : 'archive';\n var answer = window.prompt(`are you sure you want to ${question} ${company.Name}? type yes to confirm.`);\n if(answer === 'yes') {\n return updateCompany({ ...company, IsArchived: !company.IsArchived }).then(() => window.alert('done'));\n }\n return Promise.resolve();\n }\n\n render() {\n const { classes } = this.props;\n return (\n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles, { withTheme: true })(ManageCompanies);\n","import React, { useEffect, useState } from 'react';\nimport moment from 'moment';\nimport { \n Grid,\n Input,\n Button,\n Select,\n MenuItem,\n FormControl,\n} from '@material-ui/core';\nimport {\n getWorkers,\n getWorkerStatus,\n getCompany,\n getAllSites,\n getEmailPreview,\n sendManualEmail,\n getWorkerEmailData,\n} from '../../API';\n\n\nfunction WorkerStatusRow(props) {\n const { workerStatus } = props;\n const { workerName, siteName, onsite, startTime } = workerStatus;\n const { onChange, siteNames } = props;\n \n return \n \n \n onChange(e, workerStatus)}\n />\n \n \n { workerName }\n \n \n onChange(e, workerStatus)} />\n \n \n \n \n \n}\n\n\nexport default function ManualEmailSender(props) {\n\n const [workerStatuses, setWorkerStatus ] = useState([]);\n const initaialEmailDets = {\n email: '',\n toName: '',\n companyName: '',\n subject: 'attendance report',\n };\n const [emailDets, setEmailDets] = useState(initaialEmailDets);\n const [siteNames, setSiteNames] = useState([]);\n const [preview, setPreview] = useState(null);\n\n const onChangeWorkerStatus = (evt, workerStatus) => {\n const elem = evt.currentTarget.name ? evt.currentTarget : evt.target;\n const { name, value } = elem;\n let ws;\n\n if(name == 'onsite') {\n ws = { ...workerStatus, onsite: !workerStatus.onsite };\n } else {\n ws = { ...workerStatus, [name]: value }\n }\n\n const wss = workerStatuses.map(w => w.workerName == ws.workerName ? ws : w);\n setWorkerStatus(wss);\n setPreview(null);\n document.getElementById(\"preview-email\").innerHTML = null;\n }\n\n const onChangeEmailDets = (evt) => {\n const { name, value } = evt.currentTarget;\n setEmailDets({ ...emailDets, ...{ [name]: value } });\n }\n\n function genEmailPayload() {\n const onSiteWorkers = workerStatuses.filter(w => !!w.onsite);\n const offSiteWorkers = workerStatuses.filter(w => !w.onsite).map(r => r.workerName);\n return {\n onSiteWorkers,\n offSiteWorkers,\n toName,\n email,\n subject,\n companyName,\n }\n }\n\n const getPreview = async () => {\n const payload = genEmailPayload();\n const previewHtml = await getEmailPreview(payload);\n setPreview(previewHtml);\n document.getElementById(\"preview-email\").innerHTML = previewHtml;\n }\n\n const sendEmail = async () => {\n const payload = genEmailPayload();\n await sendManualEmail(payload);\n alert('great job you have sent an email');\n }\n\n useEffect(() => {\n async function getData() {\n const company = await getCompany();\n const workers = await getWorkers();\n const sites = await getAllSites();\n setSiteNames(sites.filter(s => s.Active).map(s => s.Name));\n const workerData = await Promise.all(workers.filter(w => w.IsWorker).map(w => getWorkerEmailData(w.WorkerId)));\n setWorkerStatus(workerData.map(d => ({ ...d, onsite: !!d.siteName })));\n setEmailDets({ ...emailDets, companyName: company.Name });\n }\n getData();\n }, []);\n\n const { email, subject, toName, companyName } = emailDets;\n const canSend = preview && email && subject && toName;\n return (\n
\n \n \n

Create an onsite email

\n { !workerStatuses.length && ' ..... please wait loading '}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n { workerStatuses.map(w => ) }\n \n \n \n \n {canSend && }\n \n \n \n \n
\n
\n )\n\n}","import React, { Component } from 'react';\nimport {\n Paper,\n Grid,\n List,\n ListItem,\n ListSubheader,\n ListItemText,\n TextField,\n FormControl,\n FormHelperText,\n Button,\n Typography,\n Fab,\n TextareaAutosize,\n Switch,\n} from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { withStyles } from '@material-ui/core/styles';\nimport styles from '../Common/FormStyles';\nimport { getGeneratedTextmessages, postTextmessage } from '../../API';\nimport { replaceInArray } from '../../Utils';\n\n\nexport function SmsForm(props) {\n const { Category,\n CreationDateTime,\n Description,\n MobileNumber,\n SmsStatus,\n WorkerId,\n WorkerName,\n onSendClick,\n onTextAreaChange,\n } = props;\n return \n \n \n { MobileNumber } { SmsStatus }\n \n onTextAreaChange(e, WorkerId)}\n disabled={SmsStatus != 0}\n />\n \n }\n />\n
\n { (SmsStatus == 0) && }\n { (SmsStatus == 1) && }\n
\n
\n}\n\n\n\nclass SMSSendingPage extends Component {\n state = {\n textMesssages: [],\n }\n\n componentDidMount() {\n this.getData();\n }\n\n getData = async () => {\n const msgs = await getGeneratedTextmessages();\n this.setState({ textMesssages: msgs });\n }\n\n handleTextAreaChange = (e, WorkerId) => {\n const { textMesssages } = this.state;\n const newMessage = { \n ...textMesssages.find(t => t.WorkerId === WorkerId),\n Description: e.target.value,\n };\n const newList = replaceInArray(textMesssages, newMessage, 'WorkerId');\n this.setState({ textMesssages: newList });\n }\n\n handleSendClick = async (workerId) => {\n const payload = this.state.textMesssages.find(t => t.WorkerId == workerId);\n await postTextmessage(payload);\n this.getData();\n }\n\n render() {\n\n return (\n
\n \n \n { this.state.textMesssages.map(\n (t, i) => )}\n \n \n
\n );\n }\n}\n\n\nexport default withStyles(styles, { withTheme: true })(SMSSendingPage);\n","import React, { Component } from 'react';\nimport {\n Paper,\n Grid,\n List,\n ListItem,\n ListSubheader,\n ListItemText,\n TextField,\n FormControl,\n FormHelperText,\n Select,\n MenuItem,\n Button,\n Typography,\n Fab,\n TextareaAutosize,\n Switch,\n} from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { withStyles } from '@material-ui/core/styles';\nimport styles from '../Common/FormStyles';\nimport { getGeneratedTextmessages, postTextmessage, getWorkers, getIncomingMessages, getNotificationsByWorkerId } from '../../API';\nimport { replaceInArray } from '../../Utils';\nimport moment from 'moment';\n\n\nexport function SmsForm(props) {\n const { \n Category,\n CreationDateTime,\n Description,\n Content,\n MobileNumber,\n SmsStatus,\n WorkerId,\n WorkerName,\n onSendClick,\n onTextAreaChange,\n NotificationId,\n } = props;\n\n return \n \n \n { !NotificationId && MobileNumber } { CreationDateTime ? moment(CreationDateTime).fromNow() : 'Send a new message' }\n \n onTextAreaChange(e, WorkerId)}\n disabled={!onTextAreaChange}\n />\n \n }\n />\n
\n { onSendClick && }\n
\n
\n}\n\n\n\nclass SMSInterface extends Component {\n state = {\n textMesssages: [],\n newMessage: \"\",\n message: '',\n }\n\n componentDidMount() {\n console.log(this.props);\n this.getData();\n this.interval = setInterval(this.getData, 7000);\n }\n\n componentWillUnmount() {\n clearInterval(this.interval);\n }\n\n getData = async () => {\n var messages = [];\n this.setState({ message: 'getting messages...'});\n const textMesssages = await getIncomingMessages(this.props.workerStatus.WorkerId);\n var notifs = await getNotificationsByWorkerId(this.props.workerStatus.WorkerId);\n messages = [...textMesssages, ...notifs];\n messages.sort((g, a) => moment(g.CreationDateTime).isBefore(moment(a.CreationDateTime)) ? 1 : -1);\n this.setState({ textMesssages: messages });\n this.setState({ message: ''});\n }\n\n handleTextAreaChange = (e) => {\n this.setState({ newMessage: e.target.value });\n }\n\n handleSendClick = async () => {\n var payload = {\n Category: \"SMSTOSEND\",\n CreationDateTime: moment().format(),\n Description: this.state.newMessage,\n MobileNumber: this.props.workerStatus.Mobile,\n NotificationStatus: 0,\n WorkerId: this.props.workerStatus.WorkerId,\n WorkerName: \"\",\n };\n await postTextmessage(payload);\n this.setState({ newMessage: \"\" });\n this.getData();\n }\n\n render() {\n\n return (\n
\n \n \n Text Messages\n \n \n \n \n {this.state.message}\n \n \n { this.state.textMesssages.map(\n (t, i) => )}\n \n \n \n
\n );\n }\n}\n\n\nexport default withStyles(styles, { withTheme: true })(SMSInterface);\n","import React, { Component } from 'react';\nimport {\n Paper,\n Grid,\n List,\n ListItem,\n ListSubheader,\n ListItemText,\n TextField,\n FormControl,\n FormHelperText,\n Select,\n MenuItem,\n Button,\n Typography,\n Fab,\n TextareaAutosize,\n Switch,\n} from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { withStyles } from '@material-ui/core/styles';\nimport styles from '../Common/FormStyles';\nimport { getWorkerNotes, addWorkerNote } from '../../API';\nimport { replaceInArray } from '../../Utils';\nimport moment from 'moment';\n\n\nexport function NotesForm(props) {\n const { \n newNote,\n onTextAreaChange,\n onSendClick,\n } = props;\n\n return \n \n \n Add new note\n \n onTextAreaChange(e)}\n disabled={!onTextAreaChange}\n />\n \n }\n />\n
\n \n
\n
\n}\n\n\n\nclass WorkerNotes extends Component {\n state = {\n workerNotes: [],\n newNote: \"\",\n }\n\n componentDidMount() {\n this.getData();\n }\n\n getData = async () => {\n var messages = [];\n this.setState({ message: 'notes...'});\n const notes = await getWorkerNotes(this.props.workerStatus.WorkerId);\n notes.sort((g, a) => moment(g.CreatedAt).isBefore(moment(a.CreatedAt)) ? 1 : -1);\n this.setState({ workerNotes: notes, message: ' ' });\n }\n\n handleTextAreaChange = (e) => {\n this.setState({ newNote: e.target.value });\n }\n\n handleSendClick = async () => {\n if(!this.state.newNote) {\n return;\n }\n var payload = {\n workerId: this.props.workerStatus.WorkerId,\n content: this.state.newNote,\n };\n await addWorkerNote(payload);\n this.setState({ newNote: \"\" });\n this.getData();\n }\n\n render() {\n const { workerNotes } = this.state;\n return (\n
\n \n \n \n \n {this.state.message}\n \n \n { workerNotes.map(n => {\n return \n {n.Content}}\n secondary={moment(n.CreatedAt).fromNow()}\n />\n \n })}\n \n \n \n \n
\n );\n }\n}\n\n\nexport default withStyles(styles, { withTheme: true })(WorkerNotes);\n","import React, { Component } from 'react';\nimport {\n Paper,\n Grid,\n List,\n ListItem,\n ListSubheader,\n ListItemText,\n TextField,\n FormControl,\n FormHelperText,\n Button,\n Typography,\n Fab,\n Switch,\n Modal,\n} from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport styles from '../Common/FormStyles';\nimport { getAllUsersAllCompanies, getIncomingMessages, getSupportWorkerLatestIncomingSMS, getSupportWorkerStatus, getCompanies } from '../../API';\nimport moment from 'moment';\nimport MUIDataTable from 'mui-datatables';\nimport SMSInterface from './SMSInterface';\nimport WorkerNotes from './WorkerNotes';\nimport { isNowBetweenMoments } from '../../Utils';\n\nvar data = {\"WorkerId\":1111,\n\"Name\":\"Robert Isip\",\n\"Latitude\":-36.867088,\n\"Longitude\":174.758163,\n\"LastKnownLocationTime\":\"2022-10-19 07:20:02\",\n\"LastDeviceUpdateTime\":\"2022-10-19 07:20:02\",\n\"LastDistanceUpdateTime\":\"2022-10-19 07:20:02\",\n\"LastDistanceToSite\":0,\n\"LastClosestSite\":\"CRL MtEden\",\n\"LatestEvent\":{\n \"SiteName\":\"CRL MtEden\",\n \"WorkerName\":\"Robert Isip\",\n \"EventType\":\"ONSITE\",\n \"EventTime\":\"2022-10-19 07:20:02\",\n \"CreatedAtUtc\":\"2022-10-18 18:55:38\"\n},\n\"BatteryPercentage\":22,\n\"ClosestShift\":{\n \"IsOvernight\":false,\n \"SiteName\":\"CRL MtEden\",\n \"SiteId\":419,\n \"StartDateTime\":\"2022-10-19 06:00:00\",\n \"EndDateTime\":\"2022-10-19 18:00:00\"\n},\n\"LastVisitedSiteId\":419,\n\"ScheduledSiteId\":419,\n\"Mobile\":\"+642102790376\",\n\"DeviceId\":\"351516172861130\",\n\"DeviceLastSeenOnsite\":true,\n\"Company\":\"Turbo Staff - Auckland\",\n\"LatestCharge\": {\n \"LocationDateTime\":\"2022-10-17 04:29:31\",\n \"Battery\":57,\n \"PreviousBattery\":45,\n \"PreviousTime\":\"2022-10-17 04:14:30\"\n}\n};\n\nconst problems = {\n NEVER_USED: 'Never used a device',\n NOT_AVAILABLE: 'Nothing from device',\n NOT_AVAILABLE_DAYS: 'Nothing from device 2 days',\n BATTERY_ZERO: 'Battery at zero for too long',\n NO_LOCATION_WORK_TIME: 'No Location during work',\n NOT_AT_WORK: 'Not at work',\n NOT_SCHEDULED: 'Not Scheduled',\n NONE: 'None',\n}\n\nconst solutions = {\n [problems.NEVER_USED]: 'Onboarding + Charge clip & device',\n [problems.NOT_AVAILABLE_DAYS]: 'CALL Charge clip & device',\n [problems.NOT_AVAILABLE]: 'SMS Charge clip & device',\n [problems.BATTERY_ZERO]: 'SMS Charge clip & device',\n [problems.NO_LOCATION_WORK_TIME]: 'Ask if they are at work',\n [problems.NOT_AT_WORK]: 'Do Nothing',\n [problems.NOT_SCHEDULED]: 'Check schedule or Disable',\n [problems.NONE]: 'Do Nothing',\n}\n\nconst problemsorder = {\n ['msg']: 0,\n [problems.NEVER_USED]: 1,\n [problems.NOT_SCHEDULED]: 2,\n [problems.NOT_AVAILABLE_DAYS]: 3,\n [problems.NOT_AVAILABLE]: 4,\n [problems.BATTERY_ZERO]: 5,\n [problems.NO_LOCATION_WORK_TIME]: 6,\n [problems.NOT_AT_WORK]: 7,\n [problems.NONE]: 8,\n}\n\nconst problemsColor = {\n [problems.NEVER_USED]: 'rgba(255, 0, 0, 0.4)',\n [problems.NOT_SCHEDULED]: 'rgba(255, 0, 0, 0.35)',\n [problems.NOT_AVAILABLE_DAYS]: 'rgba(255, 0, 0, 0.3)',\n [problems.NOT_AVAILABLE]: 'rgba(255, 111, 0, 0.3)',\n [problems.BATTERY_ZERO]: 'rgba(255, 111, 0, 0.3)',\n [problems.NO_LOCATION_WORK_TIME]: 'rgba(255, 213, 0, 0.3)',\n [problems.NOT_AT_WORK]: 'rgba(255, 213, 0, 0.3)',\n [problems.NONE]: 'rgba(19, 173, 2, 0.3)',\n}\n\nexport const columns = [\n /*{\n name: 'Photo',\n options: {\n filter: false,\n customBodyRender: (value) => {\n return (\n value ? : No Photo\n );\n },\n },\n },\n {\n name: 'Payroll ID',\n options: {\n filter: false,\n },\n },\n {\n name: 'Device ID',\n },\n {\n name: 'name',\n },*/\n { name: 'Company', options: { display: false} },\n { name: 'Name', options: {\n customBodyRender: (val) => {\n if(!val) return '';\n if(!val.latestSMS){\n return val.Name;\n }\n const now = moment();\n const messageTime = moment(val.latestSMS.CreationDateTime);\n if(now.diff(messageTime, 'days') < 5)\n {\n return
\n msg\n {val.Name}\n
\n } else {\n return val.Name;\n }\n }\n } },\n { name: 'Latest reply', options: {\n customBodyRender: (val) => {\n if(!val || !val.latestSMS) {\n return '';\n }\n const { latestSMS } = val;\n return
\n
{ moment(latestSMS.CreationDateTime).fromNow()}
\n
{ latestSMS.Description }
\n
;\n },\n sort: true,\n }},\n { name: 'Site', options: { display: false} },\n { name: 'OnSite', options: { display: false} },\n { name: 'Charge' },\n { name: 'Updated at' },\n { name: 'Location',\n options: {\n customBodyRender: (val) => {\n if(!val.LastKnownLocationTime) return
;\n return
\n
{moment(val.LastKnownLocationTime).fromNow()}
\n \n
\n },\n display: false,\n }\n },\n { name: 'Site Distance', options: { display: false}},\n { name: 'Shift Start', options: { display: false} },\n { name: 'Mobile' },\n { name: 'Event', options: { display: false}},\n { name: 'DeviceId', options: { display: false}},\n { name: 'Problem', options: { customBodyRender: \n (val) => (
{val}
) } },\n { name: 'Action' },\n { name: 'data', options: { display: false, customBodyRender: (v) => JSON.stringify(v) }}\n]\n\n\n\n\nfunction workerStatusProblem(workerStatus, checkMsgForOrder) {\n const {\n LastDeviceUpdateTime,\n LastKnownLocationTime,\n LastDistanceToSite,\n LastDistanceUpdateTime,\n ClosestShift,\n BatteryPercentage,\n latestSMS,\n } = workerStatus;\n\n if(latestSMS && checkMsgForOrder)\n {\n const n = moment();\n const messageTime = moment(latestSMS.CreationDateTime);\n if(n.diff(messageTime, 'days') < 5)\n {\n return 'msg';\n }\n }\n\n const now = moment();\n if(!LastDeviceUpdateTime)\n {\n return problems.NEVER_USED;\n }\n if(!ClosestShift)\n {\n return problems.NOT_SCHEDULED;\n }\n const shiftStart = moment(ClosestShift.StartDateTime);\n const shiftEnd = moment(ClosestShift.EndDateTime);\n const lastUpdated = moment(LastDeviceUpdateTime);\n const hoursAgo = lastUpdated.diff(now, 'hours');\n\n if(Math.abs(hoursAgo) > 48)\n {\n return problems.NOT_AVAILABLE_DAYS;\n }\n\n if(Math.abs(hoursAgo) > 16)\n {\n return problems.NOT_AVAILABLE;\n }\n\n const isScheduled = ClosestShift && now.isBetween(shiftStart, shiftEnd);\n if(!isScheduled) {\n return problems.NONE;\n }\n\n const minutesAgo = lastUpdated.diff(now, 'minutes');\n\n if(BatteryPercentage < 1 && Math.abs(minutesAgo) > 90)\n {\n return problems.BATTERY_ZERO;\n }\n\n if(moment(LastKnownLocationTime).isBefore(shiftStart.add(-1, 'hours')) && isScheduled)\n {\n return problems.NO_LOCATION_WORK_TIME;\n }\n\n if(moment(LastDistanceUpdateTime).diff(now, 'minutes') < 120 && LastDistanceToSite > 500)\n {\n return problems.NOT_AT_WORK;\n }\n\n return problems.NONE;\n}\n\nfunction statusRow(status) {\n const {\n Name,\n Latitude,\n Longitude,\n LastKnownLocationTime,\n LastDeviceUpdateTime,\n LastDistanceUpdateTime,\n LastDistanceToSite,\n LastClosestSite,\n LatestEvent,\n ClosestShift,\n Mobile,\n DeviceId,\n Company,\n LatestCharge,\n BatteryPercentage,\n latestSMS,\n } = status;\n var problem = workerStatusProblem(status);\n var row = [\n Company, \n status,\n status,\n LastClosestSite, \n moment(LastKnownLocationTime).fromNow(), \n LatestCharge ? LatestCharge.Battery + \"%\" + \" \" + moment(LatestCharge.LocationDateTime).fromNow(): 'None',\n LastDeviceUpdateTime ? moment(LastDeviceUpdateTime).fromNow() + \" \" + BatteryPercentage + \"% batt\" : \"\",\n { LastKnownLocationTime, Latitude, Longitude },\n LastDistanceToSite + \"m \" + moment(LastDistanceUpdateTime).fromNow(),\n ClosestShift ? moment(ClosestShift.StartDateTime).fromNow() : 'None',\n Mobile,\n LatestEvent ? LatestEvent.EventType + \" \" + moment(LatestEvent.EventTime).fromNow(): 'None',\n DeviceId,\n problem,\n solutions[problem],\n status,\n ];\n return row;\n}\n\nconst options = {\n filterType: 'multiselect',\n selectableRows: false,\n responsive: 'scroll',\n rowsPerPage: 500,\n rowsPerPageOptions: [10, 20, 50, 100],\n onRowClick: (a) => {\n \n },\n onChangeRowsPerPage: () => {},//this.handleChangeRowsPerPage,\n};\n\nconst modalStyle = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nfunction ActionModal(props) {\n if(!props.selectedStatus) {\n return null;\n }\n return \n \n \n \n { props.selectedRow.slice(0, 14).map((val, i) => {\n return {columns[i].name}: {val}\n })}\n \n \n \n { props.selectedStatus && }\n \n \n { props.selectedStatus && }\n \n \n \n \n}\n\nclass SupportDashboard extends Component {\n state = {\n statuses: [],\n selectedStatus: null,\n rows: [],\n selectedRow: null,\n }\n\n onRowClick = (row, dataIndex) => {\n const status = this.state.statuses[dataIndex.dataIndex];\n this.setState({ selectedStatus: status, selectedRow: row });\n }\n\n handleModalClose = () => {\n this.setState({ selectedStatus: null, selectedRow: null });\n }\n\n componentDidMount() {\n this.getData();\n }\n\n getData = async () => {\n const data = await Promise.all([getCompanies(), getAllUsersAllCompanies()])\n const companies = data[0];\n const goodCompanies = companies.filter(c => !c.IsArchived && !c.Name.toLowerCase().includes('test')).map(c => c.CompanyId);\n var statuses = await Promise.all(data[1].filter(\n w => goodCompanies.includes(w.CompanyId) && w.IsWorker \n && w.IsEnabled &! w.IsAdministrator &! w.IsSuperAdministrator).map(\n async w => {\n const b = await getSupportWorkerStatus(w.WorkerId);\n const c = await getSupportWorkerLatestIncomingSMS(w.WorkerId);\n return { ...b, latestSMS: c};\n }));\n \n statuses.sort((a, b) => {\n return problemsorder[workerStatusProblem(a, true)] > problemsorder[workerStatusProblem(b, true)] ? 1 : -1;\n });\n\n const rows = statuses.filter(s => !!s).map(statusRow);\n this.setState({ statuses: statuses.filter(s => !!s), rows });\n }\n\n render() {\n const { rows } = this.state;\n options.onRowClick = this.onRowClick;\n return (\n
\n \n \n \n \n \n \n
\n );\n }\n}\n\n\nexport default SupportDashboard;\n","import {\n Grid,\n Tab,\n Tabs\n} from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport React, { Component } from 'react';\nimport { getWorkers } from '../../API';\nimport styles from '../Common/FormStyles';\nimport AddSuperAdminForm from './AddSystemAdminForm';\nimport CreateCompanyForm from './CreateCompanyForm';\nimport DeviceFirmwareForm from './DeviceFirmwareForm';\nimport Reports from './Reports';\nimport WorkerTimeline from './WorkerTimeline';\nimport WifiBeaconPage from './WifiBeacons/WifiBeaconPage';\nimport LabourAgencies from './LabourAgencies';\nimport ManageCompanys from './ManageCompanys';\nimport ManualEmailSender from './ManualEmailSender';\nimport SMSSendingPage from './SMSSendingPage';\nimport SMSInterface from './SMSInterface';\nimport SupportDashboard from './SupportDashboard';\n\n\nclass SuperAdminPage extends Component {\n state = {\n selectedTab: 11,\n }\n\n componentDidMount() {\n\n }\n\n handleTabSelect = async (evt, tab) => {\n if( tab == 5) {\n await getWorkers().then(workers => this.setState({ workers }));\n }\n this.setState({ selectedTab: tab });\n }\n\n render() {\n const { selectedTab } = this.state;\n return (\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\nexport default withStyles(styles, { withTheme: true })(SuperAdminPage);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport MapGL, {\n GeoJSONLayer,\n Popup,\n} from 'react-mapbox-gl';\nimport {\n MAPBOX_TOKEN,\n SAT_MAP_URI,\n} from '../../Constants/Constants';\nimport { uniqInArray } from '../../Utils';\nimport * as turf from '@turf/turf';\nimport { snapGeoJSONFeaturesToSite } from '../../GeoFunctions';\n\n\nconst Map = MapGL({\n accessToken: MAPBOX_TOKEN,\n preserveDrawingBuffer: true,\n});\n\n\nexport class ContactTracingMap extends Component {\n state = {\n zoom: 7,\n pitch: 45,\n center: [174.822493, -36.855736],\n }\n\n componentDidMount() {\n }\n\n handleMapClick = (e, e1, e2) => {\n console.log(e, e1, e2);\n debugger;\n }\n\n handleStyleLoad = map => {\n if(map) {\n map.resize();\n }\n }\n\n handleCircleHover = (e) => {\n const { features, lngLat, type } = e;\n\n if (type === 'mouseleave') {\n return this.setState({ popup: null });\n }\n\n /* eslint-disable */\n const names = uniqInArray(features.map(\n ({ properties }) => `${properties.ContactName} ${moment(properties.LocationDateTime).format('MMM DD HH:mm')}`));\n const toShow = names.map((n) => {\n return (\n
\n {n}\n
\n );\n });\n /* eslint-enable */\n\n const popup = (\n \n { toShow }\n \n );\n this.setState({ popup });\n }\n\n handleTrackHover = (e) => {\n const { features, lngLat, type } = e;\n\n if (type === 'mouseleave') {\n return this.setState({ popup2: null });\n }\n const feature = features.find(f => !!f.properties.LocationDateTime);\n const popup2 = feature && (\n \n { moment(feature.properties.LocationDateTime).format('MMM DD HH:mm') }\n \n );\n this.setState({ popup2 });\n }\n\n shouldComponentUpdate({\n contactGeojson, workerTrack, zones, sites,\n }, { popup, popup2 }) {\n /* eslint-disable */\n const isWorkerTrackChange = JSON.stringify(workerTrack) !== JSON.stringify(this.props.workerTrack);\n const isContactChange = JSON.stringify(contactGeojson) !== JSON.stringify(this.props.contactGeojson);\n const isSiteChange = JSON.stringify([zones, sites]) !== JSON.stringify([this.props.zones, this.props.sites]);\n const isPopupChange = popup !== this.state.popup || popup2 !== this.state.popup2;\n return !!(isSiteChange || isWorkerTrackChange || isContactChange || isPopupChange);\n /* eslint-enable */\n }\n\n getMapProps = () => {\n const center = this.props.center || this.state.center;\n return {\n center,\n style: SAT_MAP_URI,\n onMove: this.handleMove,\n className: 'dashboard-map dashboard-responsive',\n onStyleLoad: this.handleStyleLoad,\n onClick: this.handleMapClick,\n };\n }\n\n render() {\n const {\n colorStops,\n contactGeojson,\n workerTrack,\n sites,\n zones,\n setMapRef,\n } = this.props;\n console.log(setMapRef);\n const { popup, popup2 } = this.state;\n\n const workerTrackRender = workerTrack && workerTrack.features && workerTrack; \n const extraLayer = contactGeojson.features.length && (\n \n );\n\n const extraLayer3 = workerTrack.features.length && (\n \n );\n const feat = workerTrackRender.features[0];\n let bbox = undefined;\n if(feat) {\n const buffered = turf.buffer(feat, 0.2);\n bbox = turf.bbox(buffered);\n }\n const mapProps = this.getMapProps();\n return (\n { setMapRef && setMapRef(map) }}\n preserveDrawingBuffer={true}\n >\n {\n [(\n s.GeoJSON))}\n linePaint={{\n 'line-color': '#a69924',\n 'line-width': 4,\n }}\n fillExtrusionPaint={{\n 'fill-extrusion-color': '#f5e342',\n 'fill-extrusion-height': 0.2,\n 'fill-extrusion-opacity': 0.2,\n }}\n type=\"fill-extrusion\"\n extruded\n />\n ),\n ( s.GeoJSON))}\n linePaint={{\n 'line-color': '#000',\n 'line-width': 2,\n }}\n fillExtrusionPaint={{\n 'fill-extrusion-color': '#fff',\n 'fill-extrusion-height': 0.4,\n 'fill-extrusion-opacity': 0.3,\n }}\n type=\"fill-extrusion\"\n extruded\n />\n ),\n extraLayer3, extraLayer, popup2, popup,\n ]\n }\n \n );\n }\n}\n\nexport const mapStateToProps = state => (state) => {\n const { zones, contactTracing, sites } = state;\n const { contactGeojson, workerTrack } = contactTracing;\n const snappedGeo = snapGeoJSONFeaturesToSite(sites.all, contactGeojson);\n const center = snappedGeo.features.length && turf.center(snappedGeo).geometry.coordinates;\n return {\n contactGeojson: snappedGeo,\n workerTrack: snapGeoJSONFeaturesToSite(sites.all, workerTrack),\n sites: sites.all,\n zones: zones.all,\n center,\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ContactTracingMap);\n","import List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport PersonIcon from '@material-ui/icons/AccountCircle';\nimport * as turf from '@turf/turf';\nimport moment from 'moment';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport { mapDispatchToProps } from '../Approvals/ApprovalsForm';\n\n\nexport function getZoneNamesFromContact(contactGeojson, zones, contactLogEntry) {\n const points = contactGeojson.features.filter(\n f => f.properties.WorkerId === contactLogEntry.workerId).map(\n p => p.geometry.coordinates);\n\n const zoneNames = zones.filter(\n z => !!turf.pointsWithinPolygon(\n turf.points(points), turf.buffer(z.GeoJSON, 2, { units: 'meters' })).features.length).map(z => z.Name);\n return zoneNames;\n}\n\n\nexport function ContactTracingResultListComponent({ contactLog, colorMap, zones, contactGeojson }) {\n const items = contactLog.map((cl, i) => {\n const color = colorMap[cl.workerId];\n const zoneNames = getZoneNamesFromContact(contactGeojson, zones, cl);\n const zonesText = zoneNames.length ? `Contact within ${zoneNames.join(',')}` : '';\n return (\n \n \n \n \n \n \n );\n });\n\n return (\n \n \n \n \n {items}\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport const mapStateToProps = (state) => {\n const { contactTracing, zones, workers } = state;\n const { contactGeojson } = contactTracing;\n const contactLog = makeContactLog(contactGeojson);\n\n return {\n contactLog,\n zones: zones.all,\n workers: workers.all,\n contactGeojson,\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ContactTracingResultListComponent);\n\nexport function makeContactLog({ features }) {\n\n const workerIds = [...new Set(features.map(f => f.properties.WorkerId))];\n\n const log = workerIds.map(id => features.find(f => f.properties.WorkerId === id)).map(\n (g) => ({\n name: g.properties.Name,\n time: g.properties.LocationDateTime,\n contactWith: g.properties.ContactName,\n workerId: g.properties.WorkerId\n }));\n\n log.sort((a, b) => {\n const aa = moment(a.time);\n const bb = moment(b.time);\n if (aa.isSame(bb)) {\n return 0;\n }\n return aa.isBefore(bb) ? -1 : 1;\n });\n\n return log;\n}\n\n\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n FormControl,\n TextField,\n} from '@material-ui/core';\nimport { RootReducerType } from \"../../redux/store/rootReducer\";\nimport { ContactTracingActions } from '../../redux/actions/ContactTracingActions';\nimport moment from 'moment';\n\n\ninterface DispatchProps {\n onChange(changes: any): void; \n}\n\ninterface StateProps {\n showAdvanced: boolean;\n fromDate: moment.Moment;\n toDate: moment.Moment;\n startTime: string;\n endTime: string;\n distanceBuffer: number;\n timeBuffer: number;\n}\n\nexport type ContactTracingFormProps = StateProps & DispatchProps;\n\n\nexport class ContactTracingFormComponent extends Component {\n\n handleFromDateChange = ({ target }) => {\n this.props.onChange({ fromDate: moment(target.value, 'YYYY-MM-DD') } );\n }\n\n handleToDateChange = ({ target }) => {\n this.props.onChange({ toDate: moment(target.value, 'YYYY-MM-DD') });\n }\n\n handleStartTimeChange = ({ target }) => {\n this.props.onChange({ startTime: target.value });\n }\n\n handleEndTimeChange = ({ target }) => {\n this.props.onChange({ endTime: target.value });\n }\n\n handledistanceBufferChange = ({ target }) => {\n this.props.onChange({ distanceBuffer: target.value });\n }\n\n handleTimeBufferChange = ({ target }) => {\n this.props.onChange({ timeBuffer: target.value });\n }\n\n render() {\n const { fromDate, toDate, startTime, endTime, timeBuffer, distanceBuffer } = this.props;\n const props:ContactTracingFormProps = this.props;\n return (\n
\n
\n \n \n \n \n \n \n
\n\n
\n \n \n \n \n \n \n
\n \n { props.showAdvanced && (\n
\n \n \n \n \n \n \n
\n )}\n
\n );\n }\n}\n\nconst mapStateToProps = (state: RootReducerType): StateProps => {\n const { me } = state;\n const { \n fromDate, toDate, startTime, endTime, timeBuffer, distanceBuffer,\n } = state.contactTracing;\n return {\n showAdvanced: !!me.me.IsSuperAdministrator,\n fromDate, toDate, startTime, endTime, timeBuffer, distanceBuffer,\n };\n};\n\nconst dispatchProps = (dispatch) => ({\n onChange: (w) => dispatch(ContactTracingActions.setContactTracingFormValues(w)),\n})\n\nexport const ContactTracingForm = connect(mapStateToProps, dispatchProps)(ContactTracingFormComponent);","import html2pdf from 'html2pdf.js';\n\n\nexport function printToPDF(htmlString, options) {\n html2pdf().set(options).from(htmlString).save();\n}","\nconst stylesStr = `\n#wrapper {\n width: 1000px;\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n background-color: #fff;\n}\n\nbody {\n padding: 0;\n font-size: 100%;\n}\n\nhtml, body {\n width: 1000px;\n margin:0;\n padding:0;\n font-size: 12px;\n font-family: Arial, Helvetica, sans-serif;\n line-height: 1.3rem;\n}\n\ntable {\n font-size: 11px;\n width: 1000px;\n border: 2px solid #000;\n border-collapse: collapse;\n border-spacing: 0;\n}\n\nth {\n font-size: 12px;\n}\n\n.left {\n margin-right: left;\n}\n.right {\n text-align: right;\n}\n\ntr {\n \n}\n\ntd {\n border: 1px solid #000;\n padding: 2px;\n font-weight: 100;\n}\n\nth {\n border: 1px solid #000;\n background-color: #eee;\n font-weight: 800;\n}\n\ndiv {\n background-color: #FFF;\n}\n\n.main {\n margin-top: 20px;\n margin-left: 20px;\n}\n\nsmall {\n color: #999;\n}\n\n.pad-left {\n padding-left: 25px;\n}\n\n`;\n\nfunction formatContactRow({ Name, Mobile, Email, PayrollId, supervisorName,\n supervisorMobile, zoneNames, siteNames }) {\n return `\n \n ${Name}\n ${PayrollId}\n ${Mobile}\n ${Email}\n ${supervisorName}\n ${supervisorMobile}\n ${siteNames} ${zoneNames}\n \n `;\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeContactTraceHTML(values, dataUrl) {\n const {\n fromDate,\n toDate,\n printDate,\n covidCaseStatus,\n firstSymptomDate,\n payrollId,\n mobile,\n name,\n email,\n contacts,\n supervisorName,\n superVisorMobile,\n } = values;\n \n const rows = contacts.map(formatContactRow).join('');\n const html = `\n \n \n \n \n \n \n
\n
\n
\n
\n
COVID-19 Contact Report
\n
\n
\n
Printed ${printDate}
\n
\n
\n
\n
\n
From: ${fromDate}
\n
To: ${toDate}
\n
\n
\n
First Symptoms Date
\n
${firstSymptomDate}
\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
Case NamePayroll IDPhoneEmailSupervisorSupervisors PhoneCovid-19 Status
${name}${payrollId}${mobile}${email}${supervisorName}${superVisorMobile}${covidCaseStatus}
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n ${rows}\n \n
Contact NamePayroll IDPhoneEmailSupervisorSupervisors PhoneSites & Zones in Contact
\n
\n
\n \n\n `;\nreturn html;\n}\n","import React, { Component } from 'react';\nimport moment from 'moment';\nimport { getZoneNamesFromContact } from './ContactTracingResultList';\nimport { printToPDF } from '../Utils/PrintPdf';\nimport { makeContactTraceHTML } from './HTMLContactTrace';\nimport { IconButton } from '@material-ui/core';\nimport PrintIcon from '@material-ui/icons/Print';\nimport { makeContactLog } from './ContactTracingResultList';\nimport { connect } from 'react-redux';\n\n\n\nexport class ContactReportPrintButton extends Component {\n\n printCovidReport = () => {\n\n const { \n covidCaseStatus,\n firstSymptomDate,\n selectedWorker,\n workers,\n sites,\n zones,\n fromDate,\n toDate,\n contactLog,\n contactGeojson,\n mapInstanceRef,\n } = this.props;\n const supervisor = workers.find(\n s => s.WorkerId === selectedWorker.supervisor);\n \n const { payrollId, mobile, name, email } = selectedWorker;\n\n const contacts = contactLog ? contactLog.map(c => {\n const worker = workers.find(w => w.WorkerId === c.workerId);\n const zoneNames = getZoneNamesFromContact(contactGeojson, zones, c);\n const siteNames = getZoneNamesFromContact(contactGeojson, sites, c);\n const supervisor = workers.find(s => s.WorkerId === worker.Supervisor); \n return {\n ...worker,\n zoneNames,\n siteNames,\n supervisorName: supervisor ? supervisor.Name : '',\n supervisorMobile: supervisor ? supervisor.Mobile : '',\n };\n }) : [];\n\n const details = {\n fromDate: `${fromDate.format('YYYY-MM-DD')}`,\n toDate: `${toDate.format('YYYY-MM-DD')}`,\n printDate: moment().format('YYYY-MM-DD, HH:mm'),\n covidCaseStatus,\n firstSymptomDate: moment(firstSymptomDate).format('YYYY-MM-DD'),\n payrollId,\n mobile,\n name,\n email,\n contacts,\n supervisorName: supervisor ? supervisor.Name : '',\n superVisorMobile: supervisor ? supervisor.Mobile : '',\n };\n\n const options = {\n filename: `contact-report-${name.replace(' ', '')}`,\n jsPDF: { orientation: 'landscape' },\n //pagebreak: {avoid: 'tr'},\n margin: 5,\n };\n\n console.log(this.props.mapRef);\n const dataUrl = this.props.mapRef.getCanvas().toDataURL('image/png');\n\n printToPDF(makeContactTraceHTML(details, dataUrl), options);\n }\n\n render() {\n return (\n \n \n \n );\n }\n\n}\n\nconst mapStateToProps = (state) => {\n const { contactTracing, zones, sites, workers, workersCovid } = state;\n const { \n contactGeojson,\n fromDate,\n toDate,\n startTime,\n endTime,\n } = contactTracing;\n const contactLog = makeContactLog(contactGeojson);\n\n return {\n contactLog,\n zones: zones.all,\n workers: workers.all,\n selectedWorker: workersCovid.selectedWorker,\n contactGeojson,\n fromDate,\n toDate,\n startTime,\n endTime,\n sites: sites.all,\n canPrint: !!contactGeojson.features.length,\n };\n}\n\nexport default connect(mapStateToProps, {})(ContactReportPrintButton);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n Grid,\n Typography,\n IconButton,\n} from '@material-ui/core';\nimport * as turf from '@turf/turf';\nimport moment from 'moment-timezone';\nimport {\n getWorkers,\n getCloseContacts,\n getAllSites,\n getAllZones,\n getWorkerLocationsByDateRange,\n} from '../../API';\nimport {\n WorkerActions,\n setSites,\n setZones,\n setLocations,\n setSnackbar, \n setLoading,\n} from '../../redux/actions/AllActions';\nimport ContactTracingMap from './ContactTracingMap';\nimport ContactTracingResultList, { getZoneNamesFromContact } from './ContactTracingResultList';\nimport { randomColor, parseUrlQueryParameters, caseStatusColor } from '../../Utils';\nimport { \n clusteriseContactTracingResults,\n locationTimestampsToPoints,\n} from '../../GeoFunctions';\nimport { CovidCaseActions } from '../../redux/actions/CovidCaseActions';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport { WorkerCovidActions } from '../../redux/actions/WorkersCovidActions';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { ContactTracingActions } from '../../redux/actions/ContactTracingActions';\nimport { ContactTracingForm } from './ContactTracingForm';\nimport { Worker } from '../../api/index';\nimport { RootReducerType } from '../../redux/store/rootReducer';\nimport ContactReportPrintButton from './ContactReportPrintButton';\n\n\nexport const styles = (theme) => ({\n buttonTypography: {\n ...theme.typography.button,\n padding: theme.spacing(1),\n fontSize: '12px',\n },\n warningIcon: {\n transformY: '20px',\n height: '15px',\n transform: 'translateY(2px)',\n },\n});\n\ninterface ContactTracingPageState {\n colorMap: any;\n mapColorStops: Array;\n loaded: boolean;\n mapRef: any;\n hasResult: boolean;\n};\n\ninterface StateProps {\n workers: Array;\n customSettings: any;\n currentUser: any;\n selectedWorker: Worker;\n covidCaseStatus: string;\n firstSymptomDate: string;\n fromDate: moment.Moment;\n toDate: moment.Moment;\n startTime: string;\n endTime: string;\n distanceBuffer: number;\n timeBuffer: number;\n};\n\ninterface DispatchProps {\n setAllWorkers(ws: any): void;\n _setAllSites(ws: any): void;\n _setSnackbar(ws: any): void;\n _setLoading(ws: any): void;\n _setSelectedWorker(ws: any, b: any): void;\n _setAllZones(ws: any): void;\n loadWorkerCovidCase(ws: any): void;\n loadCreateCovidCaseForm(ws: any): void;\n _setContactGeojson(ws: any): void;\n _setWorkerTrack(ws: any): void;\n};\n\ninterface OwnProps {\n classes: any;\n history: any;\n}\n\ntype ContactTracingPageProps = StateProps & DispatchProps & OwnProps;\n\nexport class ContactTracingPageComponent extends Component {\n state:ContactTracingPageState = {\n loaded: false,\n hasResult: false,\n colorMap: {},\n mapColorStops: [],\n mapRef: null,\n }\n\n componentDidMount() {\n this.loadData();\n }\n\n setMapRef = (ref) => {\n this.setState({ mapRef: ref });\n }\n\n handleFormChange = (changes: ContactTracingPageState) => {\n this.setState({ formState: changes });\n }\n\n componentWillReceiveProps(newProps, newState) {\n const {\n loadWorkerCovidCase,\n loadCreateCovidCaseForm,\n } = this.props;\n const sWorker = this.props.selectedWorker || newProps.selectedWorker;\n if(sWorker && !this.state.loaded) {\n loadWorkerCovidCase(newProps.selectedWorker.covidCasesUri);\n loadCreateCovidCaseForm(newProps.selectedWorker.covidCaseCreateFormUri);\n this.setState({ loaded: true });\n }\n const toCompare = ['fromDate', 'toDate', 'startTime', 'endTime', 'distanceBuffer', 'timeBuffer'];\n toCompare.forEach(k => {\n if(JSON.stringify(newProps[k]) !== JSON.stringify(this.props[k])) {\n this.setState({ hasResult: false });\n }\n })\n }\n\n loadData = async () => {\n const {\n setAllWorkers, _setLoading, _setAllZones, _setAllSites, selectedWorker, history,\n _setSelectedWorker,\n } = this.props;\n \n _setLoading(true);\n const [ workers, sites, zones ] = await Promise.all([\n getWorkers(),\n getAllSites(),\n getAllZones(),\n ]);\n const colorMap = {};\n const mapColorStops = [];\n workers.forEach((w) => {\n colorMap[`${w.WorkerId}`] = randomColor();\n mapColorStops.push([w.WorkerId, colorMap[`${w.WorkerId}`]]);\n });\n this.setState({ colorMap, mapColorStops });\n setAllWorkers(workers);\n _setAllZones(zones);\n _setAllSites(sites);\n \n if(selectedWorker) {\n await this.getCloseContactData(selectedWorker.workerId);\n } else {\n const workerId = parseUrlQueryParameters(history,'workerId');\n const name = parseUrlQueryParameters(history,'name');\n const uri = parseUrlQueryParameters(history,'uri');\n _setSelectedWorker(workerId, uri);\n }\n _setLoading(false);\n this.setState({ loaded: true });\n \n }\n\n getCloseContactData = async (workerId) => {\n this.props._setLoading(true);\n const { _setContactGeojson } = this.props;\n const {\n fromDate,\n toDate,\n distanceBuffer,\n timeBuffer,\n startTime,\n endTime,\n workers,\n } = this.props;\n\n const startDateTime = moment.tz(`${fromDate.format('YYYY-MM-DD')} ${startTime}`, \"Pacific/Auckland\");\n const endDateTime = moment.tz(`${toDate.format('YYYY-MM-DD')} ${endTime}`, \"Pacific/Auckland\");\n await this.getCloseContactTrack(workerId);\n const contactData = await getCloseContacts(workerId,\n startDateTime.utc().format('YYYY-MM-DD'),\n endDateTime.utc().format('YYYY-MM-DD'),\n timeBuffer,\n distanceBuffer,\n startDateTime.utc().format('HH:mm'),\n endDateTime.utc().format('HH:mm')\n );\n \n if (contactData && contactData.length) {\n const geojson = clusteriseContactTracingResults(contactData);\n \n _setContactGeojson(geojson);\n this.setState({ hasResult: true });\n } else {\n this.handleNoContactResult();\n }\n\n this.props._setLoading(false);\n }\n\n handleNoContactResult = async () => {\n this.setState({ contactGeojson: null, contactLog: null, hasResult: true });\n this.props._setSnackbar({\n message: `No contact detected`,\n openTime: new Date().getTime(),\n });\n }\n\n clearResult = () => {\n this.setState({ contactGeojson: null, contactLog: null, workerTrack: null, hasResult: false });\n }\n\n formCallback = ({ fromDate, toDate, fromTime, toTime, distancBuffer, timeBuffer }) => {\n this.setState({ fromDate, toDate, fromTime, toTime, distancBuffer, timeBuffer });\n }\n\n getCloseContactTrack = async (workerId) => {\n \n const {\n fromDate,\n toDate,\n startTime,\n endTime,\n } = this.props;\n\n const startDateTime = moment.tz(`${fromDate.format('YYYY-MM-DD')} ${startTime}`, \"Pacific/Auckland\");\n const endDateTime = moment.tz(`${toDate.format('YYYY-MM-DD')} ${endTime}`, \"Pacific/Auckland\");\n\n const locs = await getWorkerLocationsByDateRange({ \n WorkerId: workerId,\n StartDateTimeUTC: startDateTime.utc().format('YYYY-MM-DD HH:mm'),\n EndDateTimeUTC: endDateTime.utc().format('YYYY-MM-DD HH:mm'),\n });\n\n if (locs.length) {\n this.props._setWorkerTrack(locationTimestampsToPoints(locs));\n }\n }\n\n render() {\n const { \n classes,\n covidCaseStatus,\n selectedWorker,\n firstSymptomDate,\n } = this.props;\n\n const {\n mapColorStops,\n colorMap,\n } = this.state;\n \n const covidStatusStyle = caseStatusColor(covidCaseStatus);\n\n return (\n \n \n \n \n \n \n \n
\n \n { selectedWorker && selectedWorker.name }\n \n
\n\n
\n { covidCaseStatus &&
\n {`Covid-19 Status ${covidCaseStatus}`}\n
}\n
\n \n
\n \n this.getCloseContactData(selectedWorker && selectedWorker.workerId) }\n >\n \n \n
\n
\n \n
\n
\n
\n );\n }\n}\n\nexport const mapStateToProps = (state: RootReducerType):StateProps => {\n const { workers, me, workersCovid, covidCase, contactTracing } = state;\n const caseStatus = covidCase.covidCase && covidCase.covidCase.uri && covidCase.covidStatusList.find(\n s => s.key === covidCase.covidCase.caseStatus);\n\n const {\n fromDate,\n toDate,\n startTime,\n endTime,\n distanceBuffer,\n timeBuffer,\n } = contactTracing;\n\n return {\n workers: workers.all,\n customSettings: me.company.customSettings,\n currentUser: me.me,\n selectedWorker: workersCovid.selectedWorker,\n covidCaseStatus: caseStatus ? caseStatus.description : 'Not a Case',\n firstSymptomDate: covidCase.covidCase ? covidCase.covidCase.caseDateTime : '',\n fromDate,\n toDate,\n startTime,\n endTime,\n distanceBuffer,\n timeBuffer,\n };\n};\n\nconst mapDispatchToProps = (dispatch):DispatchProps => ({\n setAllWorkers: ws => dispatch(WorkerActions.setWorkers(ws)),\n _setAllSites: ws => dispatch(setSites(ws)),\n _setSnackbar: ws => dispatch(setSnackbar(ws)),\n _setLoading: ws => dispatch(setLoading(ws)),\n _setSelectedWorker: (workerId, uri) => {\n // [Rimu 09/09/2020] moving from the old endpoints to the RestApi - so part way through this as below\n dispatch(WorkerActions.setSelectedDashboardWorker(workerId));\n dispatch(WorkerCovidActions.setSelectedWorker(uri));\n },\n _setAllZones: ws => dispatch(setZones(ws)),\n loadWorkerCovidCase: uri => dispatch(CovidCaseActions.findWorkersCovidCase(uri)),\n loadCreateCovidCaseForm: uri => dispatch(CovidCaseActions.getUpdateCovidCaseForm(uri)),\n _setContactGeojson: ws => dispatch(ContactTracingActions.setContactGeojson(ws)),\n _setWorkerTrack: ws => dispatch(ContactTracingActions.setWorkerTrack(ws)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(ContactTracingPageComponent)));\n","import React from 'react';\nimport {\n ListItemText,\n ListItem,\n Typography,\n ListItemSecondaryAction,\n Grid,\n} from \"@material-ui/core\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport moment from 'moment';\n\nconst useStyles = makeStyles((theme) => ({\n inline: {\n display: 'inline',\n left: 0,\n },\n}));\n\nfunction renderHeader(fieldName, changeType, createdBy) {\n if(fieldName == 'Note') {\n return `Note by ${createdBy}`;\n }\n return `${changeType} by ${createdBy}`;\n}\n\nfunction renderBody(fieldName, prefix, value) {\n if(fieldName === 'Note') {\n return value;\n }\n if(fieldName ==='Status') {\n //uncamelcase the value\n return `${prefix} ${fieldName}: ${value.replace(/([A-Z])/g, ' $1')}`;\n }\n if(fieldName === 'Date') {\n return `${prefix} First Symptoms Date: ${moment(value, 'YYYY-MM-DD').format('YYYY-MM-DD')}`;\n\n }\n return `${prefix} ${fieldName}: ${value}`;\n}\n\n\nexport default function(props) {\n\n const { fieldName, changeType, date, createdBy, value, prefix } = props;\n const header = renderHeader(fieldName, changeType, createdBy);\n const body = renderBody(fieldName, prefix, value);\n const classes = useStyles();\n return \n \n \n \n \n {body}\n \n \n }\n />\n\n\n \n \n { moment(date, 'YYYY-MM-DD').format('YYYY-MM-DD') }\n \n \n \n \n \n \n ;\n}\n","import React, { Dispatch, PropsWithChildren, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport {\n Theme,\n List,\n ListItem,\n} from \"@material-ui/core\";\nimport { Worker, CovidCase, CovidCaseHistory } from '../../api/index';\nimport { RootReducerType } from \"../../redux/store/rootReducer\";\nimport MUIDataTable from 'mui-datatables';\nimport { CovidCaseActions } from '../../redux/actions/CovidCaseActions';\nimport { CovidCaseState } from \"../../redux/reducers/CovidCaseReducer\";\nimport { isoDateStringToDayFormat, IsoStringIsBeforeIsoString } from '../../Utils';\nimport { FormFieldType, FormOption, FormModelBase } from \"../../RestClient/RestApiMicroFormat\";\nimport { PayloadAction } from \"../../redux/actions/types\";\nimport HistoryItem from './HistoryItem';\n\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n root: {\n margin: 20,\n overflow: 'auto',\n },\n}));\n\n\ninterface StateProps {\n historyList?: CovidCaseHistory;\n historyListUri?: string;\n}\n\ninterface DispatchProps {\n loadHistoryList(uri: string) : void;\n}\n\ntype Props = StateProps & DispatchProps;\n\nexport function CovidCaseHistoryList(props: PropsWithChildren): JSX.Element {\n const classes = useStyles();\n const [historyLoaded, setHistoryLoaded] = useState(false);\n // componentDidMount\n useEffect(() => {\n \n if(!historyLoaded && props.historyListUri) {\n props.loadHistoryList(props.historyListUri!);\n setHistoryLoaded(true);\n }\n\n });\n\n if(!props.historyList) {\n return
;\n }\n\n return (\n\n \n { props.historyList!.changes.map(\n (c, i) => ) }\n \n );\n}\n\n\nexport const mapStateToProps = (state: RootReducerType, ownProps: any): StateProps => {\n \n const covidCaseState:CovidCaseState = state.covidCase;\n return {\n //using this Uri top get the options\n historyListUri: covidCaseState.covidCase && covidCaseState.covidCase.historyUri! ,\n historyList: covidCaseState.covidCaseHistory,\n };\n}\n\nexport const mapDispatchToProps = (dispatch:(v:any) => Promise>, ownProps: any): DispatchProps => {\n return {\n loadHistoryList: (uri) => dispatch(CovidCaseActions.getcovidCaseHistory(uri)), \n };\n};\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CovidCaseHistoryList);\n\n","import React, { FunctionComponent, useEffect, useState} from \"react\";\nimport { connect } from \"react-redux\";\nimport { RouteProps, withRouter } from \"react-router-dom\";\nimport { RouterProps } from 'react-router';\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport AlternateEmailRoundedIcon from '@material-ui/icons/AlternateEmail';\nimport LocalPhoneRoundedIcon from '@material-ui/icons/LocalPhone';\n\nimport { \n Avatar,\n Button,\n Box,\n Typography,\n TextField,\n TextareaAutosize,\n Grid,\n Theme,\n} from \"@material-ui/core\";\nimport { Autocomplete } from '@material-ui/lab'\n\nimport { CovidCaseActions } from '../../redux/actions/CovidCaseActions';\nimport { WorkerCovidActions } from '../../redux/actions/WorkersCovidActions';\n\nimport { RootReducerType } from \"../../redux/store/rootReducer\";\nimport { CovidCaseState } from '../../redux/reducers/CovidCaseReducer';\nimport { WorkersState } from '../../redux/reducers/WorkersCovidReducer';\nimport { FormModelBase, FormFieldType, FormOption, makeSubmittFormData, RestModelBase } from \"../../RestClient/RestApiMicroFormat\";\nimport { parseUrlQueryParameters, ISODateTimeOffsetToDisplayDate} from '../../Utils';\nimport { PayloadAction } from \"../../redux/actions/types\";\nimport CovidCaseHistoryList from './CovidCaseHistoryList';\n\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n root: {\n flexGrow: 1,\n margin: 0,\n padding: theme.spacing(2),\n paddingLeft: 0,\n height: 'calc(100vh - 65px)',\n overflow: 'auto',\n }, \n buttonBox:{\n display: 'flex',\n justifyContent:'flex-end',\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(4),\n '& > *': {\n margin: theme.spacing(1),\n },\n },\n large_avitar: {\n width: theme.spacing(17),\n height: theme.spacing(17),\n marginBottom: theme.spacing(3),\n },\n groupedContainer: { \n marginTop: theme.spacing(2),\n },\n\n groupedContainerRHS: { \n marginTop: theme.spacing(3), \n },\n textarea: {\n width: '100%',\n },\n\n iconField: {\n display: 'flex',\n alignItems: 'center',\n color: 'gray',\n },\n\n icon : {\n color: 'grey',\n margin: '4px 8px 4px 0px',\n },\n\n grayText: {\n color: 'gray',\n }\n\n}));\n\n\n// Props passed from parent\ninterface CovidCaseFormOwnProps {}\n\ninterface NoteHistory {\n date:Date;\n text:string;\n}\n\n// State passed from Redux\nexport interface StateProps {\n loadingState :{\n isLoading: boolean;\n isReady: boolean;\n error?: string;\n }\n workerUri?: string;\n\n worker ?: {\n uri: string;\n avitarUri?: string;\n supervisorUri?:string;\n covidCasesUri: string;\n covidCaseCreateFormUri: string;\n\n workerName:string;\n workerEmail:string;\n payrollId: string,\n phoneNumber: string,\n }\n \n supervisor? : {\n name: string;\n }\n\n createForm?: FormModelBase;\n updateForm?: FormModelBase;\n \n covidCase? : {\n uri:string;\n updateFormUri?: string;\n caseStatusOption?:FormOption;\n caseDateTime?: string;\n note?:string;\n }\n\n noteHistory: Array;\n covidStatusList: Array;\n saveAction:string;\n}\n\n// Actions wrapped in dispatch\nexport interface DispatchProps {\n loadWorker(workerUrl: string): void;\n loadSupervisor(supervisorUrl:string) : void;\n loadExistingCase(uri:string) : void;\n loadCreateCaseForm(formUrl: string) : void;\n submitCreateForm(form:FormModelBase, data:any) : void;\n submitUpdateForm(uri: string, data:any, form: FormModelBase) : void;\n clearSelectedCovidCase() : void;\n\n loadUpdateCaseForm(formUrl: string): void;\n}\n\n// Combine all prop types\nexport type Props = {stateProps: StateProps, dispatchProps:DispatchProps} & CovidCaseFormOwnProps & RouteProps & RouterProps;\n\nexport const CovidCaseFormComponent: FunctionComponent = (props) : JSX.Element => {\n const classes = useStyles();\n const [status, setStatus] = useState(\"Loading\");\n \n const { worker, supervisor, covidCase, createForm, updateForm } = props.stateProps;\n const { dispatchProps, stateProps, history } = props;\n\n const onFormSubmitt = (e:React.FormEvent) => {\n e.preventDefault();\n\n const formFields = e.currentTarget.elements; \n\n //TODO alert if the date is in future\n\n setStatus(\"Saving...\");\n (covidCase && covidCase.uri) ? \n dispatchProps.submitUpdateForm(covidCase.uri, formFields, updateForm!) :\n dispatchProps.submitCreateForm(createForm!, formFields); \n \n // TODO : This needs to be done better....\n history.goBack();\n }\n \n useEffect(()=> {\n if(!worker) {\n var workerUri = parseUrlQueryParameters(props, \"workerUri\");\n dispatchProps.loadWorker(workerUri!);\n }\n }, []);\n\n useEffect(() => {\n if(!worker) {\n return;\n }\n dispatchProps.loadCreateCaseForm(worker!.covidCaseCreateFormUri!);\n if(worker!.supervisorUri!) {\n dispatchProps.loadSupervisor(worker!.supervisorUri!);\n }\n\n dispatchProps.loadExistingCase(worker!.covidCasesUri!);\n }, [JSON.stringify(worker!)]);\n\n useEffect(() => {\n if(!(covidCase && covidCase!.uri!)) {\n return;\n }\n if(covidCase!.updateFormUri!){\n dispatchProps.loadUpdateCaseForm(covidCase!.updateFormUri!);\n }\n }, [JSON.stringify(covidCase!)]);\n\n const caseStatusOption = covidCase ? covidCase!.caseStatusOption : undefined;\n const caseDateTime = covidCase ? covidCase!.caseDateTime : undefined;\n const note = covidCase ? covidCase!.note : undefined;\n\n return (!stateProps.loadingState.isReady) ? \n (
Loading...{stateProps.loadingState.error}
) : \n (\n
\n \n \n \n \n \n
\n \n \n {worker!.workerName}\n \n\n
\n \n \n {worker!.workerEmail}\n \n
\n\n
\n \n \n {worker!.phoneNumber}\n \n
\n\n
\n\n
\n Supervisor\n \n {supervisor!.name}\n \n
\n\n
\n Payroll ID\n \n {worker!.payrollId}\n \n
\n\n
\n
\n \n \n
\n \n \n \n \n\n
\n o.description}\n getOptionSelected={(option, value) => option.key === value.key}\n renderInput={(params) => } \n defaultValue={ caseStatusOption } \n />\n
\n\n
\n \n
\n\n
\n \n
\n
\n
\n \n \n \n \n \n \n
\n );\n}\n\nconst mapStateToProps = (state: RootReducerType, ownProps: CovidCaseFormOwnProps): {stateProps:StateProps} => {\n const caseState: CovidCaseState = state.covidCase;\n const workersState: WorkersState = state.workersCovid;\n const worker = workersState.selectedWorker;\n\n const{ supervisor , createForm , covidCase, updateForm} = caseState;\n const newProps: StateProps = {\n loadingState :{\n error: caseState.error,\n isLoading: false,\n isReady : !!(worker && (!worker.supervisorUri || supervisor) && (createForm || updateForm)), \n },\n noteHistory: [], \n covidStatusList: [],\n createForm: createForm,\n updateForm: updateForm,\n saveAction: covidCase && covidCase.uri ? \"Save\" : \"Create\"\n };\n \n if(worker){\n newProps.worker = {\n uri: worker.uri,\n avitarUri: worker.workerImageUrl,\n supervisorUri: worker.supervisorUri,\n covidCasesUri: worker.covidCasesUri!,\n covidCaseCreateFormUri: worker.covidCaseCreateFormUri || '',\n\n workerName: worker.name,\n payrollId: worker.payrollId || '',\n workerEmail: worker.email || '', \n phoneNumber: worker.mobile || '', \n }\n\n if(!worker.supervisorUri){\n newProps.supervisor = {\n name:\"No supervisor, this worker is a supervisor\"\n }\n }\n \n if(supervisor){\n newProps.supervisor = {\n name:supervisor!.name\n }\n }\n \n if(createForm){\n const optionField = createForm.attributes.find(x => (x.type === FormFieldType.OPTIONS && x.name === \"caseStatus\"));\n newProps.covidStatusList = (optionField && optionField.options) ? optionField.options! : [];\n if(covidCase)\n {\n newProps.covidCase = {\n ...covidCase,\n caseStatusOption: newProps.covidStatusList.find(x => x.key === covidCase!.caseStatus),\n caseDateTime: ISODateTimeOffsetToDisplayDate(covidCase!.caseDateTime), \n }; \n } else {\n newProps.covidCase = { uri: '' };\n }\n }\n }\n\n return {stateProps:newProps};\n}\n\nconst mapDispatchToProps = (dispatch:(v:any) => Promise>, ownProps: CovidCaseFormOwnProps): {dispatchProps:DispatchProps} => {\n const dispProps : DispatchProps = {\n loadWorker: (workerUrl: string) => dispatch(WorkerCovidActions.setSelectedWorker(workerUrl)),\n loadSupervisor: (supervisorUrl:string) => dispatch(CovidCaseActions.getSupervisor(supervisorUrl)),\n loadCreateCaseForm: (formUrl: string) => dispatch(CovidCaseActions.getCreateCovidCaseForm(formUrl)),\n loadUpdateCaseForm: (formUrl: string) => dispatch(CovidCaseActions.getUpdateCovidCaseForm(formUrl)),\n loadExistingCase : (uri:string) => dispatch(CovidCaseActions.findWorkersCovidCase(uri)), \n submitCreateForm: (form:FormModelBase, data:any) => dispatch(CovidCaseActions.postCovidCaseForm(form.uri, makeSubmittFormData(form, data))),\n submitUpdateForm: (uri: string, data:any, form: FormModelBase) => dispatch(CovidCaseActions.putCovidCaseForm(uri, makeSubmittFormData(form, data))),\n clearSelectedCovidCase: () => dispatch(CovidCaseActions.clearSelectedCovidCase()),\n };\n\n return {dispatchProps: dispProps};\n};\n\nexport const CovidCaseForm = withRouter( connect(mapStateToProps, mapDispatchToProps)(CovidCaseFormComponent) );\n","import React, { Dispatch, PropsWithChildren, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { RouteProps, withRouter } from \"react-router-dom\";\nimport { RouterProps } from 'react-router';\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport {\n Theme,\n Modal,\n Button,\n} from \"@material-ui/core\";\nimport { Worker, CovidCase } from '../../api/index';\nimport { RootReducerType } from \"../../redux/store/rootReducer\";\nimport MUIDataTable from 'mui-datatables';\nimport { WorkerCovidActions } from '../../redux/actions/WorkersCovidActions';\nimport { CovidCaseActions } from '../../redux/actions/CovidCaseActions';\nimport { WorkersState } from '../../redux/reducers/WorkersCovidReducer';\nimport { CovidCaseState } from \"../../redux/reducers/CovidCaseReducer\";\nimport { isoDateStringToDayFormat, IsoStringIsBeforeIsoString } from '../../Utils';\nimport { FormFieldType, FormOption, FormModelBase } from \"../../RestClient/RestApiMicroFormat\";\nimport { PayloadAction } from \"../../redux/actions/types\";\n\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n root: {\n flexGrow: 1,\n margin: 10,\n },\n modal: {\n display: 'flex',\n padding: theme.spacing(1),\n alignItems: 'center',\n justifyContent: 'center',\n },\n paper: {\n width: 400,\n backgroundColor: theme.palette.background.paper,\n border: '2px solid #000',\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n}));\n\n\n// Props passed from parent\n//interface CovidCasesPageOwnProps : any;\n\n// State passed from Redux\ninterface StateProps {\n tableRows: Array>;\n apiRoot: any;\n selectedWorker: Worker;\n createFormUri?: string;\n}\n\n// Actions wrapped in dispatch\ninterface DispatchProps {\n getWorkersList(uri: string): void;\n getCovidCasesList(uri: string): void;\n setSelectedWorker(uri: string) : void;\n clearCovidCase(): void;\n loadCreateCaseForm(formUrl: string) : Promise>;\n}\n\n\n// Combine all prop types\ntype Props = StateProps & DispatchProps & RouteProps & RouterProps;\n\nexport function CovidCasesPage(props: PropsWithChildren): JSX.Element {\n const classes = useStyles();\n const [modalOpen, openModal] = useState(false);\n const [loadedCases, setCasesLoaded ] = useState(false);\n const [loadedWorkers, setLoadedWorkers ] = useState(false);\n const [loadedForm, setLoadedForm ] = useState(false);\n\n // componentDidMount\n useEffect(() => {\n \n if(!loadedWorkers) {\n props.getWorkersList(props.apiRoot.companyUri);\n setLoadedWorkers(true);\n }\n \n if(props.createFormUri && !loadedForm) {\n props.loadCreateCaseForm(props.createFormUri);\n setLoadedForm(true);\n }\n if(!loadedCases) {\n props.getCovidCasesList(props.apiRoot.companyUri);\n setCasesLoaded(true);\n }\n });\n\n return (\n
\n {\n props.setSelectedWorker(row[0]);\n openModal(true)\n },\n viewColumns: false,\n responsive: 'scroll',\n rowsPerPage: 100,\n }}\n id={\"worker-cases-table\"}\n />\n
{ props.selectedWorker && props.selectedWorker.name }
\n openModal(false)}\n disablePortal\n disableEnforceFocus\n disableAutoFocus\n aria-labelledby=\"simple-modal-title\"\n aria-describedby=\"simple-modal-description\"\n className={classes.modal}\n >\n
\n

{ props.selectedWorker && props.selectedWorker.name }

\n
\n \n
\n
\n \n
\n
\n \n \n
\n );\n}\n\n\nconst workerCovidTableHeaders = [\n { name: 'workerUri', options: { display: false, filter: false, download: false, print: false }},\n { \n name: 'Photo',\n options: {\n customBodyRender: (val:string) => { return val && }, \n filter: false,\n sort: false,\n download: false,\n print: false,\n },\n },\n { name: 'Payroll ID', options: { filter: false} },\n { name: 'Name', options: { filter: false } },\n { \n name: 'Active Case',\n options: {\n customBodyRender: (val: string) => ,\n filter: true,\n sort: false,\n }\n },\n { \n name: 'Case Status',\n options: {\n filter: true,\n filterType: 'multiselect',\n \n }\n },\n { name: 'First Symptoms', options: { filter: false, sort: false }},\n { name: 'Last Updated', options: { filter: false, sort: false }},\n { name: 'Supervisor', options: { display: false, filter: true }},\n { name: 'covidCaseUri', options: { display: false, filter: false, download: false, print: false }},\n]\n\n\nfunction workerToTableRow(worker: Worker, covidCases: Array, workers: Array, formOptions: Array): Array {\n const matchingCases:Array = covidCases.filter(c => c.workerUri === worker.uri)!;\n const latestMatchingCase:CovidCase = matchingCases.sort((a, b) => IsoStringIsBeforeIsoString(a.createdAt, b.createdAt) ? 1 : -1)[0];\n const supervisor:Worker = workers.find(w => worker.supervisorUri === w.uri)!;\n const caseStatusOption = latestMatchingCase && formOptions.find(o => o.key === latestMatchingCase.caseStatus!);\n\n return [\n worker.uri,\n worker.workerImageUrl || '',\n worker.payrollId || '',\n worker.name,\n latestMatchingCase && latestMatchingCase.isActive ? 'Active' : '',\n caseStatusOption ? caseStatusOption.description : 'Not a Case',\n latestMatchingCase && latestMatchingCase.caseDateTime ? isoDateStringToDayFormat(latestMatchingCase.caseDateTime) : '',\n latestMatchingCase && latestMatchingCase.updatedAt ? isoDateStringToDayFormat(latestMatchingCase.updatedAt) : '',\n supervisor ? supervisor.name : '',\n latestMatchingCase ? latestMatchingCase.uri! : '',\n ];\n}\n\n\n\nexport const mapStateToProps = (state: RootReducerType, ownProps: any): StateProps => {\n const workersState:WorkersState = state.workersCovid;\n const covidCaseState:CovidCaseState = state.covidCase;\n const { createForm, covidCaseList } = covidCaseState;\n const optionField = createForm && createForm.attributes.find(x => (x.type === FormFieldType.OPTIONS && x.name === \"caseStatus\"));\n const options = (optionField && optionField.options) ? optionField.options! : [];\n const firstWorker = workersState.workersList[0];\n const createFormUri = firstWorker && firstWorker.covidCaseCreateFormUri;\n return {\n //using this Uri top get the options\n createFormUri: createFormUri,\n tableRows: workersState.workersList.map(\n (w) => workerToTableRow(w, covidCaseList, workersState.workersList, options)),\n apiRoot: state.me.apiRoot,\n selectedWorker: workersState.selectedWorker!,\n };\n}\n\nexport const mapDispatchToProps = (dispatch:(v:any) => Promise>, ownProps: any): DispatchProps => {\n return {\n getWorkersList: (uri: string) => dispatch(WorkerCovidActions.getWorkersList(uri)),\n getCovidCasesList: (uri: string) => dispatch(CovidCaseActions.getCovidCaseList(uri)),\n setSelectedWorker: (uri: string) => dispatch(WorkerCovidActions.setSelectedWorker(uri)),\n clearCovidCase: () => dispatch(CovidCaseActions.clearSelectedCovidCase),\n loadCreateCaseForm: (formUrl: string) => dispatch(CovidCaseActions.getCreateCovidCaseForm(formUrl)),\n };\n};\n\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(CovidCasesPage));\n\n","import React, { useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n getWorkerGroups,\n createWorkerGroup,\n} from '../../API';\nimport {\n setWorkerGroups,\n} from '../../redux/actions/AllActions';\nimport { styles } from '../Approvals/Approvals';\n\n\nexport function CreateWorkerGroupForm(props) {\n\n const [groupName, setGroupName] = useState('');\n const [deviceInterval, setDeviceInterval] = useState(null);\n const [deviceMode, setDeviceMode] = useState(null);\n\n const onSaveGroupClick = () => {\n createWorkerGroup(groupName, deviceMode, deviceInterval).then(\n () => getWorkerGroups().then(props._setWorkerGroups));\n }\n\n return (\n
\n setGroupName(e.target.value)} \n />\n setDeviceInterval(parseFloat(e.target.value))}\n />\n setDeviceMode(parseInt(e.target.value))}\n />\n \n
\n );\n\n}\n\nexport const mapStateToProps = () => ({});\n\nexport const mapDispatchToProps = dispatch => ({\n _setWorkerGroups: x => dispatch(setWorkerGroups(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(CreateWorkerGroupForm)));\n ","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Divider from '@material-ui/core/Divider';\n\nimport { styles } from '../Approvals/Approvals';\nimport {\n getWorkerGroups,\n} from '../../API';\nimport {\n setWorkerGroups,\n setEditingWorkerGroup,\n} from '../../redux/actions/AllActions';\n\n\n\nexport function WorkerGroupList(props) {\n\n useEffect(() => {\n getWorkerGroups().then(props._setWorkerGroups)\n }, []);\n\n const onGroupClick = (wg) => {\n return () => props._setEditingWorkerGroup(wg);\n }\n\n return (\n \n { props.workerGroups.map(\n w => \n {w.Name}\n )}\n \n );\n\n}\n\nexport const mapStateToProps = (state) => {\n return {\n workerGroups: state.workerGroups.all,\n } \n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setEditingWorkerGroup: x => dispatch(setEditingWorkerGroup(x)),\n _setWorkerGroups: x => dispatch(setWorkerGroups(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(WorkerGroupList)));\n ","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Autocomplete } from '@material-ui/lab';\nimport {\n Grid,\n Paper,\n Typography,\n FormHelperText,\n FormControlLabel,\n FormControl,\n ListSubheader,\n List,\n ListItem,\n Divider,\n ListItemText,\n ListItemIcon,\n Button,\n Switch,\n TextField,\n Select,\n MenuItem,\n} from '@material-ui/core';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport BlockIcon from '@material-ui/icons/Block';\nimport {\n getWorkers,\n addWorkerToGroup,\n removeWorkerFromGroup,\n deleteWorkerGroup,\n getWorkerGroups,\n} from '../../API';\nimport {\n setWorkerGroups,\n WorkerActions,\n} from '../../redux/actions/AllActions';\nimport { styles } from '../Approvals/Approvals';\n\n\nexport function SetWorkersForGroupForm(props) {\n const [selectedWorker, setSelectedWorker] = useState({ WorkerId: 0, Name: '' });\n useEffect(() => {\n getWorkers().then(props._setWorkers);\n }, []);\n \n if(!props.editingWorkerGroup) {\n return
;\n } \n\n const { Name, WorkerGroupId } = props.editingWorkerGroup;\n const addWorker = (worker) => {\n addWorkerToGroup(WorkerGroupId, worker.WorkerId).then(getWorkers).then(props._setWorkers);\n setSelectedWorker({ WorkerId: 0, Name: '' });\n }\n const removeWorker = (worker) => {\n removeWorkerFromGroup(worker.WorkerId).then(getWorkers).then(props._setWorkers);\n setSelectedWorker({ WorkerId: 0, Name: '' });\n }\n const removeGroup = () => { \n if(window.confirm('are you sure?')) {\n deleteWorkerGroup(WorkerGroupId).then(\n getWorkers).then(props._setWorkers).then(getWorkerGroups).then(props._setWorkerGroups);\n }\n }\n\n const workersInGroup = props.workers.filter(w => w.WorkerGroupId === WorkerGroupId);\n const workersOutOfGroup = props.workers.filter(w => w.WorkerGroupId !== WorkerGroupId);\n\n return (\n \n \n { Name }\n \n \n option.WorkerId === value.WorkerId}\n onChange={(event, newValue) => {\n setSelectedWorker(newValue);\n }}\n value={selectedWorker}\n getOptionLabel={(opt) => opt.Name}\n renderInput={(params) => }\n />\n \n \n \n \n \n \n { workersInGroup.map(w => {\n return \n {w.Name}\n removeWorker(w)}>\n \n \n \n })}\n \n \n \n \n \n \n )\n\n}\n\nexport const mapStateToProps = (state) => {\n const {\n workerGroups,\n workers,\n } = state;\n\n const { editingWorkerGroup } = workerGroups;\n \n return {\n workerGroups: workerGroups.all,\n workers: workers.all.filter(w => w.IsWorker),\n editingWorkerGroup,\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setWorkers: x => dispatch(WorkerActions.setWorkers(x)),\n _setWorkerGroups: x => dispatch(setWorkerGroups(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(SetWorkersForGroupForm)));\n ","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Grid } from '@material-ui/core';\nimport {\n\n} from '../../API';\nimport {\n\n} from '../../redux/actions/AllActions';\nimport { styles } from '../Approvals/Approvals';\nimport CreateWorkerGroupForm from './CreateWorkerGroupForm';\nimport WorkerGroupList from './WorkerGroupList';\nimport SetWorkersForGroupForm from './SetWorkersForGroupForm';\n\nexport function WorkerGroupsPage(props) {\n return (\n \n \n This is a title for groups\n \n \n \n \n \n \n \n \n\n \n )\n\n}\n\nexport const mapStateToProps = (state) => {\n const {\n } = state;\n\n return {\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(WorkerGroupsPage)));\n ","import React, { useState, useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport {\n TextField,\n Button,\n Grid,\n InputLabel,\n Checkbox,\n} from '@material-ui/core';\nimport {\n Autocomplete,\n} from '@material-ui/lab';\nimport {\n getShifts,\n createShift,\n getAllSites,\n} from '../../API';\nimport {\n setShifts,\n setSites,\n} from '../../redux/actions/AllActions';\n\n\nexport function CreateShiftForm(props) {\n\n useEffect(() => {\n getAllSites().then(props._setSites)\n }, []);\n const [selectedSite , setSelectedSite] = useState({ SiteId: 0, Name: '' });\n const [startTime, setStartTime] = useState('');\n const [endTime, setEndTime] = useState('');\n const [name, setName] = useState('');\n const [multiSite, setMultiSite] = useState(false);\n\n const canSave = !!(selectedSite.SiteId && startTime && endTime && (name || props.noName));\n \n const onSaveShiftClick = () => {\n // props.noname means that this is the schedule modal saving a shift\n if(props.noName) {\n canSave && props.saveShift(selectedSite.SiteId, startTime, endTime, null, null, null, null, multiSite).then(() => {\n setSelectedSite({ SiteId: 0, Name: '' });\n setStartTime('');\n setEndTime('');\n setName('');\n setMultiSite(false);\n }).then(getShifts).then(props._setShifts);\n } else {\n canSave && props.saveShift(selectedSite.SiteId, startTime, endTime, name, multiSite).then(() => {\n setSelectedSite({ SiteId: 0, Name: '' });\n setStartTime('');\n setEndTime('');\n setName('');\n setMultiSite(false);\n }).then(getShifts).then(props._setShifts);\n }\n\n \n }\n\n if(!props.sites.length) {\n return
\n }\n return (\n \n \n a.Active)}\n getOptionSelected={(option, value) => option.SiteId === value.SiteId}\n onChange={(event, newValue) => {\n setSelectedSite(newValue || { SiteId: 0, Name: '' });\n }}\n value={selectedSite}\n getOptionLabel={(opt) => opt.Name}\n renderInput={(params) => }\n />\n \n { !props.noName && \n setName(e.currentTarget.value)}\n type=\"text\"\n placeholder=\"Name\"\n />\n Name\n }\n \n setStartTime(e.currentTarget.value)} \n type=\"time\" \n />\n start time\n \n \n setEndTime(e.currentTarget.value)} \n type=\"time\" \n />\n end time\n \n \n {\n setMultiSite(e.target.checked);\n }}\n />\n Multi Site\n \n \n \n \n \n );\n\n}\n\n\nconst styles = {\n fieldPadding: { padding: '4px 0px 2px 0px' },\n}\n\n\nexport const mapStateToProps = (state) => ({\n sites: state.sites.all,\n});\n\nexport const mapDispatchToProps = dispatch => ({\n _setSites: x => dispatch(setSites(x)),\n _setShifts: x => dispatch(setShifts(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(CreateShiftForm));\n ","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Divider from '@material-ui/core/Divider';\nimport BlockIcon from '@material-ui/icons/Block';\n\nimport { styles } from '../Approvals/Approvals';\nimport {\n getShifts,\n getAllSites,\n archiveShift,\n} from '../../API';\nimport {\n setShifts,\n setSites,\n} from '../../redux/actions/AllActions';\nimport { ListItemIcon } from '@material-ui/core';\n\n\n\nexport function ShiftsList(props) {\n\n useEffect(() => {\n Promise.all([\n getAllSites(),\n getShifts(),\n ]).then(data => {\n props._setSites(data[0]);\n props._setShifts(data[1]);\n });\n }, []);\n \n const onDeleteClick = (shiftId) => {\n return () => archiveShift(shiftId).then(getShifts).then(props._setShifts);\n }\n\n return (\n
\n \n { props.shifts.map(\n w => \n s.SiteId == w.SiteId).Name}\n />\n \n )}\n \n
\n );\n\n \n}\n\nexport const mapStateToProps = (state) => {\n return {\n shifts: state.shifts.all.filter(a => !a.Archived),\n sites: state.sites.all,\n \n } \n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setShifts: x => dispatch(setShifts(x)),\n _setSites: x => dispatch(setSites(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(ShiftsList)));\n ","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Grid, Typography } from '@material-ui/core';\nimport {\n createShift,\n getShifts,\n} from '../../API';\nimport {\n setShifts,\n} from '../../redux/actions/AllActions';\nimport { styles } from '../Approvals/Approvals';\nimport CreateShiftForm from './CreateShiftForm';\nimport ShiftsList from './ShiftsList';\n\nconst saveShift = (siteId, startTime, endTime, name, multiSite) => {\n const newShift = { \n Name: name,\n SiteId: siteId,\n StartTime: startTime,\n EndTime: endTime,\n MultiSite: multiSite,\n }; \n \n return createShift(newShift);\n}\n\nexport function ShiftsPage(props) {\n\n const onShiftSave = (siteId, startTime, endTime, name, multiSite) => {\n return saveShift(siteId, startTime, endTime, name, multiSite).then(getShifts).then(props._setShifts);\n }\n\n return (\n \n \n Shifts\n \n \n \n \n \n \n \n \n );\n}\n\nexport const mapStateToProps = (state) => {\n const {\n shifts \n } = state;\n\n return {\n shifts: shifts.all,\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setShifts: (x) => setShifts(x),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(\n withStyles(styles, { withTheme: true })(ShiftsPage)));\n ","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Grid, Button } from '@material-ui/core';\nimport {\n getWorkerShifts,\n postWorkerShift,\n copyWorkerShifts,\n} from '../../API';\nimport {\n setWorkerShifts,\n setScheduleNextWeek,\n setSchedulePreviousWeek,\n setScheduleGroupView,\n setLoading,\n} from '../../redux/actions/AllActions';\nimport { formatUtcDateAsNZTime, isNowDuringOrBeforePeriod } from '../../Utils';\n\n\n\nexport function ScheduleWeekControl(props) {\n const { start, end, showGroups, week } = props;\n useEffect(() => {\n props._setLoading(true);\n getWorkerShifts(start, end).then((d) => {\n props._setWorkerShifts(d);\n props._setLoading(false);\n });\n }, [start]);\n\n const copyWeekClick = () => {\n if(!window.confirm('copy week will ignore single worker shifts and only copy group shifts')) {\n return;\n }\n props._setLoading(true);\n copyWorkerShifts(start).then(() => getWorkerShifts(start, end)).then(\n (s) => {\n props._setWorkerShifts(s);\n props._setLoading(false);\n });\n }\n\n return (\n \n \n { formatUtcDateAsNZTime(week[0], 'dddd DD MMMM')}\n { \" - \"}\n { formatUtcDateAsNZTime(week[6], 'dddd DD MMMM')}\n \n \n \n \n \n \n {props.showCopyWeek && }\n \n \n \n \n \n );\n\n}\n\nconst cellStyle = { \n flexDirection: 'row',\n display: 'flex',\n flexGrow: 1,\n minHeight: '50px',\n margin: '1px',\n border: '1px black solid',\n};\n\nexport const mapStateToProps = (state) => {\n const {\n workerShifts,\n } = state;\n const startDate = workerShifts.uiState.week[0];\n const endDate = workerShifts.uiState.week[6];\n\n return {\n week: workerShifts.uiState.week,\n start: startDate.format('YYYY-MM-DD HH:mm'),\n end: endDate.format('YYYY-MM-DD HH:mm'),\n showGroups: workerShifts.uiState.showGroups,\n showCopyWeek: isNowDuringOrBeforePeriod(startDate, endDate),\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setWorkerShifts: (x) => dispatch(setWorkerShifts(x)),\n _setScheduleNextWeek: (x) => dispatch(setScheduleNextWeek(x)),\n _setSchedulePreviousWeek: (x) => dispatch(setSchedulePreviousWeek(x)),\n _setScheduleGroupView: (x) => dispatch(setScheduleGroupView(x)),\n _setLoading: (x) => dispatch(setLoading(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ScheduleWeekControl));\n ","import React, { useState } from 'react';\nimport { \n Grid,\n List,\n ListItem,\n Modal,\n ListItemText,\n Button\n} from '@material-ui/core';\nimport CreateShiftForm from '../Shifts/CreateShiftForm';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport {\n setTimeFromString,\n} from '../../Utils';\nimport {\n postWorkerShift,\n getWorkerShifts,\n} from '../../API';\nimport {\n setWorkerShifts,\n} from '../../redux/actions/AllActions';\n\n\nfunction getSiteName(sites, shift) {\n return sites.find(s => s.SiteId === shift.SiteId).Name;\n}\n\n\nfunction saveShift(siteId, startTime, endTime, day, workerId, shiftId=null, workerGroupId=null, multiSite=null) {\n const newShift = {\n SiteId: siteId,\n StartDateTime: setTimeFromString(day, startTime).format('YYYY-MM-DD HH:mm:ss'),\n EndDateTime: setTimeFromString(day, endTime).format('YYYY-MM-DD HH:mm:ss'),\n WorkerId: workerId,\n ShiftId: shiftId,\n WorkerGroupId: workerGroupId || null,\n MultiSite: !!multiSite,\n }; \n return postWorkerShift(newShift);\n\n}\n\n\nexport function ScheduleShiftsModal(props) {\n const { allShifts, day, workerGroup, worker, open, toClose, sites, week, workersInGroup } = props;\n \n const workerId = worker && worker.WorkerId;\n \n const workerGroupId = workerGroup && workerGroup.WorkerGroupId;\n\n const afterSave = () => getWorkerShifts(week[0].format('YYYY-MM-DD HH:mm'), week[6].format('YYYY-MM-DD HH:mm')).then(\n props._setWorkerShifts).then(\n () => toClose(!open));\n\n const onSingleShiftSave = (siteId, startTime, endTime, _a, _b, _c, _d, multiSite) => {\n const saveFunc = workerGroupId ? Promise.all(\n workersInGroup.map(w => saveShift(siteId, startTime, endTime, day, w.WorkerId, null, workerGroupId, multiSite))) : saveShift(siteId, startTime, endTime, day, workerId, null, workerGroupId, multiSite);\n return saveFunc.then(afterSave);\n }\n\n const onShiftClick = (shift) => {\n\n const saveFunc = workerGroupId ? Promise.all(\n workersInGroup.map(w => saveShift(shift.SiteId, shift.StartTime, shift.EndTime, day, w.WorkerId, shift.ShiftId, workerGroupId, shift.MultiSite))) : saveShift(\n shift.SiteId, shift.StartTime, shift.EndTime, day, workerId, shift.ShiftId, null, shift.MultiSite);\n\n return saveFunc.then(afterSave);\n }\n\n return \n
\n \n \n
\n { (worker || workerGroup).Name }\n
\n { day.format('dddd MM YY') }\n
\n \n \n { allShifts.map(s => onShiftClick(s)}>\n \n ) }\n \n \n \n
\n Create an individual shift\n
\n \n
\n
\n \n
\n
\n}\n\nconst modalStyle = {\n position: 'absolute',\n left: '50%',\n top: '50%',\n padding: '20px',\n transform: 'translate(-50%, -50%)',\n backgroundColor: '#fff',\n maxHeight: '80%',\n overflow: 'scroll',\n}\n\nexport const mapStateToProps = (state, ownProps) => {\n const {\n shifts,\n sites,\n workers,\n workerShifts,\n } = state;\n \n return {\n allShifts: shifts.all.filter(s => !s.Archived),\n sites: sites.all,\n workers: workers.all,\n week: workerShifts.uiState.week,\n workersInGroup: ownProps.workerGroup && workers.all.filter(\n w => w.WorkerGroupId === ownProps.workerGroup.WorkerGroupId),\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setWorkerShifts: (x) => dispatch(setWorkerShifts(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ScheduleShiftsModal));\n ","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { clearWorkerShifts, getWorkerShifts } from '../../API';\nimport { setWorkerShifts } from '../../redux/actions/AllActions';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport IconButton from '@material-ui/core/IconButton';\nimport { formatUtcDateAsNZTime } from '../../Utils';\n\n\nfunction onClick(props) {\n return (e) => {\n e.stopPropagation();\n window.confirm('delete') && clearWorkerShifts(\n props.workerId, props.workerGroupId, props.day.format('YYYY-MM-DD 00:00')).then(\n () => getWorkerShifts(props.start, props.end).then(props._setWorkerShifts));\n }\n};\n\n\nfunction ClearDayButton(props) {\n\n return \n \n \n\n}\n\n\nexport const mapStateToProps = (state, ownProps) => {\n return {\n start: state.workerShifts.uiState.week[0].format('YYYY-MM-DD HH:mm'),\n end: state.workerShifts.uiState.week[6].format('YYYY-MM-DD HH:mm'),\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setWorkerShifts: x => dispatch(setWorkerShifts(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ClearDayButton));\n \n","import React, { useState } from 'react';\nimport { \n Grid,\n} from '@material-ui/core';\nimport ScheduleShiftsModal from './ScheduleShiftsModal';\nimport ClearDayButton from './ClearDayButton';\nimport { SSL_OP_SSLEAY_080_CLIENT_DH_BUG } from 'constants';\n\n\n\nfunction renderNamedShift(sites, s) {\n return
\n
\n {s.Name}\n
\n
\n { getSiteName(sites, s) }\n
\n
\n {`${s.StartTime.slice(0, 5)} - ${s.EndTime.slice(0, 5)}`}\n
\n
;\n} \n\nfunction renderWorkerShift(sites, s) {\n return
\n
\n { getSiteName(sites, s) }\n
\n
\n {`${s.StartDateTime.split(' ')[1].slice(0, 5)} - ${s.EndDateTime.split(' ')[1].slice(0, 5)}`}\n
\n
;\n}\n\nfunction getSiteName(sites, shift) {\n var site = sites.find(s => s.SiteId === shift.SiteId);\n return shift.MultiSite ? '*All' : site.Name;\n}\n\n\nexport default function ScheduleCell(props) {\n const { sites, shifts, day, worker, workerGroup } = props;\n const [open, setOpen] = useState(false);\n const [showClear, setShowClear] = useState(false);\n const toClose = (x) => {\n setTimeout(setOpen(x));\n }\n const onMouseEnter = () => setShowClear(true);\n const onMouseLeave = () => setShowClear(false);\n const usedDisplay = [];\n return !open && setOpen(!open)}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n { shifts.filter(s => !!s).map((s, i) => {\n if(!usedDisplay.includes(s.ShiftId)) {\n usedDisplay.push(s.ShiftId);\n const key = `${s.ShiftId}-${s.WorkerShiftId}-${i}`;\n return (
\n { \n s.WorkerShiftId ? renderWorkerShift(sites, s) : renderNamedShift(sites, s) \n }\n
);\n }\n })}\n
\n { shifts.length && showClear ? : null}\n
\n \n
\n}\n\nexport const cellStyle = {\n border: '1px black solid',\n minHeight: '55px',\n padding: '3px',\n width:\"12%\",\n textOverflow: 'elipsis',\n position: 'relative',\n}\nexport const cellTextStyle = {\n fontSize: '0.7em',\n marginBlockStart: '1px',\n marginBlockEnd: '3px',\n}\n ","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { Grid } from '@material-ui/core';\nimport ScheduleCell, { cellStyle } from './ScheduleCell';\nimport { areSameDay } from '../../Utils';\n\nexport function ScheduleRow(props) {\n const { workerShifts, shifts, sites, workerGroup, worker } = props;\n return (\n \n \n
\n { workerGroup && workerGroup.Name }\n { worker && worker.Name }\n
\n
\n { props.week.map((day, i) => \n {\n const theShifts = workerShifts.filter(\n ws => areSameDay(ws.StartDateTime, day));/*.map(ws)\n ws => ws.ShiftId ? shifts.find(s => s.ShiftId == ws.ShiftId) : ws);*/\n \n return !!s)} \n sites={sites} \n worker={worker} \n workerGroup={workerGroup} \n />\n })}\n
\n );\n\n}\n\n\nexport const mapStateToProps = (state, ownProps) => {\n const {\n workerShifts,\n shifts,\n workers,\n sites,\n } = state;\n \n const { workerGroup, worker } = ownProps;\n const workerIds = workerGroup ? workers.all.filter(\n w => w.WorkerGroupId === workerGroup.WorkerGroupId).map(w => w.WorkerId) : [worker.WorkerId];\n \n const workerShiftsToDisplay = workerShifts.all.filter(\n ws => workerIds.includes(ws.WorkerId));\n\n return {\n week: workerShifts.uiState.week,\n workerShifts: workerShiftsToDisplay,\n shifts: shifts.all,\n sites: sites.all,\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ScheduleRow));\n ","import React, { useEffect, useState } from 'react';\nimport moment from 'moment';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Grid, Button } from '@material-ui/core';\nimport {\n getWorkerGroups,\n getWorkers,\n getAllSites,\n getShifts,\n} from '../../API';\nimport {\n setWorkerGroups,\n WorkerActions,\n setSites,\n setShifts,\n} from '../../redux/actions/AllActions';\nimport ScheduleRow from './ScheduleRow';\nimport { cellStyle, cellTextStyle } from './ScheduleCell';\n\n\nexport function ScheduleTable(props) {\n const [ready, setReady] = useState(false);\n useEffect(() => {\n Promise.all([getWorkers(), getWorkerGroups(), getAllSites(), getShifts()]).then(data => {\n const [w, wg, s, sh] = data;\n props._setWorkerGroups(wg);\n props._setWorkers(w);\n props._setSites(s);\n props._setShifts(sh);\n setReady(true);\n });\n }, []);\n if(!ready) {\n return
;\n }\n const { workerGroups, workers, shifts, sites, workerShifts } = props;\n const dayRow = (\n \n \n \n {['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].map(\n (d, i) =>

{d}

\n )}\n
\n );\n const workerRows = workers.map(\n (w, i) => );\n const groupRows = workerGroups.map(\n (g, i) => );\n return (\n \n { [ dayRow, ...workerRows, ...groupRows ] }\n \n );\n\n}\n\nexport const mapStateToProps = (state, ownProps) => {\n const {\n workerShifts,\n shifts,\n workers,\n sites,\n workerGroups,\n } = state;\n const { showGroups } = workerShifts.uiState;\n return {\n shifts: shifts.all,\n workers: !showGroups ? workers.all.filter(w => w.IsWorker) : [],\n workerGroups: showGroups ? workerGroups.all : [],\n sites: sites.all,\n workerShifts: workerShifts.all,\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setWorkerGroups: (x) => dispatch(setWorkerGroups(x)),\n _setWorkers: (x) => dispatch(WorkerActions.setWorkers(x)),\n _setSites: (x) => dispatch(setSites(x)),\n _setShifts: (x) => dispatch(setShifts(x)),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ScheduleTable));\n ","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Grid } from '@material-ui/core';\nimport {\n getShifts,\n} from '../../API';\nimport {\n setShifts,\n} from '../../redux/actions/AllActions';\nimport ScheduleWeekControl from './ScheduleWeekControl';\nimport ScheduleTable from './ScheduleTable';\n\n\nexport function WorkerShiftsPage(props) {\n useEffect(() => {\n getShifts().then(props._setShifts);\n }, []);\n return (\n \n \n \n \n \n \n \n \n \n \n )\n\n}\n\nconst cellStyle = { \n flexDirection: 'row',\n display: 'flex',\n flexGrow: 1,\n minHeight: '50px',\n margin: '1px',\n border: '1px black solid',\n};\n\nexport const mapStateToProps = (state) => {\n const {\n } = state;\n\n return {\n workerGroups: state.workerGroups.all,\n workerShifts: state.workerShifts.all,\n shifts: state.shifts.all,\n sites: state.sites.all,\n workers: state.workers.all.filter(w => w.IsWorker),\n };\n};\n\nexport const mapDispatchToProps = dispatch => ({\n _setShifts: (x) => setShifts(x),\n});\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(WorkerShiftsPage));\n ","import React from 'react';\nimport { getEnvVariables } from '../../Constants/EnvironmentVariables';\nimport Auth from './Auth';\n\n\nexport default function(props) {\n getEnvVariables().then((envVariables) => {\n new Auth().logout().then(() => {\n window.location.replace(envVariables.logoutUri);\n })\n });\n return
;\n}","import React, { useState, useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { \n Paper,\n BottomNavigation,\n BottomNavigationAction,\n ListItem,\n ListItemText,\n List,\n Divider,\n FormControl,\n FormHelperText,\n Select,\n Input,\n MenuItem,\n Typography,\n ListItemIcon,\n Modal,\n Button,\n} from '@material-ui/core';\nimport {\n Battery20,\n Battery30,\n Battery50,\n Battery60,\n Battery80,\n Battery90,\n BatteryFull,\n BatteryAlert,\n Phone,\n} from '@material-ui/icons';\nimport {\n Visibility,\n VisibilityOff,\n} from '@material-ui/icons';\nimport { getAllSites, getWorkerStatus, getWorkers, postManualLocation, postManualOffsiteEvent, getMobileViewPayload, getMobileViewWorkerStatus } from '../../API';\nimport { setSites, setLoading } from '../../redux/actions/AllActions';\nimport moment from 'moment';\nimport { createCenterLocationTimestampFromSite } from '../../GeoFunctions';\n\n\nfunction renderBatteryIcon(batpercentage) {\n\n var icons = [\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n ];\n\n let icon = icons[0];\n [15, 30, 40, 50, 60, 80, 90, 91].forEach((num, i) => {\n if(batpercentage > num) {\n icon = icons[i];\n }\n });\n return icon;\n}\n\n\nconst modalStyle = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\n\nfunction OptionsModal(props) {\n\n const [selectedSiteId, setSelectedSiteId] = useState(0);\n const [location, setLocation] = useState(null);\n\n useEffect(() => {\n if(!props.selectedWorker) {\n setSelectedSiteId(0);\n } else {\n setSelectedSiteId(props.selectedWorker.ScheduledSiteId);\n }\n }, [JSON.stringify(props.selectedWorker)]);\n\n useEffect(() => {\n const site = props.sites.find(s => s.SiteId === selectedSiteId);\n const loc = site && createCenterLocationTimestampFromSite(site, props.selectedWorker.DeviceId);\n setLocation(loc);\n }, [selectedSiteId]);\n\n if(!props.selectedWorker) {\n return null;\n }\n\n const onsite = props.selectedWorker.LatestEvent.EventType === 'ONSITE';\n\n const createOnsiteLocation = () => {\n const { Name, ScheduledSiteId, DeviceLastSeenOnsite, WorkerId } = props.selectedWorker;\n\n if(!ScheduledSiteId) {\n alert('please schedule this worker');\n }\n\n const site = props.sites.find(s => s.SiteId === props.selectedWorker.ScheduledSiteId);\n const msg = `confirm set ${Name}'s location to ${site.Name}`;\n\n if(window.confirm(msg)) {\n if(DeviceLastSeenOnsite) {\n var dt = moment().add(-1, 'minutes').format('YYYY-MM-DD HH:mm');\n postManualOffsiteEvent(WorkerId, dt).then(\n () => postManualLocation(location).then(props.handleModalClose)\n );\n } else {\n postManualLocation(location).then(props.handleModalClose);\n }\n }\n }\n\n const createOffsiteLocation = () => {\n const { Name, WorkerId } = props.selectedWorker;\n const msg = `confirm set ${Name}'s location to OffSite`;\n if(window.confirm(msg)) {\n postManualOffsiteEvent(WorkerId, moment().format('YYYY-MM-DD HH:mm:ss')).then(props.handleModalClose);\n }\n }\n\n const site = props.sites.find(s => s.SiteId === selectedSiteId);\n\n return \n \n \n {props.selectedWorker.Name}\n \n \n { site ? site.Name : 'Not Assigned - please schedule workers before setting them onsite' }\n \n
\n \n
\n
\n \n
\n
\n
\n}\n\n\nfunction renderRow(item, index, onRowClick) {\n const timeDesc = getWorkerTimeDescription(item.LatestEvent);\n var siteDesc = getSiteDescription(item.LatestEvent);\n const icon = renderBatteryIcon(item.BatteryPercentage);\n const scheduledTime = getScheduleTimeDescription(item.ClosestShift);\n return \n onRowClick(item)}>\n \n { icon }\n \n e.stopPropagation()}\n >\n \n \n \n \n { siteDesc }\n \n { ` ${timeDesc}` }\n \n { scheduledTime }\n \n \n }/>\n \n \n ;\n}\n\n\nfunction getScheduleTimeDescription(closestShift) {\n if(!closestShift) {\n return \"unscheduled\";\n }\n\n const startTime = moment(closestShift.StartDateTime).format('DD MMM HH:mm');\n const endTime = moment(closestShift.EndDateTime).format('DD MMM HH:mm');\n return `${startTime} ${endTime}`;\n}\n\nfunction getWorkerTimeDescription(latestEvent) {\n if(!latestEvent) {\n return \"\";\n }\n var timeStr = moment(latestEvent.EventTime).fromNow();\n switch(latestEvent.EventType) {\n case \"ONSITE\":\n return `updated ${timeStr}`;\n case \"OFFSITE\":\n return `updated ${timeStr}`;\n case \"UNKNOWN\":\n return `last seen ${timeStr}`;\n };\n}\n\nfunction getSiteDescription(latestEvent) {\n\n if(!latestEvent || !latestEvent.SiteName) {\n return \"no site\";\n }\n if(latestEvent.SiteName.length > 30) {\n return latestEvent.SiteName.substr(0, 30) + '...';\n } else {\n return latestEvent.SiteName;\n }\n\n}\n\n\nexport function MobileDashboardPage(props) {\n\n const [workerStatuses, setWorkerStatuses] = useState([]);\n const [selectedSiteId, setSelectedSiteId] = useState(0);\n const [navValue, setNavValue] = useState(\"offsite\");\n const [selectedWorker, setSelectedWorker] = useState(null);\n\n const handleRowClick = (workerStatus) => {\n //setSelectedWorker(workerStatus);\n }\n\n const getData = async (refreshData) => {\n\n props._setLoading(true);\n const token = props.auth.token;\n const data = await getMobileViewPayload(token);\n const wss = [];\n const workerStatus = await Promise.all(data.workers.map(w => getMobileViewWorkerStatus(token, w.WorkerId).then(ws => {\n ws && wss.push(ws);\n ws && setWorkerStatuses([...wss]);\n })));\n props._setLoading(false);\n }\n\n const handleModalClose = () => {\n setSelectedWorker(null);\n getData(true);\n }\n\n useEffect(() => {\n try {\n document.getElementById(\"open-nav\").style.display = 'none';\n } catch(e) {\n console.log(e);\n }\n \n getData();\n //setInterval(() => getData(), 180000);\n /*const refresh = () => {\n if (document.visibilityState === 'visible') {\n getData(true);\n }; \n };\n document.addEventListener('visibilitychange', refresh);\n return function cleanup () {\n document.removeEventListener('visibilitychange', refresh);\n }*/\n }, []);\n\n const onNavigationChange = (value) => {\n setNavValue(value);\n }\n\n const height = window.innerHeight - 180;\n\n var visibleWorkers = workerStatuses.filter(w => {\n\n /*if(selectedSiteId && (selectedSiteId !== w.ScheduledSiteId || selectedSiteId !== w.LastVisitedSiteId)) {\n return false;\n } */\n\n switch(navValue) {\n case \"onsite\":\n return w.LatestEvent && w.LatestEvent.EventType == \"ONSITE\";\n case \"offsite\":\n return w.LatestEvent && (w.LatestEvent.EventType == \"OFFSITE\" || w.LatestEvent.EventType == \"UNKNOWN\");\n }\n });\n\n return
\n \n {/*\n \n setSelectedSiteId(e.target.value)}\n >\n {'All Sites'}\n {props.sites.map(\n (w, i) => {w.Name})}\n \n \n */}\n \n \n \n { visibleWorkers.map((t, i) => renderRow(t, i, handleRowClick)) }\n \n \n\n onNavigationChange(v)}\n >\n } />\n } />\n \n
\n\n}\n\n\n\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n _setSites: x => dispatch(setSites(x)),\n _setLoading: x => dispatch(setLoading(x)),\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n sites: state.sites.all.filter(s => s.Active),\n auth: state.me.auth,\n }\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(MobileDashboardPage));\n\n\n\n","export default 'data:image/png;base64,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';","import logoDataUrl from \"./logoDataUrl\";\n\n\nconst stylesStr = `\n\n.logo-img {\n width: 4cm;\n}\n\n#wrapper {\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n background-color: #fff;\n}\n\n.header {\n margin: 0;\n padding: 1cm 1.5cm 0.8cm 1.5cm;\n width: 100%;\n display: table;\n}\n\nhtml, body {\n width:21cm; \n margin:0;\n padding:0;\n top: 0;\n left: 0;\n font-family: Tahoma, sans-serif;\n line-height: 1.3rem;\n}\n\n.title {\n font-size: 2.2rem;\n font-weight: 100;\n letter-spacing: 0.41mm;\n}\n\n.logo-wrap {\n height: 2.5cm;\n}\n\n.center-text {\n marginLeft: auto;\n marginRight: auto;\n paddingTop: 0.5cm;\n text-align: center;\n height: 1.6cm;\n}\n\n.divider-title {\n border-top-style: solid;\n border-bottom-style: solid;\n border-color: #000000;\n border-width: 1px;\n background-color: #F5C800;\n margin: 0;\n padding-left: 1.5cm;\n padding-top: 1.5mm;\n padding-bottom: 1.1mm;\n}\n\n.left-section {\n display: table-cell;\n width: 50%;\n}\n.right-section {\n display: table-cell;\n width: 50%;\n}\n\n.map-img {\n width: 100%;\n height: 12.5cm;\n}\n\n.witness-list {\n padding: 0cm 0cm 0cm 1.5cm;\n}\n\n`;\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeIncidentReportHTML(values, mapImgDataUrl) {\n const {\n incidentDate,\n incidentTime,\n name,\n printDate,\n printTime,\n contacts,\n } = values;\n\n const within50m = contacts.filter(c => c.Distance <= 50).map(c => `
  • ${c.ContactName}
  • `).join('\\n');\n const within200m = contacts.filter(c => c.Distance > 50 && c.Distance < 200).map(c => `
  • ${c.ContactName}
  • `).join('\\n');\n \n const html = `\n \n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n ACCIDENT REPORT\n
    \n
    \n Reported on the ${printDate} at ${printTime}\n
    \n
    \n Worker Injured: ${name}\n
    \n
    \n
    \n ACCIDENT PARTICULARS\n
    \n
    \n
    \n Date: ${incidentDate}\n
    \n
    \n Time: ${incidentTime}\n
    \n
    \n
    \n \n
    \n
    \n
    \n

    Witnesses:

    \n
    \n
    \n Within 50m\n
    \n
      \n ${within50m}\n
    \n
    \n Within 200m\n
    \n
      \n ${within200m}\n
    \n
    \n
    \n \n\n `;\n\nreturn html;\n}\n","import React, { Component } from \"react\";\nimport {\n Grid,\n Typography,\n FormControl,\n TextField,\n Select,\n MenuItem,\n InputLabel,\n FormHelperText,\n Button,\n List,\n ListItemText,\n ListItem,\n ListItemIcon,\n} from '@material-ui/core';\nimport PersonIcon from '@material-ui/icons/AccountCircle';\nimport {\n getWorkers,\n getCloseContacts,\n getAllSites,\n getAllZones,\n getWorkerLocationsByDateRange,\n} from '../../API';\nimport moment from 'moment-timezone';\nimport { ContactTracingMap, mapStateToProps } from \"../ContactTracing/ContactTracingMap\";\nimport { \n clusteriseContactTracingResults,\n locationTimestampsToPoints,\n} from '../../GeoFunctions';\nimport { uniqInArray, randomColor } from \"../../Utils\";\nimport * as turf from '@turf/turf';\nimport wkt from 'terraformer-wkt-parser';\nimport { printToPDF } from '../Utils/PrintPdf';\nimport { makeIncidentReportHTML } from './HTMLIncidentReport';\n\n\nexport function WitnessListItem(props) {\n const { WorkerId, Distance, ContactName, Color } = props.feature.properties;\n return (\n \n \n \n \n \n \n );\n}\n\n\nexport default class IncidentReportPage extends Component {\n\n state = {\n selectedWorker: undefined,\n workers: [],\n sites: [],\n zones: [],\n incidentDate: moment(),\n incidentTime: '09:00',\n contactGeojson: { type: 'FeatureCollection', features: [] },\n workerTrack: { type: 'FeatureCollection', features: [] },\n mapRef: undefined,\n }\n\n componentDidMount() {\n Promise.all([\n getWorkers(),\n getAllSites(),\n getAllZones(),\n ]).then(data => {\n const colorMap = {};\n const mapColorStops = [];\n data[0].forEach((w) => {\n colorMap[`${w.WorkerId}`] = randomColor();\n mapColorStops.push([w.WorkerId, colorMap[`${w.WorkerId}`]]);\n });\n this.setState({\n workers: data[0].filter(x => x.IsEnabled && x.IsWorker),\n sites: data[1],\n zones: data[2],\n colorMap, mapColorStops,\n });\n });\n }\n\n setMapRef = (mapRef) => {\n console.log(mapRef);\n this.setState({ mapRef });\n }\n\n handleDateChange = ({ target }) => {\n this.setState({ incidentDate: moment(target.value, 'YYYY-MM-DD') });\n }\n\n handleTimeChange = ({ target }) => {\n this.setState({ incidentTime: target.value });\n }\n\n handleWorkerSelectChange = ({ target }) => {\n const selectedWorker = this.state.workers.find(x => x.WorkerId == target.value);\n this.setState({ selectedWorker });\n }\n\n handleSubmit = async () => {\n const { incidentDate, incidentTime, selectedWorker } = this.state;\n const dt = moment.tz(`${incidentDate.format('YYYY-MM-DD')} ${incidentTime}`, \"Pacific/Auckland\");\n const start = moment(dt).add(-30, 'minutes');\n const end = moment(dt).add(30, 'minutes');\n const workerLocations = await getWorkerLocationsByDateRange({ \n WorkerId: selectedWorker.WorkerId,\n StartDateTimeUTC: start.utc().format('YYYY-MM-DD HH:mm'),\n EndDateTimeUTC: end.utc().format('YYYY-MM-DD HH:mm'),\n });\n if(!workerLocations.length) {\n return;\n }\n const sortBySmallestDiff = (a, b) => {\n const aa = moment.tz(a.LocationDateTime, 'YYYY-MM-DD HH:mm', \"Pacific/Auckland\");\n const bb = moment.tz(b.LocationDateTime, 'YYYY-MM-DD HH:mm', \"Pacific/Auckland\");\n const aDiff = Math.abs(dt.diff(aa));\n const bDiff = Math.abs(dt.diff(bb));\n if(aDiff < bDiff) {\n return -1;\n }\n if(aDiff < bDiff) {\n return 1;\n }\n return 0;\n }\n\n workerLocations.sort(sortBySmallestDiff);\n const workerTrack = locationTimestampsToPoints([workerLocations[0]]);\n let contactData = await getCloseContacts(selectedWorker.WorkerId,\n start.utc().format('YYYY-MM-DD'),\n end.utc().format('YYYY-MM-DD'),\n 30,\n 200,\n start.utc().format('HH:mm'),\n end.utc().format('HH:mm')\n );\n if(!contactData) {\n contactData = [];\n }\n contactData = contactData.map(c => {\n const utcdt = moment.utc(c.LocationDateTime, 'YYYY-MM-DD HH:mm');\n return { ...c,\n LocationDateTime: utcdt.clone().tz(\"Pacific/Auckland\").format('YYYY-MM-DD HH:mm'),\n }\n })\n \n const workerIds = uniqInArray(contactData.map(x => x.WorkerId));\n \n const closestContactFeatures = workerIds.map(id => {\n const contats = contactData.filter(c => c.WorkerId === id);\n contats.sort(sortBySmallestDiff);\n const { wkt_point, WorkerId, LocationTimestampId,\n LocationDateTime, ClosestSiteId, Name, ContactName, ZoneId,\n NumberOfSatellites, ClosestSiteDistance \n } = contats[0];\n console.log(contats[0])\n const point = turf.point(wkt.parse(wkt_point).coordinates, \n { WorkerId, LocationTimestampId, LocationDateTime,\n ClosestSiteId, Name, ContactName, NumberOfSatellites, ClosestSiteDistance, ZoneId, \n compositeId: `${WorkerId}-${ClosestSiteId}-${ZoneId}` });\n const distance = turf.distance(point.geometry.coordinates, workerTrack.features[0].geometry.coordinates);\n point.properties.Distance = Math.floor(distance * 1000);\n point.properties.Color = this.state.colorMap[WorkerId];\n return point;\n });\n const contactGeojson = turf.featureCollection(closestContactFeatures);\n contactGeojson.features.sort((a, b) => {\n if(a.properties.Distance < b.properties.Distance){\n return -1;\n }\n if(a.properties.Distance < b.properties.Distance){\n return 1;\n }\n return 0;\n });\n this.setState({\n contactGeojson,\n workerTrack,\n });\n }\n\n printReport = () => {\n if(!this.state.selectedWorker) {\n return;\n }\n const options = {\n //filename: `contact-report-${this.state.selectedWorker.Name.replace(' ', '')}`,\n filename: Math.floor(Math.random() * 1000000),\n jsPDF: { orientation: 'portrait' },\n pagebreak: {avoid: 'li'},\n margin: 5,\n };\n const { selectedWorker, contactGeojson, incidentDate, incidentTime } = this.state;\n const contactProperties = contactGeojson.features.map(f => f.properties);\n const dataUrl = this.state.mapRef.getCanvas().toDataURL('image/png');\n const dt = moment();\n const html = makeIncidentReportHTML({\n name: selectedWorker.Name,\n incidentDate: incidentDate.format('DD/MM/YYYY'),\n incidentTime: moment(incidentTime, 'HH:mm').format('hh:mm a'),\n printDate: dt.format('DD/MM/YYYY'),\n printTime: dt.format('hh:mm a'),\n contacts: contactProperties,\n }, dataUrl);\n printToPDF(html, options);\n }\n\n render() {\n const { incidentDate, incidentTime, selectedWorker, workers,\n contactGeojson, workerTrack, sites, zones, mapColorStops } = this.state;\n\n return (\n \n \n \n \n \n \n \n \n \n Incident Report\n \n \n \n
    \n \n Worker\n \n {workers.map(\n x => \n {x.Name}\n )}\n \n Select the injured worker\n \n \n \n \n Select date and time of the injury\n \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n \n \n { contactGeojson.features.map((f) => ()) }\n \n \n
    \n
    \n )\n }\n\n}","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport MapGL, {\n GeoJSONLayer,\n Popup,\n Feature,\n Marker,\n} from 'react-mapbox-gl';\nimport {\n MAPBOX_TOKEN,\n SAT_MAP_URI,\n} from '../../Constants/Constants';\nimport * as turf from '@turf/turf';\n\n\nconst Map = MapGL({\n accessToken: MAPBOX_TOKEN,\n preserveDrawingBuffer: true,\n});\n\n\nexport default class ZoneReportMap extends Component {\n state = {\n zoom: 7,\n pitch: 45,\n center: [174.822493, -36.855736],\n }\n\n componentDidMount() {\n }\n\n handleStyleLoad = map => {\n if(map) {\n map.resize();\n }\n }\n\n getMapProps = () => {\n const center = this.props.center || this.state.center;\n return {\n center,\n style: SAT_MAP_URI,\n onMove: this.handleMove,\n className: 'dashboard-map dashboard-responsive',\n onStyleLoad: this.handleStyleLoad,\n onClick: this.handleMapClick,\n };\n }\n\n render() {\n const {\n colorMap,\n sites,\n zones,\n } = this.props;\n const mapProps = this.getMapProps();\n const zoneLayers = zones.map(z => {\n return (\n \n )\n });\n return (\n this.props.setMapRef(map)}\n preserveDrawingBuffer={true}\n >\n {\n [(\n s.GeoJSON))}\n linePaint={{\n 'line-color': '#a69924',\n 'line-width': 4,\n }}\n fillExtrusionPaint={{\n 'fill-extrusion-color': '#f5e342',\n 'fill-extrusion-height': 0.2,\n 'fill-extrusion-opacity': 0.2,\n }}\n type=\"fill-extrusion\"\n extruded\n />\n ),\n ...zoneLayers,\n ]\n }\n \n );\n }\n}\n\n","import logoDataUrl from \"../IncidentReport/logoDataUrl\";\nimport { uniqInArray } from '../../Utils';\n\n\nconst stylesStr = `\n\n.logo-img {\n width: 4cm;\n}\n\n#wrapper {\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n background-color: #fff;\n}\n\n.header {\n margin: 0;\n padding: 1cm 1.5cm 0.8cm 1.5cm;\n width: 100%;\n display: table;\n}\n\nhtml, body {\n width:21cm; \n margin:0;\n padding:0;\n top: 0;\n left: 0;\n font-family: Tahoma, sans-serif;\n line-height: 1.3rem;\n}\n\n.title {\n font-size: 2.2rem;\n font-weight: 100;\n letter-spacing: 0.41mm;\n}\n\n.logo-wrap {\n height: 2.5cm;\n}\n\n.center-text {\n marginLeft: auto;\n marginRight: auto;\n paddingTop: 0.5cm;\n text-align: center;\n height: 1.6cm;\n}\n\n.divider-title {\n border-top-style: solid;\n border-bottom-style: solid;\n border-color: #000000;\n border-width: 1px;\n background-color: #F5C800;\n margin: 0;\n padding-left: 1.5cm;\n padding-top: 1.5mm;\n padding-bottom: 1.1mm;\n}\n\n.left-section {\n display: table-cell;\n width: 50%;\n}\n.right-section {\n display: table-cell;\n width: 50%;\n}\n\n.map-img {\n height: 6.5cm;\n width: 6.5cm;\n margin-left: auto;\n margin-right: auto;\n}\n\n.witness-list {\n padding: 0cm 0cm 0cm 1.5cm;\n}\n\n`;\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeZoneReportHTML(values, mapImgDataUrl) {\n const {\n zoneReports,\n startDate,\n endDate,\n printDate,\n printTime,\n } = values;\n\n const workerListItem = (w) => `\n
  • ${w.workerName}: ${w.timeText}
  • \n `;\n\n const zoneReportsHtml = zoneReports.map(z => `\n
    \n

    ${z.name} \n
    \n

    \n
    Total: ${z.total}
    \n
      \n ${z.workerReports.map(workerListItem).join('\\n')}\n
    \n
    \n `).join('\\n');\n\n const html = `\n \n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n PRODUCTIVITY REPORT\n
    \n
    \n Reported on the ${printDate} at ${printTime}\n
    \n
    \n Start Date: ${startDate}\n
    \n
    \n End Date: ${endDate}\n
    \n
    \n
    \n \n
    \n
    \n
    \n TIME SPENT IN ZONES\n
    \n
    \n
    \n
    \n ${zoneReportsHtml}\n
    \n
    \n
    \n \n \n`;\n\nreturn html;\n}\n","import React, { Component } from \"react\";\nimport {\n Grid,\n FormControl,\n TextField,\n FormHelperText,\n Button,\n} from '@material-ui/core';\nimport {\n getAllSites,\n getAllZones,\n} from '../../API';\nimport moment from 'moment-timezone';\nimport { selectColor, hslToHex, randomColor } from \"../../Utils\";\nimport { printToPDF } from '../Utils/PrintPdf';\nimport { getZoneReport } from \"../../API\";\nimport MUIDataTable from 'mui-datatables';\nimport ZoneReportMap from \"./ZoneReportMap\";\nimport { makeZoneReportHTML } from \"./HTMLZoneReport\";\nimport * as turf from '@turf/turf';\n\n\nconst columns = [\n { name: 'Worker' },\n { name: 'Zone',\n options: {\n customBodyRender: (val) => {\n const colorlabelStyle = { backgroundColor: val.zone.color, height: '15px',\n width: '15px', display: 'inline-block' };\n return
    {val.zoneName}
    \n }\n },\n },\n { name: 'Time Spent' },\n { name: 'Number of locations' },\n]\n\nfunction zoneReportRow(item) {\n const { workerName, zoneName, totalMin, timeText, numLocs } = item;\n\n return [workerName, item, timeText, numLocs ];\n}\n\nconst minsToStr = (r) => {\n const hours = Math.floor(r / 60);\n const mins = r % 60;\n const timeText = `${hours}h ${mins}m`;\n return timeText;\n}\n\nconst options = {\n filterType: 'multiselect',\n selectableRows: false,\n responsive: 'scroll',\n rowsPerPage: 50,\n rowsPerPageOptions: [10, 20, 30, 40, 50],\n};\n\nexport default class ZoneReportPage extends Component {\n\n state = {\n startDate: moment().add(-7, 'days'),\n endDate: moment(),\n results: [],\n sites: [],\n zones: [],\n selectedSite: null,\n colorMap: {},\n }\n\n componentDidMount() {\n Promise.all([\n getAllSites(),\n getAllZones(),\n ]).then(data => {\n const colorMap = {};\n data[1].forEach((d, i) => {\n colorMap[d.ZoneId] = randomColor();\n const centroid = turf.centroid(d.GeoJSON);\n d.color = colorMap[d.ZoneId];\n d.centroid = centroid;\n });\n this.setState({ sites: data[0], zones: data[1], selectedSite: data[0][0], colorMap });\n });\n }\n\n setMapRef = (mapRef) => {\n this.setState({ mapRef });\n }\n\n handleStartDateChange = ({ target }) => {\n this.setState({ startDate: moment(target.value, 'YYYY-MM-DD') });\n }\n\n handleEndDateChange = ({ target }) => {\n this.setState({ endDate: moment(target.value, 'YYYY-MM-DD') });\n }\n\n handleSubmit = async () => {\n const results = await getZoneReport(\n moment(this.state.startDate).utc().format('YYYY-MM-DD HH:mm:ss'),\n moment(this.state.endDate).utc().add(1, 'days').format('YYYY-MM-DD HH:mm:ss')\n ); \n\n const usefulResults = results ? results.filter(r => !!r.totalMin) : [];\n usefulResults.forEach(r => {\n r.timeText = minsToStr(r.totalMin);\n });\n this.setState({ results: usefulResults });\n }\n\n printReport = () => {\n const { zones, results, startDate, endDate, mapRef, colorMap } = this.state;\n const sortByTotalMins = (a, b) => {\n if(a.totalMin > b.totalMin) {\n return -1;\n } else if(a.totalMin < b.totalMin)\n {\n return 1;\n }\n return 0;\n };\n const zoneReports = this.state.zones.map(z => {\n const workerReports = results.filter(r => r.zoneId == z.ZoneId);\n workerReports.sort(sortByTotalMins);\n const totalMins = workerReports.length ? workerReports.map(w => w.totalMin).reduce((a, b) => a + b) : 0;\n return { name: z.Name, workerReports, total: minsToStr(totalMins), totalMin: totalMins, color: colorMap[z.ZoneId] };\n });\n const options = {\n //filename: `contact-report-${this.state.selectedWorker.Name.replace(' ', '')}`,\n filename: Math.floor(Math.random() * 1000000),\n jsPDF: { orientation: 'portrait' },\n pagebreak: {avoid: ['li', 'h3']},\n margin: 5,\n };\n const dt = moment();\n const dataUrl = mapRef.getCanvas().toDataURL('image/png');\n zoneReports.sort(sortByTotalMins);\n\n const printVals = {\n printDate: dt.format('DD/MM/YYYY'),\n printTime: dt.format('hh:mm a'),\n startDate: startDate.format('DD/MM/YYYY'),\n endDate: endDate.format('DD/MM/YYYY'),\n zoneReports: zoneReports.filter(zr => !!zr.workerReports.length),\n };\n const html = makeZoneReportHTML(printVals, dataUrl);\n printToPDF(html, options);\n }\n\n render() {\n const { startDate, endDate, results, zones, sites, colorMap } = this.state;\n const rows = results.map(r => {\n const rZone = {...r, zone: zones.find(z => r.zoneId == z.ZoneId)}\n return zoneReportRow(rZone);\n });;\n return (\n \n \n \n
    \n \n \n Select start date and end date\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}","import logoDataUrl from \"../IncidentReport/logoDataUrl\";\nimport { uniqInArray } from '../../Utils';\n\n\nconst stylesStr = `\n\n.logo-img {\n width: 4cm;\n}\n\n#wrapper {\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n background-color: #fff;\n}\n\n.header {\n margin: 0;\n padding: 1cm 1.5cm 0.8cm 1.5cm;\n width: 100%;\n display: table;\n}\n\nhtml, body {\n width:21cm; \n margin:0;\n padding:0;\n top: 0;\n left: 0;\n font-family: Tahoma, sans-serif;\n line-height: 1.3rem;\n}\n\n.title {\n font-size: 2.2rem;\n font-weight: 100;\n letter-spacing: 0.41mm;\n}\n\n.logo-wrap {\n height: 2.5cm;\n}\n\n.center-text {\n marginLeft: auto;\n marginRight: auto;\n paddingTop: 0.5cm;\n text-align: center;\n height: 1.6cm;\n}\n\n.divider-title {\n border-top-style: solid;\n border-bottom-style: solid;\n border-color: #000000;\n border-width: 1px;\n background-color: #F5C800;\n margin: 0;\n padding-left: 1.5cm;\n padding-top: 1.5mm;\n padding-bottom: 1.1mm;\n}\n\n.left-section {\n display: table-cell;\n width: 50%;\n}\n.right-section {\n display: table-cell;\n width: 50%;\n}\n\n.map-img {\n height: 6.5cm;\n width: 6.5cm;\n margin-left: auto;\n margin-right: auto;\n}\n\n.witness-list {\n padding: 0cm 0cm 0cm 1.5cm;\n}\n\n`;\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeSupervisorTotalsReportHTML(values) {\n const {\n workerReports,\n startDate,\n endDate,\n printDate,\n printTime,\n } = values;\n\n const workerReportsHtml = workerReports.map(z => `\n
    \n

    \n ${z[0]} \n

    \n
      \n
    • Total Breaks: ${z[1]}
    • \n
    • Total Hours: ${z[2]}
    • \n
    \n
    \n `).join('\\n');\n\n const html = `\n \n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n WORK TOTALS REPORT\n
    \n
    \n Reported on the ${printDate} at ${printTime}\n
    \n
    \n Start Date: ${startDate}\n
    \n
    \n End Date: ${endDate}\n
    \n
    \n
    \n
    \n WORKERS TOTALS\n
    \n
    \n
    \n
    \n ${workerReportsHtml}\n
    \n
    \n
    \n \n \n`;\n\nreturn html;\n}\n","import React, { Component } from \"react\";\nimport {\n Grid,\n FormControl,\n TextField,\n FormHelperText,\n Button,\n MenuItem,\n Select,\n} from '@material-ui/core';\nimport {\n getWorkers,\n \n} from '../../API';\nimport moment from 'moment-timezone';\nimport { printToPDF } from '../Utils/PrintPdf';\nimport { getWorkerTotals, getLabourAgencies, getAllSites } from \"../../API\";\nimport MUIDataTable from 'mui-datatables';\nimport { makeSupervisorTotalsReportHTML } from \"./HTMLWorkerTotalsReport\";\n\n\nconst columns = [\n { name: 'Worker' },\n { name: 'Total Breaks' },\n { name: 'Total Hours' },\n]\n\nfunction reportRow(item) {\n const { workerName, paidHours, paidMinutes, unpaidHours, unpaidMinutes } = item;\n\n return [workerName, `${unpaidHours}:${unpaidMinutes}h`, `${paidHours}:${paidMinutes}h` ];\n}\n\nconst options = {\n filterType: 'multiselect',\n selectableRows: false,\n responsive: 'scroll',\n rowsPerPage: 50,\n rowsPerPageOptions: [10, 20, 30, 40, 50],\n};\n\nexport default class WorkerTotalsReportPage extends Component {\n\n state = {\n startDate: moment().add(-9, 'days'),\n endDate: moment().add(-2, 'days'),\n results: [],\n workers: [],\n labourAgencys: [],\n supervisors: [],\n selectedSupervisorId: 0,\n selectedAgencyId: 0,\n }\n\n componentDidMount() {\n Promise.all([\n getAllSites(),\n getWorkers(),\n getLabourAgencies(),\n ]).then(data => {\n const [sites, workers, labourAgencys] = data;\n const enabledWorkers = workers.filter(w => w.IsWorker && w.IsEnabled);\n const supervisors = workers.filter(w => w.IsSupervisor);\n this.setState({ supervisors, workers: enabledWorkers, selectedSupervisorId: supervisors[0].WorkerId, sites, labourAgencys });\n });\n }\n\n handleSupervisorChange = ({ target }) => {\n this.setState({ \n selectedSupervisorId: target.value,\n selectedAgencyId: 0,\n });\n }\n\n handleLabourAgencyChange = ({ target }) => {\n this.setState({ \n selectedAgencyId: target.value,\n selectedSupervisorId: 0,\n });\n }\n\n handleStartDateChange = ({ target }) => {\n this.setState({ startDate: moment(target.value, 'YYYY-MM-DD') });\n }\n\n handleEndDateChange = ({ target }) => {\n this.setState({ endDate: moment(target.value, 'YYYY-MM-DD') });\n }\n\n handleSubmit = async () => {\n const { selectedSupervisorId, selectedAgencyId, startDate, endDate } = this.state;\n const results = await getWorkerTotals(\n selectedSupervisorId ? selectedSupervisorId : null,\n selectedAgencyId ? selectedAgencyId : null,\n moment(startDate).utc().format('YYYY-MM-DD HH:mm:ss'),\n moment(endDate).utc().add(1, 'days').format('YYYY-MM-DD HH:mm:ss'),\n ); \n this.setState({ results });\n }\n\n printReport = () => {\n const { results, startDate, endDate } = this.state;\n const options = {\n //filename: `contact-report-${this.state.selectedWorker.Name.replace(' ', '')}`,\n filename: Math.floor(Math.random() * 1000000),\n jsPDF: { orientation: 'portrait' },\n pagebreak: {avoid: ['li', 'h3']},\n margin: 5,\n };\n const dt = moment();\n const printVals = {\n printDate: dt.format('DD/MM/YYYY'),\n printTime: dt.format('hh:mm a'),\n startDate: startDate.format('DD/MM/YYYY'),\n endDate: endDate.format('DD/MM/YYYY'),\n workerReports: results.map(reportRow),\n };\n const html = makeSupervisorTotalsReportHTML(printVals);\n printToPDF(html, options);\n }\n\n render() {\n const { supervisors, results, startDate, endDate, labourAgencys } = this.state;\n const supervisorOptions = supervisors.map((s) => {s.Name});\n const agencyOptions = labourAgencys.map((s) => {s.Name})\n const rows = results.map(reportRow);\n return (\n \n \n \n

    Total hours by supervisor or agency

    \n

    Only showing APPROVED hours. Make sure to approve timesheets before reporting

    \n
    \n \n
    \n \n Select supervisor\n
    \n
    \n \n
    \n \n Select agency\n
    \n
    \n \n
    \n \n \n Select start date and end date\n
    \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n \n
    \n )\n }\n\n}","import React from 'react';\n\nexport default function Login() {\n return (
    );\n}\n","/* eslint-disable */\nimport React, { Component } from 'react';\nimport { BrowserRouter as Router, Route } from 'react-router-dom';\nimport Container from './Container';\nimport Approvals from './Components/Approvals/Approvals';\nimport DevicesReport from './Components/ReportingDevices/DevicesReport';\nimport ReportingTimesheets from './Components/ReportingTimesheet/ReportingTimesheets';\nimport Dashboard from './Components/Dashboard/Dashboard';\nimport MyTimesheet from './Components/MyTimesheet/MyTimesheet';\nimport ManageUsers from './Components/SetUpManageUsers/ManageUsers';\nimport SettingsForm from './Components/Settings/SettingsForm';\nimport SetupSite from './Components/Sites/SetupSite';\nimport SetupZone from './Components/Zones/SetupZone';\nimport SuperAdminPage from './Components/SuperAdmin/SuperAdminPage';\nimport DashboardContact from './Components/ContactTracing/ContactTracingPage';\nimport {CovidCaseForm} from './Components/CovidCase/CovidCaseForm';\nimport CovidCasesPage from './Components/CovidCase/CovidCasesPage';\nimport WorkerGroupsPage from './Components/WorkerGroups/WorkerGroupsPage';\nimport ShiftsPage from './Components/Shifts/ShiftsPage';\nimport WorkerShiftsPage from './Components/WorkerShifts/WorkerShiftsPage';\nimport { getEnvVariables } from './Constants/EnvironmentVariables';\nimport Logout from './Components/Auth/Logout';\nimport MobileDashboardPage from './Components/MobileDashboard/MobileDashboardPage';\nimport IncidentReportPage from './Components/IncidentReport/IncidentReportPage';\nimport ZoneReportPage from './Components/ZoneReport/ZoneReportPage';\nimport WorkerTotalsReportPage from './Components/TotalsReport/WorkerTotalsReportPage';\n\nimport Login from './Components/Auth/Login';\nimport { isIOS } from 'react-device-detect';\n\n\nclass RouterProvider extends Component {\n state = {\n new: 9,\n apiRoot: null,\n }\n\n componentDidMount() {\n if(window.location.pathname === 'logout') {\n return;\n }\n getEnvVariables();\n /* evil monkey patch to fix the render blocking\n caused by router + redux */\n const forcerender = () => this.setState(\n { new: new Date().getTime() });\n const pushState = history.pushState;\n history.pushState = function () {\n pushState.apply(history, arguments);\n forcerender();\n };\n const replaceState = history.replaceState;\n history.replaceState = function () {\n replaceState.apply(history, arguments);\n forcerender();\n };\n \n }\n\n shouldComponentUpdate() {\n return true;\n }\n\n render() {\n // eslint-disable-next-line no-undef\n const locationpathname = window.location.pathname + this.state.new;\n\n return (\n \n } />\n \n } />\n } />\n } />\n } locationpathname={locationpathname} />\n } locationpathname={locationpathname} /> \n } locationpathname={locationpathname} />\n } locationpathname={locationpathname} />\n } />\n } locationpathname={locationpathname} />\n } />\n } />\n } />\n } />\n } />\n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n { /*isIOS && } /> */}\n \n \n );\n }\n}\n\nexport default RouterProvider;\n","import React, { Component } from 'react';\nimport { Provider } from 'react-redux';\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';\nimport { RestClientActions } from './redux/actions/ConfigurationActions';\nimport store from './redux/store/rootStore';\nimport { getEnvVariables } from './Constants/EnvironmentVariables';\nimport RouterProvider from './RouterProvider';\nimport { IS_DEV_ENV } from './Constants/Constants';\nimport './App.css';\n\n\nconst muiTheme = createMuiTheme({\n palette: {\n primary: {\n main: '#2196f3', // light blue\n type: 'light',\n },\n secondary: {\n main: '#ffa733', // orange\n type: 'light',\n },\n tertiary: {\n main: '#ffea00', // yellow\n type: 'light',\n },\n warning: {\n main: '#ffae42',\n },\n },\n overrides: {\n MUIDataTable: {\n responsiveScroll: {\n maxHeight: 'none!important',\n height: 'calc(100vh - 191px)'\n },\n },\n },\n});\n\n\n\n\nclass App extends Component {\n state = {\n ready: false,\n }\n componentDidMount() {\n // Initialise\n getEnvVariables().then(() => {\n store.dispatch( RestClientActions.getEnvironment() );\n store.dispatch( RestClientActions.getRestClient() );\n this.setState({ ready: true });\n })\n \n }\n\n render() {\n return (\n \n \n
    \n { this.state.ready && }\n
    \n
    \n
    \n );\n }\n}\n\nexport default App;\n","\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n// import * as serviceWorker from './serviceWorker';\nReactDOM.render(, document.getElementById('root'));// eslint-disable-line\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\n// serviceWorker.unregister();\n"],"sourceRoot":""}