{"version":3,"sources":["images/header-logo-white.png","images/header-logo.png","components/text-input.tsx","api/api-shared.ts","api/api-account.ts","api/api-user.ts","components/NavButton.tsx","classes/promiseHelper.ts","pages/page-login.tsx","components/private-route.tsx","api/dataTypes.ts","components/header.tsx","components/UserAccountComponent.tsx","modals/modal-EditPassword.tsx","components/UserAccountInfo.tsx","pages/page-account.tsx","api/api-alarms.ts","styles/TableFormats.tsx","components/table-alarms.tsx","components/selectSystem.tsx","api/api-winder.ts","pages/page-alarms.tsx","components/table-cutRecords.tsx","api/api-cutRecords.ts","components/dropdownSelect.tsx","api/api-organizations.ts","components/dataSelectionHeader.tsx","pages/page-cutRecords.tsx","modals/modal-AddOrg.tsx","modals/modal-EditOrg.tsx","pages/page-organizations.tsx","components/table-oeeRecords.tsx","components/oeeDataGraph.tsx","components/oeeSummaryComponent.tsx","pages/page-oee.tsx","modals/modal-EditWinder.tsx","modals/modal-AddWinder.tsx","modals/modal-EditPresets.tsx","pages/page-spoolWinders.tsx","modals/modal-AddUser.tsx","modals/modal-ConfirmDelete.tsx","modals/modal-EditUser.tsx","pages/page-users.tsx","pages/page-accountConfirm.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","__webpack_require__","p","TextInput","props","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","setFocus","reference","current","focus","state","value","_this2","react","className","concat","class","title","type","inputType","placeholder","String","name","propName","onChange","e","handleChange","parentProp","ref","readOnly","readonly","disabled","React","console","log","process","httpRequest","requestUrl","method","arguments","length","undefined","body","request","headers","Headers","append","token","getToken","bodyStringified","JSON","stringify","Request","buildRequest","fetch","then","response","status","json","data","success","error","apiError","detail","message","catch","USER_ROLE","addUserApi","userInfo","r","email","editUserApi","res","deleteUserApi","getUsersApi","result","STORAGE","USER_NAME","USER_ROLES","JWT_TOKEN","SHIFT_START","SHIFT_END","SETUP_TIME","NavButtonSize","getUserRolesEnum","rolesString","localStorage","getItem","split","map","role","toUpperCase","logOut","clear","getUserName","getCurrentUser","currentUser","findIndex","toLowerCase","id","hasAdminRole","indexOf","hasDistributorRole","saveLoginData","username","apiResult","setItem","roles","jwt_decode","join","login","password","changePassword","forgottenPasswordApi","confirmAccount","password2","dto","PromiseHelper","createClass","key","promise","t","c","x","alert","LoginPage","uNameRef","loginPromise","componentDidMount","focusUserName","handleKeyPress","handleLogin","handleInputChange","parent","targetName","target","val","setState","prevState","objectSpread","defineProperty","disableInputs","user","newPromise","isLoggedIn","handleForgotPassword","renderButton","onClick","options","clearPromise","react_router","to","pathname","onKeyPress","src","headerLogo","alt","width","text_input","PrivateRoutes","children","push","NavButton","alarmSeverity","alarmSeverityColors","orgTypes","_ref","text","icon","iconSelected","path","_ref$size","size","small","alternatePaths","_ref$showSelected","showSelected","sizeClassName","large","pill","react_router_dom","activeClassName","exact","isActive","pathMatch","location","some","require","Header","_React$Component","handleLogout","logout","inherits","isCustomer","components_NavButton","DATA_REFRESH_TIME","cutStatus","GetOrgTypeDropdownList","Customer","Distributor","orgInfo","orgType","distId","o","get","getDefaultUserInfo","firstName","lastName","phone","distributorId","distributorName","customerId","customerName","GetDefaultWinder","ownerName","mode","currentCutRequest","heartBeat","Date","serialNumber","mqttPassword","macAddress","UserAccountComponent","onFocus","blockUpdates","onBlur","APIName","currentTarget","nextProps","fieldName","EditPasswordModal","onInputChange","confirmButtonPressed","currentPassword","newPassword","confirmNewPassword","confirmPassword","cancelButtonPressed","closeModal","react_modal_lib_default","a","ariaHideApp","isOpen","isModalOpen","shouldCloseOnEsc","shouldCloseOnOverlayClick","onRequestClose","base","afterOpen","beforeClose","overlayClassName","tabIndex","UserAccountInfo","openModal","editPasswordModalOpen","accountInfo","UserAccountComponent_UserAccountComponent","handleSave","modal_EditPassword_EditPasswordModal","passwordChangeMessage","AccountPage","currentUserPromise","handleFieldChange","newState","newData","userApi","getUserInfo","accountApi","header_Header","UserAccountInfo_UserAccountInfo","getAlarmsApi","formatReportURL","rootUrl","start","startDate","toISOString","end","endDate","moment","add","startOf","toDate","system","systemId","org","columnHeaderStyle","textAlign","fontWeight","font","borderRadius","dataStyle","padding","AlarmsTable","offset","utcOffset","getTrProps","rowInfo","instance","style","background","original","severity","react_table_es","alarms","filterable","defaultFilterMethod","filter","row","matchSorter","columns","accessor","raisedTime","format","Cell","headerStyle","TableStyles","ackTime","showPagination","defaultSorted","desc","minRows","loading","SystemSelectList","alarmState","systems","updateSystemSelection","getAllWindersApi","addWinderApi","Winder","editWinderApi","winder","getAllPresetsApi","editPresetApi","preset","AlarmsPage","alarmPromise","winderPromise","dataTimerId","getSystems","updateStartDate","nextRequest","alarmRequest","getAlarms","updateEndDate","alarmData","now","subtract","includeInactive","window","setInterval","clearInterval","cursor","component_default","icons","checked","es","required","selected","d","selectSystem_SystemSelectList","table_alarms_AlarmsTable","CutRecordsTable","cuts","systemName","show","showWinderColumn","startTime","endTime","Math","round","reqCutLength","actualCutLength","presetNumber","getRecordsApi","exportCSV","reqData","anchor","document","createElement","url","blob","downloadFile","blobFile","objectUrl","URL","createObjectURL","href","download","formatDate","click","revokeObjectURL","getOEEApi","setupTime","shiftStartTime","formatTime","shiftEndTime","date","DropdownSelect","bind","assertThisInitialized","hidden","parsedNumber","parseInt","isNaN","editValue","getAllOrgsApi","Init","addOrgApi","editOrgApi","getCustomersListApi","DataSelectionHeader","recordsPromise","winderPromiseH","custPromiseH","getRecords","reportRequest","getDropDownOptions","winders","sOptions","v","unshift","systemOptions","customers","cOptions","customerOptions","showShifts","req","sendRequest","editOrg","editSystem","updateShiftStart","hour","minute","toString","updateShiftEnd","enableOwnerSelection","dropdownSelect_DropdownSelect","rc_time_picker_es","onClose","use12Hours","showSecond","minuteStep","CutRecordsPage","cutRecordsData","index_es","faDownload","dataSelectionHeader_DataSelectionHeader","DISTRIBUTOR","table_cutRecords_CutRecordsTable","AddOrgModal","newOrg","addOrg","distIndex","onTypeChange","onDistChange","typeOptions","autoFocus","distributorOptions","EditOrgModal","parse","disableDropdowns","OrganizationsPage","editData","distOptions","getPromise","editPromise","addPromise","getOrgs","orgs","distDropdownOptions","handleEdit","editCustModalOpen","distributors","AddOrg","addCustModalOpen","EditOrg","modal_AddOrg_AddOrgModal","modal_EditOrg_EditOrgModal","sortable","faPencilAlt","OEERecordsTable","marginRight","records","runTime","idleTime","toFixed","cutLengthTotal","tickValuesArray","tickScaleFactor","days","OEEDataGraph","getTickDateString","ticks","tickDifference","hours","getHours","minutes","getMinutes","day","getDate","getMonth","getFullYear","getDay","computeMaxima","maxima","runTimeMax","max","apply","toConsumableArray","abs","cycleCount","runTimeUnits","maxValues","cycleCountUnits","cutLengthUnits","victory_chart","top","bottom","left","AXIS_OFFSET_BASELINE","right","domainPadding","y","scale","height","victory_group","victory_line","stroke","strokeWidth","interpolation","victory_scatter","drawLabel","units","fill","victory_axis","label","axisLabel","fontSize","tickLabels","domain","tickFormat","index","tickLabelComponent","victory_label","dy","axisLabelComponent","dependentAxis","axis","dx","tickValues","orientation","offsetX","OEESummary","updateTotals","totalRunTime","reduce","record","totalIdleTime","runTimeStat","idleTimeStat","runTimeTotal","idleTimeTotal","cycleCountTotal","totalCount","utilizationTotal","totalLength","prevProps","victory_pie","colorScale","labelRadius","labels","oeeDataGraph_OEEDataGraph","OEEPage","handleSetupTimeChange","oeeRecordsData","oeeSummaryComponent_OEESummary","table_oeeRecords_OEERecordsTable","EditWinderModal","newWinder","editWinder","orgIndex","orgOptions","AddWinderModal","addWinder","EditPresetsModal","newPresets","presets","editPresets","winderId","preset1","preset2","preset3","preset4","preset5","preset6","preset7","preset8","winderName","step","SpoolWindersPage","editPreset","editName","orgList","adminIndex","getPresetsPromise","editPresetsPromise","setDropDownOptions","getWinders","handleAdd","addModalOpen","editModalOpen","editPresetModalOpen","example","customerOrg","_this3","modal_AddWinder_AddWinderModal","minWidth","isNull","isUndefined","faCog","SubComponent","paddingLeft","row2","modal_EditWinder_EditWinderModal","modal_EditPresets_EditPresetsModal","AddUserModal","newUser","addUser","substr","ConfirmDeleteModal","_getPrototypeOf2","_len","args","Array","_key","deleteInfo","confirmInfo","EditUserModal","editUser","UsersPage","currentOrgIndex","deletePromise","orgPromise","getUsersApiCall","usersData","deleteUser","_","setUserRoleAndOrgId","deleteModalOpen","getOrgName","modal_AddUser_AddUserModal","cell","faTrashAlt","modal_EditUser_EditUserModal","modal_ConfirmDelete_ConfirmDeleteModal","AccountConfirmPage","errorMsg","loginUser","pw","pw2","logoPressed","params","search","match","RegExp","withRouter","App","react_default","history","createBrowserHistory","component","private_route","Component","Boolean","hostname","ReactDOM","render","App_App","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.6cc5bba3.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/header-logo-white.fc55e884.png\";","module.exports = \"data:image/png;base64,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\"","import * as React from 'react';\r\n\r\ninterface Props {\r\n value: string | number,\r\n handleChange?: (e: React.ChangeEvent, parent?: string) => void // optional if readonly? == true\r\n propName?: string, // optional if readonly? == true\r\n title: string,\r\n parentProp?: string,\r\n class?: string,\r\n inputType?: string,\r\n reference?: any,\r\n readonly?: boolean,\r\n disabled?: boolean,\r\n}\r\n\r\ninterface State {\r\n value: string | number,\r\n}\r\n\r\nclass TextInput extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { value: props.value }\r\n }\r\n\r\n public setFocus = () => {\r\n if (this.props.reference) {\r\n this.props.reference.current.focus();\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {this.props.title}:\r\n \r\n
\r\n this.props.handleChange ? this.props.handleChange(e, this.props.parentProp) : {}}\r\n ref={this.props.reference}\r\n readOnly={this.props.readonly}\r\n disabled={this.props.disabled}\r\n />\r\n
\r\n
\r\n )\r\n }\r\n\r\n}\r\n\r\n\r\n\r\nexport default TextInput","import { getToken } from \"./api-account\";\r\n\r\nexport const BASE_URL: string = \r\n process.env.REACT_APP_IS_PROXY === 'true'\r\n ? 'https://localhost:5001/api'\r\n : '/api';\r\n\r\nconsole.log(`Node Environment: ${process.env.NODE_ENV}`)\r\nconsole.log(`API URL: ${BASE_URL}`)\r\n\r\nexport interface ErrorResult {\r\n message: string,\r\n detail: string\r\n}\r\n\r\nexport interface ApiResult {\r\n success: boolean;\r\n error?: ErrorResult;\r\n data?: T;\r\n}\r\n\r\nfunction buildRequest(requestUrl: string, method: string = 'get', body?: any): Request {\r\n let headers: Headers = new Headers();\r\n headers.append('Accept', 'application/json');\r\n const token: string | null = getToken();\r\n if (token) {\r\n headers.append('Authorization', `Bearer ${token}`);\r\n }\r\n\r\n let bodyStringified: string | undefined = undefined;\r\n\r\n if (body) {\r\n bodyStringified = JSON.stringify(body);\r\n headers.append('Content-Type', 'application/json');\r\n }\r\n\r\n return new Request(requestUrl, {\r\n method: method,\r\n body: bodyStringified,\r\n headers: headers,\r\n });\r\n}\r\n\r\nexport const postFormData = (url: string, file: any) => {\r\n\r\n let headers: Headers = new Headers();\r\n\r\n const data = new FormData();\r\n data.append('file', file);\r\n\r\n return fetch(url,\r\n {\r\n headers: headers,\r\n method: 'put',\r\n body: data\r\n })\r\n // .then(response => parseJSON(response))\r\n .then(data => {\r\n return {\r\n success: true,\r\n data: data\r\n };\r\n })\r\n .catch(error => {\r\n return {\r\n success: false,\r\n error: error.message\r\n };\r\n })\r\n}\r\n\r\nexport const downloadFile = (url: string): Promise => {\r\n\r\n // Setup authorization:\r\n let headers = new Headers();\r\n const token: string = getToken() || '';\r\n headers.append('Authorization', `Bearer ${token}`);\r\n\r\n // Ajax fetch the url with Authorization Header\r\n return fetch(url, { headers })\r\n // Convert the 'text/csv' response to a blob\r\n .then(response => response.blob());\r\n}\r\n\r\nexport function httpRequest(requestUrl: string, method: string = 'get', body?: any): Promise> {\r\n let request = buildRequest(requestUrl, method, body);\r\n // console.log(request)\r\n return fetch(request)\r\n .then(response => {\r\n if (response.status >= 200 && response.status < 300 && response.status !== 204) {\r\n // status 204 is NoContent, so don't try and parse it\r\n return response.json()\r\n .then(data => {\r\n let result: ApiResult = { success: true, data: data, error: undefined }\r\n return result;\r\n });\r\n } else if (response.status === 204) {\r\n // No Content\r\n let result: ApiResult = { success: true, data: undefined, error: undefined }\r\n return result;\r\n } else if (response.status === 500) {\r\n // API had an error response should be of type ErrorResult. Parse it and return to caller\r\n return response.json()\r\n .then(apiError => {\r\n let result: ApiResult = { success: false, data: undefined, error: apiError }\r\n return result;\r\n });\r\n } else if (response.status === 400) {\r\n // Bad Request\r\n return response.json()\r\n .then(apiError => {\r\n let result: ApiResult = { success: false, data: undefined, error: apiError }\r\n return result;\r\n });\r\n } else if (response.status === 401) {\r\n // Unauthorized\r\n let err: ErrorResult = { detail: `You must log in to access '${requestUrl}'`, message: 'Not Authorized' };\r\n let result: ApiResult = { success: false, data: undefined, error: err }\r\n return result;\r\n } else if (response.status === 403) {\r\n // Unauthorized\r\n let err: ErrorResult = { detail: `User does not have permissions to access '${requestUrl}'`, message: 'Not Authorized' };\r\n let result: ApiResult = { success: false, data: undefined, error: err }\r\n return result;\r\n } else if (response.status === 404) {\r\n // URL Not found\r\n let err: ErrorResult = { detail: `URL '${requestUrl}' not found on API controller`, message: 'Not Found' };\r\n let result: ApiResult = { success: false, data: undefined, error: err }\r\n return result;\r\n } else if (response.status === 405) {\r\n // Not Allowed (i.e. Tried to POST a GET route)\r\n let err: ErrorResult = { detail: `Not allowed to '${method}' URL '${requestUrl}'`, message: 'Not Allowed' };\r\n let result: ApiResult = { success: false, data: undefined, error: err }\r\n return result;\r\n } else {\r\n let err: ErrorResult = { detail: 'Unhandled http result status', message: 'API Fetch failed' };\r\n let result: ApiResult = { success: false, data: undefined, error: err }\r\n return result;\r\n }\r\n })\r\n .catch(e => {\r\n let details = 'General exception caught in api-shared.ts. Things to check: API URL, API is running, Requested API route...';\r\n let err: ErrorResult = { detail: details, message: e };\r\n let result: ApiResult = { success: false, data: undefined, error: err }\r\n return result;\r\n });\r\n}\r\n\r\n// promise used during automatic token refresh attempts\r\n// let tokenRefreshPromise: Promise | null = null;\r\n\r\n// function updateRequestAuth(request: Request) {\r\n// if (request.headers.has('Authorization')) {\r\n// request.headers.delete('Authorization');\r\n// }\r\n// request.headers.append('Authorization', `Bearer ${authApi.getToken()}`);\r\n// return request;\r\n// }\r\n\r\n// function checkTokenExpiration(request: Request, initialResponse: Response)\r\n// : Promise {\r\n// if (initialResponse.status === 401 && initialResponse.headers.has('www-authenticate') &&\r\n// initialResponse.headers.get('www-authenticate')!.includes('error_description=\"The token is expired\"')) {\r\n\r\n// if (!tokenRefreshPromise) {\r\n// let refreshRequest = buildRequest(`${BASE_URL}${REFRESH_URL}`,\r\n// 'post',\r\n// authApi.getRefreshToken()\r\n// );\r\n// tokenRefreshPromise = fetch(refreshRequest)\r\n// .then((response) => checkStatus(response))\r\n// .then((response) => parseJSON(response))\r\n// .then((data) => {\r\n// authApi.setTokens(data!);\r\n// tokenRefreshPromise = null;\r\n// })\r\n// .catch((error) => {\r\n// console.log(error)\r\n// console.log(\"Error with Token\")\r\n// tokenRefreshPromise = null;\r\n// authApi.logout();\r\n// window.location.reload();\r\n// });\r\n// }\r\n\r\n// return tokenRefreshPromise\r\n// .then(() => {\r\n// return fetch(updateRequestAuth(request));\r\n// });\r\n// }\r\n// return Promise.resolve(initialResponse);\r\n// }","import { httpRequest, BASE_URL } from \"./api-shared\"\r\nimport { ChangePassword, LogInResponse, userInfo, ConfirmAccount } from \"./dataTypes\";\r\nimport jwt_decode from \"jwt-decode\";\r\nimport { getUsersApi } from \"./api-user\";\r\n\r\n\r\nconst ACCOUNT_URL = \"account\"\r\nexport const STORAGE = {\r\n USER_NAME: 'bhs-user-name',\r\n USER_ROLES: 'bhs-user-roles',\r\n JWT_TOKEN: 'bhs-user-token',\r\n // REFRESH_TOKEN: 'refreshToken',\r\n SHIFT_START: 'shift-start-time',\r\n SHIFT_END: 'shift-end-time',\r\n SETUP_TIME: 'setup-time-per-cut',\r\n}\r\n\r\nexport enum USER_ROLE {\r\n CUSTOMER = 'customer',\r\n DISTRIBUTOR = 'distributor',\r\n ADMINISTRATOR = 'admin',\r\n}\r\n\r\nconst getUserRolesEnum = (): USER_ROLE[] => {\r\n const rolesString: string | null = localStorage.getItem(STORAGE.USER_ROLES);\r\n if (rolesString) {\r\n const r: string[] = rolesString.split(', ');\r\n let roles = r.map(role => role = USER_ROLE[role.toUpperCase()])\r\n return roles\r\n } else {\r\n return [];\r\n }\r\n}\r\n\r\nexport const isAdminRole = (): boolean => {\r\n let roles: USER_ROLE[] = getUserRolesEnum();\r\n return roles.indexOf(USER_ROLE.ADMINISTRATOR) >= 0;\r\n}\r\n\r\nexport const isDistributorRole = (): boolean => {\r\n let roles: USER_ROLE[] = getUserRolesEnum();\r\n return roles.indexOf(USER_ROLE.DISTRIBUTOR) >= 0;\r\n}\r\n\r\nexport const logOut = () => {\r\n localStorage.clear();\r\n}\r\n\r\nexport const isLoggedIn = () => {\r\n return getUserName() ? true : false;\r\n}\r\n\r\nexport const getToken = () => {\r\n return localStorage.getItem(STORAGE.JWT_TOKEN);\r\n}\r\n\r\nexport const getUserName = (): string => {\r\n let user = localStorage.getItem(STORAGE.USER_NAME) || '';\r\n return user;\r\n}\r\n\r\nexport const getCurrentUser = () => {\r\n let email: string = getUserName();\r\n return getUsersApi().then(result => {\r\n if (result && email !== \"\") {\r\n let currentUser: userInfo =\r\n result[result.findIndex(e => e.email.toLowerCase() === email.toLowerCase())];\r\n if (currentUser !== null && currentUser.id !== \"\") {\r\n return currentUser;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n });\r\n}\r\n\r\nexport const hasAdminRole = (): boolean => {\r\n let roles = localStorage.getItem(STORAGE.USER_ROLES) || '';\r\n if(roles.indexOf(\"admin\")!==-1){\r\n return true;\r\n }\r\n else{\r\n return false;\r\n }\r\n}\r\n\r\nexport const hasDistributorRole = (): boolean => {\r\n let roles = localStorage.getItem(STORAGE.USER_ROLES) || '';\r\n if(roles.indexOf(\"distributor\")!==-1){\r\n return true;\r\n }\r\n else{\r\n return false;\r\n }\r\n}\r\n\r\nexport const saveLoginData = (username: string, apiResult: LogInResponse) => {\r\n localStorage.setItem(STORAGE.USER_NAME, username);\r\n localStorage.setItem(STORAGE.JWT_TOKEN, apiResult.token);\r\n let decodedToken: any = jwt_decode(apiResult.token);\r\n let roles: string[] | string = decodedToken['http://schemas.microsoft.com/ws/2008/06/identity/claims/role'];\r\n if(typeof roles === 'string') {\r\n localStorage.setItem(STORAGE.USER_ROLES, roles)\r\n } else {\r\n try {\r\n // If the user only has 1 role, this will fail, so catch it below\r\n localStorage.setItem(STORAGE.USER_ROLES, roles.join(\", \"))\r\n } catch (error) { }\r\n }\r\n}\r\n\r\nexport const login = (email: string, password: string): Promise => {\r\n return httpRequest(`${BASE_URL}/${ACCOUNT_URL}/login`,\r\n 'post', { email: email, password: password }\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n saveLoginData(email, r.data as LogInResponse);\r\n return r.data as LogInResponse;\r\n } else {\r\n console.log(`Error Logging In: ${r.error!.message}`)\r\n throw (r.error);\r\n }\r\n });\r\n}\r\n\r\nexport const changePassword = (changePassword: ChangePassword): Promise => {\r\n return httpRequest(`${BASE_URL}/${ACCOUNT_URL}/changePassword`,\r\n 'post', changePassword\r\n ).then(result => {\r\n if (result.success === true) {\r\n return true;\r\n } else {\r\n console.log(\"Error changing password, \" + result.error!.message);\r\n throw (result.error);\r\n }\r\n });\r\n};\r\n\r\nexport const forgottenPasswordApi = (email:string): Promise => {\r\n return httpRequest(`${BASE_URL}/${ACCOUNT_URL}/resetpassword?email=${email}`,\r\n 'post').then(result => {\r\n if(result.success===true){\r\n return true;\r\n }else {\r\n console.log(\"Error resetting password, \"+result.error!.message);\r\n //throw(result.error);\r\n return false;\r\n }\r\n })\r\n}\r\n\r\nexport const addUserApi = (userInfo: userInfo):\r\n Promise => {\r\n return httpRequest(`${BASE_URL}/${ACCOUNT_URL}/add`,\r\n 'post', userInfo\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as userInfo;\r\n } else {\r\n console.log(\"Error Adding User \" + userInfo.email + \", cause: \" + r.error!.message);\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\nexport const editUserApi = (userInfo: userInfo): Promise => {\r\n return httpRequest(`${BASE_URL}/${ACCOUNT_URL}/edit`,\r\n 'put', userInfo\r\n ).then(res => {\r\n if (res.success === true && res.data) {\r\n return res.data as userInfo;\r\n } else {\r\n console.log(res.error!.message);\r\n throw (res.error);\r\n }\r\n });\r\n}\r\n\r\nexport const deleteUserApi = (userInfo: userInfo):\r\n Promise => {\r\n return httpRequest(`${BASE_URL}/${ACCOUNT_URL}/delete`,\r\n 'delete', userInfo\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as userInfo;\r\n } else {\r\n console.log(\"Error Deleting User \" + userInfo.email + \", cause: \" + r.error!.message);\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\n\r\nexport const confirmAccount =\r\n (email: string, token: string, password: string, password2: string): Promise => {\r\n const dto: ConfirmAccount = {\r\n email: email,\r\n password: password,\r\n password2: password2,\r\n token: token\r\n };\r\n\r\n return httpRequest(`${BASE_URL}/${ACCOUNT_URL}/confirm`,\r\n 'post',\r\n dto\r\n ).then(result => {\r\n if (result.success === true && result.data) {\r\n saveLoginData(email, result.data as LogInResponse);\r\n return result.data as LogInResponse;\r\n } else {\r\n console.log(result.error!.message);\r\n throw (result.error);\r\n }\r\n })\r\n }","import { httpRequest, BASE_URL } from \"./api-shared\"\r\nimport { userInfo, registerUserInfo } from \"./dataTypes\";\r\n\r\nconst USER_URL = \"user\"\r\n\r\nexport const addUserApi = (userInfo: registerUserInfo):\r\n Promise => {\r\n return httpRequest(`${BASE_URL}/${USER_URL}`,\r\n 'post', userInfo\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as userInfo;\r\n } else {\r\n console.log(\"Error Adding User \" + userInfo.email + \", cause: \" + JSON.stringify(r.error));\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\nexport const editUserApi = (userInfo: userInfo): Promise => {\r\n return httpRequest(`${BASE_URL}/${USER_URL}`,\r\n 'put', userInfo\r\n ).then(res => {\r\n if (res.success === true && res.data) {\r\n return res.data as userInfo;\r\n } else {\r\n console.log(res.error);\r\n throw (res.error);\r\n }\r\n });\r\n};\r\n\r\nexport const deleteUserApi = (userInfo: userInfo):\r\n Promise => {\r\n return httpRequest(`${BASE_URL}/${USER_URL}`,\r\n 'delete', userInfo\r\n ).then(r => {\r\n if (r.success === true) {\r\n return r.success;\r\n } else {\r\n console.log(\"Error Deleting User \" + userInfo.email + \", cause: \" + r.error!.message);\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\n\r\nexport const getUsersApi = () => {\r\n let url: string = `${BASE_URL}/${USER_URL}`;\r\n\r\n return httpRequest(url,\r\n 'get'\r\n ).then(result => {\r\n if (result.success && result.data) {\r\n return result.data as userInfo[];\r\n } else {\r\n console.log(result.error!.message);\r\n throw result.error;\r\n }\r\n });\r\n};","import * as React from 'react';\r\nimport '../styles/NavButton.css';\r\nimport { NavLink, match } from 'react-router-dom';\r\nimport { Location } from 'history';\r\n\r\nexport enum NavButtonSize {\r\n small,\r\n large,\r\n pill\r\n}\r\n\r\nexport interface Props {\r\n text: string;\r\n icon?: any;\r\n iconSelected?: any;\r\n path: string;\r\n alternatePaths?: string[];\r\n size?: NavButtonSize;\r\n className?: string;\r\n showSelected?: boolean;\r\n}\r\n\r\nfunction NavButton({ text,\r\n icon,\r\n iconSelected,\r\n path,\r\n size = NavButtonSize.small,\r\n alternatePaths,\r\n className,\r\n showSelected = true }: Props) {\r\n const checkAlternatePath = (pathMatch: match<{}>, location: Location): boolean => {\r\n if (pathMatch ||\r\n (alternatePaths !== undefined && alternatePaths.some(p => p === location.pathname))) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n let sizeClassName = 'small';\r\n\r\n switch (size) {\r\n case NavButtonSize.large:\r\n sizeClassName = 'large';\r\n break;\r\n case NavButtonSize.pill:\r\n sizeClassName = 'pill';\r\n break;\r\n case NavButtonSize.small:\r\n default:\r\n sizeClassName = 'small';\r\n }\r\n\r\n return (\r\n
\r\n \r\n {icon && (\"nav)}\r\n {iconSelected && (\"nav)}{text}\r\n \r\n {showSelected &&
 
}\r\n
\r\n );\r\n}\r\n\r\nexport default NavButton;","export class PromiseHelper {\r\n\r\n private p: Promise | undefined;\r\n\r\n public newPromise(promise: Promise,\r\n t: (result: any) => any,\r\n c?: (error: any) => any\r\n ) {\r\n this.p = promise;\r\n this.p\r\n .then(x => {\r\n if (this.p) {\r\n this.p = undefined;\r\n t(x);\r\n }\r\n })\r\n .catch(x => {\r\n console.log(`PromiseHelper caught error ${x.message}, ${x.detail}`);\r\n if (this.p) {\r\n this.p = undefined;\r\n if (c) {\r\n c(x);\r\n } else {\r\n alert('Unhandled error occurred in promiseHelper');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n public clearPromise() {\r\n this.p = undefined;\r\n }\r\n\r\n}","import * as React from 'react'\r\nimport { Redirect } from 'react-router';\r\nimport '../styles/Login.css'\r\n// import { login, resetPasswordRequest} from '../api/auth-api';\r\n\r\nimport headerLogo from '../images/header-logo-white.png';\r\nimport TextInput from '../components/text-input';\r\nimport { login, forgottenPasswordApi } from '../api/api-account';\r\nimport { PromiseHelper } from '../classes/promiseHelper';\r\nimport { LogInResponse } from '../api/dataTypes';\r\n\r\ninterface State {\r\n username: string,\r\n password: string,\r\n isLoggedIn: boolean,\r\n options: string[]\r\n disableInputs: boolean,\r\n}\r\n\r\nexport interface Props {\r\n}\r\n\r\n\r\nexport default class LoginPage extends React.Component {\r\n uNameRef: any;\r\n loginPromise: PromiseHelper = new PromiseHelper();\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n username: '',\r\n password: '',\r\n isLoggedIn: false,\r\n options: [],\r\n disableInputs: false,\r\n }\r\n this.uNameRef = React.createRef();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.loginPromise.clearPromise();\r\n }\r\n\r\n componentDidMount = () => {\r\n this.focusUserName();\r\n }\r\n\r\n focusUserName = () => {\r\n this.uNameRef.current.focus();\r\n }\r\n\r\n handleKeyPress = (e: any) => {\r\n if (e.key === 'Enter') {\r\n this.handleLogin();\r\n }\r\n }\r\n\r\n handleInputChange = (e: React.ChangeEvent, parent?: string) => {\r\n let targetName = e.target.name;\r\n let val: string = e.target.value\r\n\r\n this.setState(prevState => ({\r\n ...prevState,\r\n [targetName]: val\r\n }));\r\n }\r\n\r\n handleLogin = () => {\r\n this.setState({ disableInputs: true });\r\n let user = this.state.username;\r\n let password = this.state.password;\r\n this.loginPromise.newPromise(\r\n login(user, password),\r\n t => {\r\n this.setState({\r\n isLoggedIn: true,\r\n disableInputs: false,\r\n });\r\n },\r\n error => {\r\n this.setState({ disableInputs: false });\r\n alert(\"Login failed. Please try again. \\n\" + error!.message);\r\n this.focusUserName();\r\n }\r\n )\r\n }\r\n\r\n handleForgotPassword = () => {\r\n //alert('TODO');\r\n if(this.state.username === null || this.state.username === ''){\r\n alert(\"To reset your password, please provide your email\");\r\n return;\r\n }\r\n\r\n this.setState({disableInputs: true});\r\n\r\n console.log(\"Reseting password for \" + this.state.username);\r\n forgottenPasswordApi(this.state.username)\r\n .then( result => {\r\n this.setState({disableInputs: false});\r\n if(result === true) {\r\n alert(\"Password reset link sent to the provided email\");\r\n } else {\r\n alert(\"Failed to send password reset. Double check the provided email address\")\r\n }\r\n })\r\n }\r\n\r\n render() {\r\n if (this.state.isLoggedIn === true) {// || isAuthenticated() === true) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n {this.renderButton()}\r\n
\r\n
\r\n \r\n )\r\n }\r\n }\r\n\r\n renderButton = () => {\r\n return (\r\n
\r\n \r\n Login\r\n \r\n\r\n \r\n Forgot Password\r\n \r\n
\r\n )\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { isLoggedIn } from '../api/api-account';\r\n\r\ninterface State {\r\n\r\n}\r\n\r\nexport interface Props {\r\n}\r\n\r\nclass PrivateRoutes extends React.Component {\r\n\r\n render() {\r\n if (isLoggedIn()) {\r\n return this.props.children\r\n } else {\r\n return \r\n }\r\n }\r\n}\r\n\r\nexport default PrivateRoutes;","import {hasAdminRole } from \"./api-account\";\r\n\r\nexport const DATA_REFRESH_TIME: number = 30000;\r\n\r\n// AUTHENTICATION ///////////////////////////\r\nexport interface LogInResponse {\r\n token: string;\r\n expires: Date;\r\n}\r\n\r\nexport interface userInfo {\r\n id: string;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n phone: string;\r\n distributorId: number | null;\r\n distributorName: string | null;\r\n customerId: number | null;\r\n customerName: string | null;\r\n roles: string[];\r\n}\r\n\r\nexport interface registerUserInfo {\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n phone: string;\r\n distributorId: number | null;\r\n customerId: number | null;\r\n roles: string[];\r\n}\r\n\r\nexport interface ChangePassword {\r\n email: string;\r\n currentPassword: string;\r\n newPassword: string;\r\n confirmNewPassword: string;\r\n}\r\n\r\nexport interface LoginAttempt {\r\n email: string;\r\n password: string;\r\n}\r\n\r\nexport interface SetPassword {\r\n email: string;\r\n password: string;\r\n confirmPassword: string;\r\n code: string;\r\n}\r\n\r\nexport interface PasswordResponse {\r\n message: string;\r\n}\r\n\r\nexport interface ConfirmAccount {\r\n email: string,\r\n password: string,\r\n password2: string,\r\n token: string\r\n}\r\n\r\n// Component Functions //////////////////////////////\r\n\r\nexport interface DropdownList {\r\n value: number;\r\n name: string;\r\n}\r\n\r\n\r\n// Enums //////////////////////////////////\r\nexport enum alarmSeverity {\r\n \"Note\" = 1,\r\n \"Not Act + Ack'd\" = 2,\r\n \"Not Active\" = 3,\r\n \"Warning\" = 4,\r\n \"Active + Ack'd\" = 5,\r\n \"Active\" = 6,\r\n \"Critical\" = 7,\r\n}\r\n\r\nexport enum alarmSeverityColors {\r\n 'empty' = 1,\r\n 'clear' = 2,\r\n 'green' = 3,\r\n 'gold' = 4,\r\n 'orange' = 5,\r\n 'red' = 6,\r\n 'crimson' = 7,\r\n}\r\n\r\nexport enum orgTypes {\r\n 'Not Selected',\r\n 'Customer',\r\n 'Distributor',\r\n //'Admin',\r\n}\r\n\r\nexport const GetOrgTypeDropdownList = (): DropdownList[] => {\r\n if(hasAdminRole()){\r\n return [\r\n { name: orgTypes[orgTypes[\"Not Selected\"]], value: orgTypes[\"Not Selected\"] },\r\n { name: orgTypes[orgTypes.Customer], value: orgTypes.Customer },\r\n { name: orgTypes[orgTypes.Distributor], value: orgTypes.Distributor },\r\n //{ name: orgTypes[orgTypes.Admin], value: orgTypes.Admin }\r\n ];\r\n }else{\r\n return [\r\n { name: orgTypes[orgTypes[\"Not Selected\"]], value: orgTypes[\"Not Selected\"] },\r\n { name: orgTypes[orgTypes.Customer], value: orgTypes.Customer }\r\n ];\r\n }\r\n}\r\n\r\nexport interface orgDetails {\r\n name: string;\r\n id: number | null;\r\n orgType: orgTypes;\r\n distId: number | null;\r\n}\r\n\r\n// This isn't an interface so that we can have a getter to return the OrgType\r\n// as a string\r\nexport class orgInfo {\r\n\r\n // Constructor type method. Needed so all the properties are \r\n // correct, and to register the getter\r\n Init(o: orgDetails) {\r\n this.name = o.name;\r\n this.distId = o.distId;\r\n this.orgType = o.orgType;\r\n this.id = o.id;\r\n }\r\n\r\n name: string = '';\r\n id: number | null = null;\r\n orgType: orgTypes = orgTypes[\"Not Selected\"];\r\n distId: number | null = null;\r\n\r\n public get test(): string {\r\n return orgTypes[this.orgType];\r\n }\r\n}\r\n\r\nexport enum cutStatus {\r\n \"Completed\" = 0,\r\n \"Abandoned\" = 1,\r\n \"Other\" = 2,\r\n}\r\n\r\n// Customer Datas ///////////////////////\r\nexport interface Alarm {\r\n systemId: number;\r\n systemName: string;\r\n raisedTime: Date;\r\n ackTime: Date | null;\r\n isActive: boolean;\r\n message: string;\r\n severity: alarmSeverity;\r\n}\r\n\r\nexport interface reportRequest {\r\n startDate: Date,\r\n endDate: Date,\r\n systemId: number,\r\n org: number,\r\n shiftStartTime?: Date | null,\r\n shiftEndTime?: Date | null,\r\n}\r\n\r\nexport interface ReportHistory {\r\n systemName: string,\r\n userId: number,\r\n startTime: Date;\r\n endTime: Date;\r\n reqCutLength: number;\r\n actualCutLength: number;\r\n status: cutStatus;\r\n presetNumber: number;\r\n}\r\n\r\nexport interface Winder {\r\n id:number;\r\n name:string;\r\n location:string;\r\n ownerName:string;\r\n mode:string;\r\n currentCutRequest:number|null;\r\n heartBeat:Date|null;\r\n serialNumber:string;\r\n mqttPassword:string;\r\n macAddress:string;\r\n}\r\n\r\nexport interface createWinder {\r\n name:string;\r\n location:string;\r\n serialNumber:string;\r\n customerId:number|null;\r\n distributorId:number|null;\r\n macAddress:string;\r\n}\r\n\r\nexport interface editWinder {\r\n id:number;\r\n name:string;\r\n location:string;\r\n serialNumber:string;\r\n mqttPassword:string;\r\n customerId:number|null;\r\n distributorId:number|null;\r\n macAddress:string;\r\n}\r\n\r\nexport interface presetInfo {\r\n id:number;\r\n winderId:number;\r\n preset1:number;\r\n preset2:number;\r\n preset3:number;\r\n preset4:number;\r\n preset5:number;\r\n preset6:number;\r\n preset7:number;\r\n preset8:number;\r\n}\r\n// /api/org\r\nexport interface distributor {\r\n id: number;\r\n name: string;\r\n}\r\n\r\nexport interface customerInfo {\r\n id: number;\r\n name: string;\r\n distributorID: string;\r\n}\r\n\r\nexport interface OEEHistory {\r\n startTime: Date;\r\n endTime: Date;\r\n runTime: number;\r\n idleTime: number;\r\n cycleCount: number;\r\n cutLengthTotal: number;\r\n}\r\n\r\n\r\n\r\n\r\nexport interface customerInfo {\r\n name: string;\r\n id: number;\r\n phone: string;\r\n email: string;\r\n orgID: number;\r\n masterOrgName: string;\r\n companyID: string;\r\n}\r\n\r\nexport interface customerUpdate {\r\n orgId: number,\r\n name: string,\r\n primaryContactId: string,\r\n masterCustomerID?: number,\r\n companyID: string\r\n}\r\n\r\n// Default Datas ///////////////////////////////////////////\r\n\r\nexport const getDefaultUserInfo = (): userInfo => {\r\n return {\r\n id: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n phone: \"\",\r\n roles: [\"Customer\"],\r\n distributorId: null,\r\n distributorName: null,\r\n customerId: null,\r\n customerName: null,\r\n }\r\n}\r\n\r\nexport const GetDefaultWinder = (): Winder => {\r\n return {\r\n id:0,\r\n name:\"\",\r\n location:\"\",\r\n ownerName: \"\",\r\n mode:\"\",\r\n currentCutRequest:null,\r\n heartBeat: new Date(1999,1,1,0,0,0),\r\n serialNumber:\"\",\r\n mqttPassword:\"\",\r\n macAddress:\"\",\r\n }\r\n}","import * as React from 'react';\r\n// import {logout as apiLogout} from '../api/auth-api';\r\nimport { Redirect } from 'react-router';\r\n// import { getUserName } from '../api/auth-api';\r\nimport '../styles/Headers.css';\r\nimport NavButton, { NavButtonSize } from './NavButton';\r\nimport { Link } from 'react-router-dom';\r\nimport { getUserName, logOut, hasAdminRole, hasDistributorRole } from '../api/api-account';\r\nconst headerLogo = require('../images/header-logo-white.png');\r\n\r\nexport interface Props {\r\n\r\n}\r\n\r\ninterface State {\r\n logout: Boolean\r\n}\r\n\r\nexport class Header extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n logout: false,\r\n }\r\n }\r\n\r\n handleLogout = () => {\r\n logOut();\r\n this.setState({ logout: true });\r\n }\r\n\r\n render() {\r\n let isCustomer:boolean = !(hasAdminRole()||hasDistributorRole())\r\n if (this.state.logout) {\r\n return ;\r\n } else {\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {!isCustomer&&}\r\n
\r\n
\r\n
\r\n Logged in as:
\r\n {getUserName()}
\r\n Manage Account\r\n
\r\n \r\n Logout\r\n \r\n
\r\n
\r\n )\r\n\r\n }\r\n }\r\n}","import * as React from 'react';\r\n\r\ninterface State {\r\n value: string | number;\r\n blockUpdates: boolean;\r\n}\r\n\r\nexport interface Props {\r\n handleChange: (name: string, value: string | number) => void;\r\n fieldName: string;\r\n value: string | number;\r\n APIName: string;\r\n type?: string;\r\n}\r\n\r\nexport class UserAccountComponent extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n value: props.value,\r\n blockUpdates: false\r\n };\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n // Only update this component if we're not currently editing it\r\n if (!this.state.blockUpdates) {\r\n this.setState({\r\n value: nextProps.value\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n {this.props.fieldName}\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n );\r\n }\r\n\r\n private onFocus = (e: React.SyntheticEvent) => {\r\n this.setState({\r\n blockUpdates: true\r\n });\r\n }\r\n\r\n private onBlur = (e: React.SyntheticEvent) => {\r\n // Call method to update value if value has changed\r\n if (this.props.value !== this.state.value) {\r\n this.props.handleChange(this.props.APIName, this.state.value);\r\n }\r\n\r\n // Reenable updating for this component\r\n this.setState({\r\n blockUpdates: false\r\n });\r\n }\r\n\r\n private onChange = (e: React.SyntheticEvent) => {\r\n this.setState({\r\n value: e.currentTarget.value\r\n });\r\n }\r\n\r\n}\r\n","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport { ChangePassword } from \"../api/dataTypes\";\r\n\r\ninterface State {\r\n currentPassword: string;\r\n newPassword: string;\r\n confirmPassword: string;\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n changePassword: (changePassword: ChangePassword) => void;\r\n message: string;\r\n email: string;\r\n}\r\n\r\nexport class EditPasswordModal extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n currentPassword: \"\",\r\n newPassword: \"\",\r\n confirmPassword: \"\"\r\n };\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
Current Password
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
New Password
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Confirm Password
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {this.props.message}\r\n
\r\n
\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private onInputChange = (\r\n e:\r\n | React.SyntheticEvent\r\n | React.SyntheticEvent\r\n ) => {\r\n this.setState({\r\n ...this.state,\r\n [e.currentTarget.name]: e.currentTarget.value\r\n });\r\n }\r\n\r\n private confirmButtonPressed = () => {\r\n // Call change password method that was passed in\r\n this.props.changePassword({\r\n email: this.props.email,\r\n currentPassword: this.state.currentPassword,\r\n newPassword: this.state.newPassword,\r\n confirmNewPassword: this.state.confirmPassword,\r\n }\r\n );\r\n }\r\n\r\n private cancelButtonPressed = () => {\r\n this.setState({\r\n currentPassword: \"\",\r\n newPassword: \"\",\r\n confirmPassword: \"\"\r\n });\r\n this.props.closeModal();\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { userInfo, ChangePassword } from '../api/dataTypes';\r\nimport { UserAccountComponent } from './UserAccountComponent';\r\nimport { EditPasswordModal } from '../modals/modal-EditPassword';\r\nimport '../styles/App.css';\r\n\r\ninterface State {\r\n editPasswordModalOpen: boolean;\r\n}\r\n\r\nexport interface Props {\r\n userInfo: userInfo;\r\n handleChange: (name: string, value: string | number) => void;\r\n handleSave: () => void;\r\n message: string;\r\n changePassword: (changePassword: ChangePassword) => void;\r\n passwordChangeMessage: string;\r\n}\r\n\r\nexport class UserAccountInfo extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n editPasswordModalOpen: false,\r\n };\r\n }\r\n\r\n render() {\r\n let accountInfo = this.props.userInfo;\r\n return (\r\n accountInfo &&\r\n
\r\n
\r\n
\r\n Username/Email\r\n
\r\n
\r\n {accountInfo.email}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n this.props.handleSave()}\r\n >\r\n Save\r\n \r\n
\r\n {this.props.message}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Password\r\n
\r\n this.openModal()}\r\n >\r\n Change Password\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n openModal = () => {\r\n this.setState({\r\n editPasswordModalOpen: true\r\n });\r\n }\r\n\r\n closeModal = () => {\r\n this.setState({\r\n editPasswordModalOpen: false\r\n });\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { Header } from '../components/header';\r\nimport { userInfo, getDefaultUserInfo, ChangePassword } from \"../api/dataTypes\";\r\nimport { UserAccountInfo } from \"../components/UserAccountInfo\";\r\nimport * as accountApi from \"../api/api-account\";\r\nimport * as userApi from \"../api/api-user\";\r\nimport { PromiseHelper } from \"../classes/promiseHelper\";\r\n\r\ninterface State {\r\n userInfo: userInfo;\r\n message: string;\r\n passwordChangeMessage: string;\r\n}\r\n\r\nexport interface Props {\r\n // match: { params: { washName: string } };\r\n}\r\n\r\nexport class AccountPage extends React.Component {\r\n currentUserPromise:PromiseHelper = new PromiseHelper();\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n userInfo: getDefaultUserInfo(),\r\n message: \"\",\r\n passwordChangeMessage: \"\"\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.getUserInfo();\r\n //accountApi.getCurrentUser();\r\n }\r\n\r\n componentWillUnmount(){\r\n this.currentUserPromise.clearPromise();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n
Account
\r\n
\r\n {//
\r\n }\r\n \r\n {//
\r\n }\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n handleFieldChange = (e: React.SyntheticEvent) => {\r\n var newState = {\r\n ...this.state.userInfo,\r\n [e.currentTarget.name]: e.currentTarget.value\r\n };\r\n this.setState({ userInfo: newState });\r\n }\r\n\r\n private onInputChange = (name: string, value: string | number) => {\r\n let newData = this.state.userInfo;\r\n newData[name] = value;\r\n this.setState({\r\n userInfo: newData\r\n });\r\n }\r\n\r\n handleSave = () => {\r\n userApi.editUserApi(this.state.userInfo)\r\n .then(result => {\r\n this.setState({ message: \"Data Saved\" });\r\n })\r\n .catch(e => {\r\n this.setState({ message: \"Could Not Save Changes. \" + e });\r\n });\r\n }\r\n\r\n getUserInfo = () => {\r\n this.currentUserPromise!.newPromise(accountApi.getCurrentUser(),\r\n res => {\r\n this.setState({userInfo:res});\r\n },\r\n error => {\r\n alert(\"error getting current user.\")\r\n });\r\n // let email: string = accountApi.getUserName();\r\n // userApi.getUsersApi().then(result => {\r\n // if (result && email !== \"\") {\r\n // let currentUser: userInfo =\r\n // result[result.findIndex(e => e.email === email)];\r\n // if (currentUser !== null && currentUser.id !== \"\") {\r\n // this.setState({\r\n // userInfo: currentUser\r\n // });\r\n // return currentUser;\r\n // } else {\r\n // return null;\r\n // }\r\n // } else {\r\n // return null;\r\n // }\r\n // });\r\n }\r\n\r\n private changePassword = (changePassword: ChangePassword) => {\r\n accountApi.changePassword(changePassword).then(result => {\r\n if (result) {\r\n this.setState({\r\n passwordChangeMessage: \"Password updated successfully\"\r\n });\r\n } else {\r\n this.setState({\r\n passwordChangeMessage: \"Error changing password, please retry\"\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","import { Alarm, reportRequest } from './dataTypes';\r\nimport { httpRequest, BASE_URL } from './api-shared';\r\nimport moment from 'moment';\r\n\r\nconst ALARMS_URL = 'alarms';\r\n\r\nexport const getAlarmsApi = (request: reportRequest): Promise => {\r\n // Get formatted URL\r\n const url: string = formatReportURL(`${BASE_URL}/${ALARMS_URL}`, request);\r\n return httpRequest(url,\r\n 'get'\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as Alarm[];\r\n } else {\r\n // alert(\"Error retreiving alarms, \" + r.error!.message)\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\nexport const ackAlarmApi = (alarm: Alarm) => {\r\n return httpRequest(`${BASE_URL}/${ALARMS_URL}/acknowledge`,\r\n 'post', alarm\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as Alarm[];\r\n } else {\r\n alert(\"Error acknowledging alarm, \" + r.error!.message)\r\n throw (alarm);\r\n }\r\n });\r\n}\r\n\r\nconst formatReportURL = (rootUrl: string, data: reportRequest): string => {\r\n\r\n const start: string = `start=${data.startDate.toISOString()}`;\r\n // Bump the end day to 11:59 of the day so that all Alarms on the selected\r\n // day are included\r\n const end: string = data.endDate\r\n ? `&end=${moment(data.endDate).add(1, \"day\").startOf(\"day\").toDate().toISOString()}` : '';\r\n const system: string = data.systemId ? `&sysId=${data.systemId}` : '';\r\n const org: string = data.org ? `&org=${data.org}` : '';\r\n\r\n return `${rootUrl}?${start}${end}${org}${system}`;\r\n}","\r\nexport const columnHeaderStyle = {\r\n textAlign: \"left\",\r\n fontWeight: \"bold\",\r\n font: \"18px\",\r\n borderRadius: \"2px\"\r\n}\r\n\r\nexport const columnSubHeaderStyle = {\r\n textAlign: \"left\",\r\n fontWeight: \"normal\"\r\n}\r\n\r\nexport const dataStyle = {\r\n textAlign: \"left\",\r\n padding: \"3px\",\r\n}\r\n","import * as React from \"react\";\r\nimport { Alarm, alarmSeverity, alarmSeverityColors } from \"../api/dataTypes\";\r\nimport ReactTable from \"react-table\";\r\nimport 'react-table/react-table.css'\r\nimport * as TableStyles from \"../styles/TableFormats\";\r\nimport \"../styles/Tables.css\";\r\nimport moment from 'moment';\r\nimport matchSorter from 'match-sorter';\r\n\r\ninterface State {\r\n\r\n}\r\n\r\nexport interface Props {\r\n alarms: Alarm[] | null;\r\n loading: boolean;\r\n //ackAlarm: (alarm: Alarm) => void;\r\n}\r\n\r\nexport class AlarmsTable extends React.Component {\r\n // Time zone offset from API server\r\n private offset = moment().utcOffset();\r\n \r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n getTrProps = (state: any, rowInfo: any, instance: any) => {\r\n if (rowInfo) {\r\n return {\r\n style: {\r\n background: alarmSeverityColors[rowInfo.original.severity],\r\n }\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n\r\n // COLUMNS ////////////////////////////////\r\n columns={[{\r\n Header: 'Active Time',\r\n id: 'raisedTime',\r\n accessor: row => moment(row.raisedTime).format('x'),\r\n Cell: row => (moment(row.original.raisedTime).add(this.offset,'m').format(' hh:mm a, MM/DD/YY')),\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 180,\r\n }, {\r\n Header: 'Alarm',\r\n accessor: 'message',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Status',\r\n id: 'severity',\r\n accessor: (a: Alarm) => {\r\n return ( alarmSeverity[a.severity])\r\n },\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 150\r\n }, /*{\r\n Header: 'Ackn',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: {\r\n textAlign: \"center\",\r\n padding: \"3px\"\r\n },\r\n width: 60,\r\n filterable: false,\r\n Cell: row => (\r\n row.original.severity > 2 &&\r\n
\r\n \r\n \r\n
\r\n )\r\n },*/ {\r\n Header: 'Fault Reset Time',\r\n id:'ackTime',\r\n accessor: row => moment(row.ackTime!).format('x'),\r\n Cell: row => (moment(row.original.ackTime).add(this.offset, 'm').format(' hh:mm a, MM/DD/YY')),\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 180\r\n }, \r\n ]}\r\n // COLUMNS END //////////////////\r\n className=\"-highlight\"\r\n showPagination={false}\r\n defaultSorted = {[{id: 'raisedTime', desc: true}]}\r\n minRows={5}\r\n loading={this.props.loading}\r\n getTrProps={this.getTrProps}\r\n />\r\n
\r\n );\r\n }\r\n\r\n}","import * as React from \"react\";\r\nimport { Winder, alarmSeverityColors } from \"../api/dataTypes\";\r\nimport ReactTable from \"react-table\";\r\nimport 'react-table/react-table.css'\r\nimport \"../styles/Tables.css\";\r\nimport matchSorter from 'match-sorter';\r\n\r\ninterface State {\r\n\r\n}\r\n\r\nexport interface Props {\r\n systems: Winder[];\r\n loading: boolean;\r\n updateSystemSelection: (system: number) => void;\r\n}\r\n\r\nexport class SystemSelectList extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n getTrProps = (state: any, rowInfo: any, instance: any) => {\r\n if (rowInfo) {\r\n return {\r\n style: {\r\n background: alarmSeverityColors[rowInfo.original.alarmState],\r\n }\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n\r\n // COLUMNS ////////////////////////////////\r\n columns={[{\r\n Header: 'Select System',\r\n headerStyle: {\r\n fontWeight: \"bold\",\r\n },\r\n style: {\r\n textAlign: \"left\",\r\n padding: \"1px\",\r\n },\r\n // sortable: false,\r\n // filterable: false,\r\n Cell: row => (\r\n
\r\n \r\n\r\n
\r\n )\r\n }\r\n ]}\r\n // COLUMNS END //////////////////\r\n className=\"-highlight\"\r\n showPagination={false}\r\n minRows={5}\r\n loading={this.props.loading}\r\n getTrProps={this.getTrProps}\r\n />\r\n
\r\n );\r\n }\r\n\r\n}","import { Winder, createWinder, editWinder, presetInfo } from \"./dataTypes\";\r\nimport { BASE_URL, httpRequest } from \"./api-shared\";\r\n\r\nconst WINDER_URL = \"winder\";\r\nconst PRESET_URL = \"preset\";\r\nexport const getAllWindersApi = (): Promise => {\r\n return httpRequest(`${BASE_URL}/${WINDER_URL}`,\r\n 'get'\r\n ).then(result => {\r\n if (result.success) {\r\n return result.data as Winder[];\r\n } else {\r\n console.log(\"Error getting winders, \" + result.error!.message);\r\n throw (result.error);\r\n }\r\n });\r\n }\r\n\r\n \r\n export const addWinderApi = (Winder:createWinder): Promise => {\r\n return httpRequest(`${BASE_URL}/${WINDER_URL}`,\r\n 'post', Winder\r\n ).then(res => {\r\n if (res.success === true && res.data) {\r\n return res.data as Winder;\r\n } else {\r\n console.log(\"Error adding winder, \" + res.error!.message);\r\n throw (res.error);\r\n }\r\n });\r\n }\r\n\r\n export const editWinderApi = (winder:editWinder): Promise => {\r\n return httpRequest(`${BASE_URL}/${WINDER_URL}`,\r\n 'put', winder\r\n ).then(result => {\r\n if (result.success) {\r\n return result.data as Winder;\r\n } else {\r\n console.log(\"Error updating winder, \" + result.error!.message);\r\n throw (result.error);\r\n }\r\n });\r\n };\r\n\r\n export const getAllPresetsApi = (): Promise => {\r\n return httpRequest(`${BASE_URL}/${WINDER_URL}/${PRESET_URL}`,\r\n 'get'\r\n ).then(result => {\r\n if (result.success) {\r\n return result.data as presetInfo[];\r\n } else {\r\n console.log(\"Error getting presets, \" + result.error!.message);\r\n throw (result.error);\r\n }\r\n });\r\n }\r\n\r\n export const editPresetApi = (preset:presetInfo): Promise => {\r\n return httpRequest(`${BASE_URL}/${WINDER_URL}/${PRESET_URL}`,\r\n 'put', preset\r\n ).then(result => {\r\n if (result.success) {\r\n return result.data as presetInfo;\r\n } else {\r\n console.log(\"Error updating preset, \" + result.error!.message);\r\n throw (result.error);\r\n }\r\n });\r\n };\r\n ","import * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport { Header } from '../components/header';\r\nimport { Alarm, reportRequest, Winder, DATA_REFRESH_TIME } from '../api/dataTypes';\r\nimport { getAlarmsApi} from '../api/api-alarms';\r\nimport Toggle from 'react-toggle';\r\nimport moment from 'moment';\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { AlarmsTable } from '../components/table-alarms';\r\nimport { SystemSelectList } from '../components/selectSystem';\r\nimport { PromiseHelper } from '../classes/promiseHelper';\r\nimport { getAllWindersApi } from '../api/api-winder';\r\n\r\ninterface State {\r\n systems: Winder[];\r\n alarmRequest: reportRequest;\r\n includeInactive: boolean;\r\n alarmData: Alarm[] | null;\r\n message: string;\r\n}\r\n\r\nexport interface Props {\r\n}\r\n\r\nexport class AlarmsPage extends React.Component {\r\n\r\n alarmPromise: PromiseHelper = new PromiseHelper();\r\n winderPromise: PromiseHelper = new PromiseHelper();\r\n dataTimerId: number | null = null;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n systems: [],\r\n alarmRequest: {\r\n startDate: moment(new Date(Date.now()))\r\n .subtract(7, \"days\")\r\n .toDate(),\r\n endDate: new Date(Date.now()),\r\n systemId: 0,\r\n org: 0,\r\n },\r\n alarmData: null,\r\n includeInactive: true,\r\n message: 'loading...'\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.getAlarms(this.state.alarmRequest);\r\n this.getSystems();\r\n this.dataTimerId = window.setInterval(this.getAlarms, DATA_REFRESH_TIME);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.alarmPromise.clearPromise();\r\n this.winderPromise.clearPromise();\r\n if (this.dataTimerId !== null) {\r\n clearInterval(this.dataTimerId);\r\n this.dataTimerId = null;\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n Alarms\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n Include Inactive Alarms\r\n \r\n \r\n
\r\n
\r\n
Start Date
\r\n { if (d) { this.updateStartDate(d) } }}\r\n />\r\n
\r\n
\r\n
End Date
\r\n { if (d) { this.updateEndDate(d) } }}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n {\r\n let request = this.state.alarmRequest;\r\n request.systemId = system;\r\n this.getAlarms(request);\r\n }}\r\n loading={this.state.systems.length === 0}\r\n />\r\n
\r\n
\r\n a.isActive)}\r\n //ackAlarm={this.ackAlarm}\r\n loading={this.state.alarmData === null}\r\n />\r\n
\r\n
\r\n\r\n \r\n )\r\n }\r\n\r\n private getSystems = () => {\r\n this.winderPromise.newPromise(\r\n getAllWindersApi(),\r\n result => {\r\n // Don't update the state if the promise has been cleared\r\n if (this.winderPromise) {\r\n this.setState({ systems: result });\r\n }\r\n },\r\n e => {\r\n if (this.winderPromise) {\r\n alert(`Error retrieving systems. ${e!.message}`)\r\n }\r\n }\r\n );\r\n };\r\n\r\n private updateStartDate = (e: Date) => {\r\n // Ignore any old alarm request if there was one\r\n this.alarmPromise.clearPromise();\r\n // create new request object\r\n let nextRequest = this.state.alarmRequest;\r\n nextRequest.startDate = moment(e).toDate();\r\n // Call api to get alarms for new request parameters\r\n this.getAlarms(nextRequest);\r\n return e;\r\n };\r\n\r\n private updateEndDate = (e: Date) => {\r\n this.alarmPromise.clearPromise();\r\n\r\n let nextRequest = this.state.alarmRequest;\r\n nextRequest.endDate = moment(e).toDate();\r\n this.getAlarms(nextRequest);\r\n return e;\r\n };\r\n\r\n private getAlarms = (request: reportRequest | null) => {\r\n this.alarmPromise!.newPromise(\r\n getAlarmsApi(request || this.state.alarmRequest),\r\n result => {\r\n this.setState({\r\n alarmRequest: request || this.state.alarmRequest,\r\n alarmData: result,\r\n message: ''\r\n });\r\n },\r\n e => {\r\n console.log(`Error caught in page-alarms.getAlarms(). ${e!.message}`);\r\n alert('Error getting alarms');\r\n }\r\n );\r\n }\r\n\r\n // private ackAlarm = (alarm: Alarm) => {\r\n // ackAlarmApi(alarm)\r\n // .then((result) => {\r\n // if (result) {\r\n // this.setState({\r\n // message: 'Acknowledge request sent to ' +\r\n // alarm.systemName + ' for ' + alarm.message\r\n // });\r\n // }\r\n // this.getAlarms(this.state.alarmRequest);\r\n // });\r\n // }\r\n}","import * as React from \"react\";\r\nimport { ReportHistory, cutStatus } from \"../api/dataTypes\";\r\nimport ReactTable from \"react-table\";\r\nimport 'react-table/react-table.css'\r\nimport * as TableStyles from \"../styles/TableFormats\";\r\nimport \"../styles/Tables.css\";\r\nimport moment from 'moment';\r\nimport matchSorter from 'match-sorter';\r\n\r\ninterface State {\r\n\r\n}\r\n\r\nexport interface Props {\r\n cuts: ReportHistory[] | null;\r\n loading: boolean;\r\n showWinderColumn: boolean;\r\n}\r\n\r\nexport class CutRecordsTable extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n render() {\r\n return(\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n\r\n // COLUMNS ////////////////////////////////\r\n columns={[{\r\n Header: 'Winder',\r\n id: 'systemName',\r\n accessor: row => row.systemName,\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n show: this.props.showWinderColumn,\r\n }, {\r\n Header: 'Start Time',\r\n id: 'startTime',\r\n accessor: row => moment(row.startTime).format('x'),\r\n Cell: row => (moment(row.original.startTime).add(moment().utcOffset(), 'm').format(' hh:mm a, MM/DD/YY')),\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 250,\r\n }, {\r\n Header: 'End Time',\r\n id:'endTime',\r\n accessor: row => moment(row.endTime).format('x'),\r\n Cell: row => (moment(row.original.endTime).add(moment().utcOffset(), 'm').format(' hh:mm a, MM/DD/YY')),\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 250\r\n }, {\r\n Header: 'User',\r\n accessor: 'userId',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Requested Length (ft)',\r\n id: 'reqCutLength',\r\n accessor: row => Math.round(row.reqCutLength * 100) / 100,\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Actual Length (ft)',\r\n id: 'actualCutLength',\r\n accessor: row => Math.round(row.actualCutLength * 100) / 100,\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Status',\r\n id: 'status',\r\n accessor: row => cutStatus[row.status],\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 100\r\n }, {\r\n Header: 'Preset #',\r\n id: 'presetNumber',\r\n accessor: row => row.presetNumber,\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 100\r\n }\r\n ]}\r\n // COLUMNS END //////////////////\r\n // defaultSortid = {[{id: 'startTime'}]}\r\n defaultSorted = {[{id: 'startTime', desc: true}]}\r\n className=\"-highlight\"\r\n // showPagination={false}\r\n minRows={5}\r\n loading={this.props.loading}\r\n />\r\n
\r\n );\r\n }\r\n\r\n}","import { reportRequest, ReportHistory, OEEHistory } from './dataTypes';\r\nimport { httpRequest, BASE_URL, downloadFile } from './api-shared';\r\nimport moment from 'moment';\r\n\r\nconst REPORTS_URL = 'cutReports';\r\nconst CSV_EXPORT_URL = 'download';\r\n\r\nexport const getRecordsApi = (request: reportRequest): Promise => {\r\n // Get formatted URL\r\n const url: string = formatReportURL(`${BASE_URL}/${REPORTS_URL}`, request);\r\n return httpRequest(url,\r\n 'get'\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as ReportHistory[];\r\n } else {\r\n console.log(\"Error retrieving reports, \" + r.error!.message)\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\nexport const exportCSV = (reqData: reportRequest) => {\r\n // Can't download a file via AJAX so do some trickery\r\n let anchor = document.createElement(\"a\");\r\n const url: string = formatReportURL(`${BASE_URL}/${REPORTS_URL}/${CSV_EXPORT_URL}`, reqData);\r\n downloadFile(url\r\n ).then(blobFile => {\r\n // Create a dummy url that contains the file as a blob\r\n let objectUrl = window.URL.createObjectURL(blobFile);\r\n\r\n // Set our dummy url as the HRef in our hidden anchor tag\r\n anchor.href = objectUrl;\r\n // Set the downloaded file name\r\n anchor.download = `${formatDate(reqData.startDate)}.csv`;\r\n // Click the hidden anchor tag to download the blobFile\r\n anchor.click();\r\n\r\n // Destroy the dummy URL\r\n window.URL.revokeObjectURL(objectUrl);\r\n });\r\n}\r\n\r\nexport const getOEEApi = (request: reportRequest, setupTime: number): Promise => {\r\n // Get formatted URL\r\n var url: string = formatReportURL(`${BASE_URL}/${REPORTS_URL}/OEE`, request);\r\n url = `${url}${setupTime ? `&setup=${setupTime}` : ''}`;\r\n return httpRequest(url,\r\n 'get'\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as OEEHistory[];\r\n } else {\r\n console.log(\"Error retrieving OEE Data, \" + r.error!.message)\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\nconst formatReportURL = (rootUrl: string, data: reportRequest): string => {\r\n\r\n const start: string = `start=${formatDate(data.startDate)}`;\r\n const end: string = data.endDate ? `&end=${formatDate(data.endDate)}` : '';\r\n const system: string = data.systemId ? `&sysId=${data.systemId}` : '';\r\n const org: string = data.org ? `&org=${data.org}` : '';\r\n const shiftStartTime: string = data.shiftStartTime ? `&shiftStart=${formatTime(data.shiftStartTime)}` : '';\r\n const shiftEndTime: string = data.shiftEndTime ? `&shiftEnd=${formatTime(data.shiftEndTime)}` : '';\r\n\r\n return `${rootUrl}?${start}${end}${org}${system}${shiftStartTime}${shiftEndTime}`;\r\n}\r\n\r\n// Returns only the YYYY-MM-DD from the provided date\r\nconst formatDate = (date: Date): string => {\r\n return moment(date).format(\"YYYY-MM-DD\")\r\n}\r\n\r\nconst formatTime = (date: Date): string => {\r\n return moment(date).format(\"HH:mm\")\r\n}","import * as React from 'react';\r\nimport '../styles/Headers.css'\r\n\r\nexport interface DropdownSelectType {\r\n name: string;\r\n value: number;\r\n hidden?: boolean;\r\n}\r\n\r\nexport interface State {\r\n disabled: boolean;\r\n value: number;\r\n}\r\n\r\nexport interface Props {\r\n name: string;\r\n value: number;\r\n options: DropdownSelectType[];\r\n editValue: (name: string, value: number) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport class DropdownSelect extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: props.value,\r\n disabled: false\r\n };\r\n\r\n this.onChange = this.onChange.bind(this);\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n //\r\n this.setState({\r\n value: nextProps.value,\r\n disabled: false\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.name + ' '}\r\n \r\n {this.props.options.map(c =>\r\n )\r\n }\r\n \r\n
\r\n );\r\n }\r\n\r\n private onChange(e: React.SyntheticEvent) {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n // Temporarily set state to new value - this value will get overwritten when this component receives props\r\n // Also disable the component. When server receives change, props get updated and component is reenabled\r\n this.setState({\r\n // checked: e.currentTarget.checked,\r\n value: parsedNumber,\r\n disabled: true,\r\n });\r\n\r\n // Return the name and value\r\n this.props.editValue(this.props.options[\r\n this.props.options.findIndex(c => c.value === parsedNumber)\r\n ].name,\r\n parsedNumber);\r\n }\r\n }\r\n}","import { httpRequest, BASE_URL } from \"./api-shared\"\r\nimport { orgInfo, orgDetails, customerInfo } from \"./dataTypes\";\r\n\r\nconst ORG_URL = \"org\";\r\n\r\nexport const getAllOrgsApi = (): Promise => {\r\n let url: string = `${BASE_URL}/${ORG_URL}`\r\n return httpRequest(url,\r\n 'get'\r\n ).then(result => {\r\n if (result.success && result.data) {\r\n const data = result.data as orgDetails[];\r\n const orgs: orgInfo[] = data.map(d => {\r\n let o = new orgInfo();\r\n o.Init(d);\r\n return o;\r\n });\r\n return orgs;\r\n } else {\r\n console.log(`${result.error!.message} \\n ${result.error!.detail}`);\r\n throw result.error;\r\n }\r\n });\r\n};\r\n\r\nexport const addOrgApi = (orgInfo: orgInfo): Promise => {\r\n return httpRequest(`${BASE_URL}/${ORG_URL}`,\r\n 'post', orgInfo\r\n ).then(r => {\r\n if (r.success === true && r.data) {\r\n return r.data as orgInfo;\r\n } else {\r\n console.log(`Error Adding Org ${orgInfo.name} ${r.error!.message} ${r.error!.detail}`);\r\n throw (r.error);\r\n }\r\n });\r\n};\r\n\r\nexport const editOrgApi = (orgInfo: orgInfo): Promise => {\r\n return httpRequest(`${BASE_URL}/${ORG_URL}`,\r\n 'put', orgInfo\r\n ).then(res => {\r\n if (res.success === true && res.data) {\r\n return res.data as orgInfo;\r\n } else {\r\n console.log(res.error!.message);\r\n throw (res.error);\r\n }\r\n });\r\n};\r\n\r\nexport const getCustomersListApi = (): Promise => {\r\n return httpRequest(`${BASE_URL}/${ORG_URL}/customers`,\r\n 'get'\r\n ).then(result => {\r\n if (result.success) {\r\n return result.data as customerInfo[];\r\n } else {\r\n console.log(\"Error getting customers, \" + result.error!.message);\r\n throw (result.error);\r\n }\r\n });\r\n}\r\n\r\nexport const editCustomerApi = (customer: customerInfo): Promise => {\r\n return httpRequest(`${BASE_URL}/${ORG_URL}/customers`,\r\n 'put', customer\r\n ).then(result => {\r\n if (result.success) {\r\n return result.data as customerInfo;\r\n } else {\r\n console.log(\"Error updating customer, \" + result.error!.message);\r\n throw (result.error);\r\n }\r\n });\r\n};\r\n\r\nexport const addCustomerApi = (customer: customerInfo): Promise => {\r\n return httpRequest(`${BASE_URL}/${ORG_URL}/customers`,\r\n 'post', customer\r\n ).then(res => {\r\n if (res.success === true && res.data) {\r\n return res.data as customerInfo;\r\n } else {\r\n console.log(\"Error adding customer, \" + res.error!.message);\r\n throw (res.error);\r\n }\r\n });\r\n}\r\n","import * as React from 'react';\r\nimport { Winder, reportRequest, ReportHistory, customerInfo, DropdownList } from '../api/dataTypes';\r\nimport moment from 'moment';\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { DropdownSelect } from '../components/dropdownSelect';\r\nimport { getCustomersListApi } from '../api/api-organizations';\r\nimport { PromiseHelper } from '../classes/promiseHelper';\r\nimport TimePicker from 'rc-time-picker';\r\nimport 'rc-time-picker/assets/index.css';\r\nimport { getAllWindersApi } from '../api/api-winder';\r\nimport { STORAGE } from '../api/api-account';\r\n\r\nconst timeFormat = 'h:mm a';\r\nconst minuteStep = 5;\r\n\r\ninterface State {\r\n systemOptions: DropdownList[];\r\n customerOptions: DropdownList[];\r\n reportRequest: reportRequest;\r\n}\r\n\r\nexport interface Props {\r\n showShifts?: boolean;\r\n enableOwnerSelection?: boolean;\r\n getRecords: (reportRequest: reportRequest) => void;\r\n}\r\n\r\nexport class DataSelectionHeader extends React.Component {\r\n recordsPromise: PromiseHelper = new PromiseHelper();\r\n winderPromiseH: PromiseHelper = new PromiseHelper();\r\n custPromiseH: PromiseHelper = new PromiseHelper();\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n systemOptions: [{ name: \"All\", value: 0 }],\r\n customerOptions: [{ name: \"All\", value: 0 }],\r\n reportRequest: {\r\n startDate: moment(new Date(Date.now()))\r\n .subtract(7, \"days\")\r\n .toDate(),\r\n endDate: new Date(Date.now()),\r\n systemId: 0,\r\n org: 0,\r\n shiftStartTime: this.props.showShifts ? \r\n moment(localStorage.getItem(STORAGE.SHIFT_START)!\r\n || moment().hour(0).minute(0)).toDate() \r\n : null,\r\n shiftEndTime: this.props.showShifts ? \r\n moment(localStorage.getItem(STORAGE.SHIFT_END)!\r\n || moment().hour(0).minute(0)).toDate() \r\n : null\r\n \r\n },\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.recordsPromise.clearPromise();\r\n this.winderPromiseH.clearPromise();\r\n this.custPromiseH.clearPromise();\r\n }\r\n\r\n componentDidMount = () => {\r\n this.props.getRecords(this.state.reportRequest);\r\n this.getDropDownOptions();\r\n };\r\n\r\n getDropDownOptions = () => {\r\n\r\n this.winderPromiseH.newPromise(getAllWindersApi(), \r\n winders => {\r\n let sOptions: DropdownList[] = winders.map((v: Winder)=> {\r\n return { name: v.name, value: v.id };\r\n });\r\n sOptions.unshift({ name: \"All\", value: 0 });\r\n this.setState({\r\n systemOptions: sOptions\r\n });\r\n }, e => {\r\n console.log(`Error caught in page-cutRecords.getDropDownOptions().Systems ${e}`);\r\n alert('Error retrieving systems');\r\n });\r\n\r\n \r\n this.custPromiseH.newPromise(getCustomersListApi(), \r\n customers => {\r\n let cOptions = customers.map((c: customerInfo) => {\r\n return { name: c.name, value: c.id }; \r\n });\r\n\r\n // Add an 'ALL' selection to the beginning of the options\r\n cOptions.unshift({ name: \"All\", value: 0 });\r\n\r\n this.setState({\r\n customerOptions: cOptions,\r\n });\r\n },e => {\r\n console.log(`Error caught in page-cutRecords.getDropDownOptions().Systems ${e}`);\r\n alert('Error getting customers');\r\n }\r\n );\r\n\r\n if (this.props.showShifts === true) {\r\n let req = this.state.reportRequest;\r\n let start = localStorage.getItem(STORAGE.SHIFT_START);\r\n req.shiftStartTime = start !== null ? new Date(start) : req.shiftStartTime;\r\n let end = localStorage.getItem(STORAGE.SHIFT_END);\r\n req.shiftEndTime = end !== null ? new Date(end) : req.shiftEndTime;\r\n this.setState({\r\n reportRequest: req \r\n })\r\n }\r\n\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.enableOwnerSelection === true && \r\n
\r\n \r\n
}\r\n
\r\n \r\n
\r\n
\r\n
Start Date
\r\n \r\n {/*
*/}\r\n {/*
*/}\r\n
End Date
\r\n \r\n
\r\n {this.props.showShifts === true &&\r\n
\r\n
Shift Start Time
\r\n \r\n {/*
*/}\r\n {/* } */}\r\n {/* {this.props.showShifts === true && */}\r\n {/*
*/}\r\n
Shift End Time
\r\n \r\n
\r\n }\r\n
\r\n );\r\n }\r\n\r\n private sendRequest = () => {this.props.getRecords(this.state.reportRequest)}\r\n\r\n private editOrg = (name: string, value: number) => {\r\n let nextRequest = this.state.reportRequest;\r\n nextRequest.org = value;\r\n this.setState({ reportRequest: nextRequest });\r\n this.props.getRecords(nextRequest);\r\n };\r\n\r\n private editSystem = (name: string, value: number) => {\r\n let nextRequest = this.state.reportRequest;\r\n nextRequest.systemId = value;\r\n this.setState({ reportRequest: nextRequest });\r\n this.props.getRecords(nextRequest);\r\n };\r\n\r\n private updateStartDate = (e: Date) => {\r\n let nextRequest = this.state.reportRequest;\r\n nextRequest.startDate = moment(e).toDate();\r\n this.setState({ reportRequest: nextRequest });\r\n this.props.getRecords(nextRequest);\r\n };\r\n\r\n private updateEndDate = (e: Date) => {\r\n let nextRequest = this.state.reportRequest;\r\n nextRequest.endDate = moment(e).toDate();\r\n this.setState({ reportRequest: nextRequest });\r\n this.props.getRecords(nextRequest);\r\n };\r\n \r\n private updateShiftStart = (e: moment.Moment) => {\r\n let date = moment().hour(0).minute(0);\r\n if (e !== null) {\r\n date = e;\r\n }\r\n let nextRequest = this.state.reportRequest;\r\n nextRequest.shiftStartTime = moment(date).toDate();\r\n this.setState({ reportRequest: nextRequest });\r\n localStorage.setItem(STORAGE.SHIFT_START, moment(date).toString());\r\n // this.props.getRecords(nextRequest);\r\n };\r\n\r\n private updateShiftEnd = (e: moment.Moment) => {\r\n let date = moment().hour(0).minute(0);\r\n if (e !== null) {\r\n date = e;\r\n }\r\n let nextRequest = this.state.reportRequest;\r\n nextRequest.shiftEndTime = moment(date).toDate();\r\n this.setState({ reportRequest: nextRequest });\r\n localStorage.setItem(STORAGE.SHIFT_END, moment(date).toString());\r\n // this.props.getRecords(nextRequest);\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { RouteComponentProps, Redirect } from \"react-router-dom\";\r\nimport { Fragment } from 'react';\r\nimport { Header } from '../components/header';\r\nimport { reportRequest, ReportHistory, DATA_REFRESH_TIME } from '../api/dataTypes';\r\nimport moment from 'moment';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { CutRecordsTable } from '../components/table-cutRecords';\r\nimport { exportCSV, getRecordsApi } from '../api/api-cutRecords';\r\nimport { PromiseHelper } from '../classes/promiseHelper';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faDownload } from '@fortawesome/free-solid-svg-icons';\r\nimport { DataSelectionHeader } from '../components/dataSelectionHeader';\r\nimport { isDistributorRole } from '../api/api-account';\r\n\r\ninterface State {\r\n cutRecordsData: ReportHistory[] | null;\r\n message: string;\r\n reportRequest: reportRequest;\r\n}\r\n\r\nexport interface Props { }\r\n\r\nexport class CutRecordsPage extends React.Component {\r\n recordsPromise: PromiseHelper = new PromiseHelper();\r\n dataTimerId: number | null = null;\r\n\r\n constructor(props: RouteComponentProps) {\r\n super(props);\r\n\r\n this.state = {\r\n reportRequest: {\r\n startDate: moment(new Date(Date.now()))\r\n .subtract(7, \"days\")\r\n .toDate(),\r\n endDate: new Date(Date.now()),\r\n systemId: 0,\r\n org: 0,\r\n },\r\n cutRecordsData: null,\r\n message: 'loading...'\r\n }\r\n }\r\n \r\n componentWillUnmount() {\r\n this.recordsPromise.clearPromise();\r\n if (this.dataTimerId !== null) {\r\n clearInterval(this.dataTimerId);\r\n this.dataTimerId = null;\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n this.getRecords(this.state.reportRequest); \r\n this.dataTimerId = window.setInterval(this.getRecords, DATA_REFRESH_TIME);\r\n\r\n };\r\n\r\n render() {\r\n // This component is called from /, /index.html, and /reports. TODO: Is this the landing page or spool winders?\r\n // To get the 'tab' on the UI highlight properly redirect the other routes to /reports\r\n if (this.props.location.pathname !== \"/cutRecords\") {\r\n return ;\r\n } else {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n Cut Records\r\n
\r\n\r\n
\r\n exportCSV(this.state.reportRequest)}\r\n >\r\n \r\n Export to CSV\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n )\r\n }\r\n }\r\n\r\n \r\n\r\n private getRecords = (request: reportRequest | null) => {\r\n this.recordsPromise!.newPromise(\r\n getRecordsApi(request || this.state.reportRequest),\r\n result => {\r\n this.setState({\r\n reportRequest: request || this.state.reportRequest,\r\n cutRecordsData: result,\r\n message: ''\r\n });\r\n },\r\n e => {\r\n console.log(`Error caught in page-cutRecords.getRecords(). ${e!.message}`);\r\n alert('Error getting cut records');\r\n }\r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport { DropdownList, orgInfo, orgTypes, GetOrgTypeDropdownList } from \"../api/dataTypes\";\r\nimport { hasDistributorRole } from \"../api/api-account\";\r\n\r\ninterface State {\r\n org: orgInfo;\r\n distIndex: number;\r\n typeOptions: DropdownList[];\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n addOrg: (addUser: orgInfo, orgIndex: number) => void;\r\n distributorOptions: DropdownList[],\r\n}\r\n\r\nexport class AddOrgModal extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n org: new orgInfo(),\r\n distIndex: -1,\r\n typeOptions: GetOrgTypeDropdownList(),\r\n };\r\n }\r\n\r\n\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Type
\r\n
\r\n \r\n {this.state.typeOptions.map(c =>\r\n )\r\n }\r\n \r\n
\r\n
\r\n {this.state.org.orgType === orgTypes.Customer\r\n && !hasDistributorRole() &&
\r\n
Distributor
\r\n
\r\n \r\n {this.props.distributorOptions.map(c =>\r\n )\r\n }\r\n \r\n
\r\n
}\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private onInputChange = (\r\n e:\r\n | React.SyntheticEvent\r\n ) => {\r\n let newOrg = this.state.org;\r\n newOrg[e.currentTarget.name] = e.currentTarget.value;\r\n this.setState({\r\n org: newOrg\r\n });\r\n }\r\n\r\n private confirmButtonPressed = () => {\r\n let newOrg=this.state.org;\r\n newOrg.id=0;//because id is required\r\n this.props.addOrg(newOrg, this.state.distIndex\r\n );\r\n }\r\n\r\n private cancelButtonPressed = () => {\r\n this.setState({\r\n org: new orgInfo(),\r\n });\r\n this.props.closeModal();\r\n }\r\n\r\n private onTypeChange = (e: React.SyntheticEvent) => {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n let newOrg: orgInfo = this.state.org;\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n newOrg.orgType = parsedNumber;\r\n this.setState({\r\n org: newOrg\r\n });\r\n }\r\n }\r\n\r\n private onDistChange = (e: React.SyntheticEvent) => {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n this.setState({\r\n distIndex: parsedNumber\r\n });\r\n }\r\n }\r\n}","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport { DropdownList, orgInfo, orgTypes, GetOrgTypeDropdownList } from \"../api/dataTypes\";\r\nimport { hasDistributorRole } from \"../api/api-account\";\r\n\r\ninterface State {\r\n org: orgInfo;\r\n blockUpdates: boolean;\r\n distIndex: number;\r\n typeOptions: DropdownList[];\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n editOrg: (addUser: orgInfo, orgIndex: number) => void;\r\n distributorOptions: DropdownList[],\r\n distIndex: number,\r\n org: orgInfo,\r\n disableDropdowns?:boolean,\r\n}\r\n\r\nexport class EditOrgModal extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n org: new orgInfo(),\r\n blockUpdates: false,\r\n distIndex: -1,\r\n typeOptions: GetOrgTypeDropdownList(),\r\n };\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n if (!nextProps.isModalOpen || (nextProps.org.name !== \"\")) {\r\n this.setState({\r\n org: JSON.parse(JSON.stringify(nextProps.org)),\r\n distIndex: nextProps.distIndex\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Type
\r\n
\r\n \r\n {orgTypes[this.state.org.orgType]}\r\n \r\n {/*\r\n {this.state.typeOptions.map(c =>\r\n )\r\n }\r\n */}\r\n
\r\n
\r\n {this.state.org.orgType === orgTypes.Customer\r\n && !hasDistributorRole() &&
\r\n
Distributor
\r\n
\r\n \r\n {this.props.distributorOptions.map(c =>\r\n )\r\n }\r\n \r\n
\r\n
}\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private onInputChange = (\r\n e:\r\n | React.SyntheticEvent\r\n | React.SyntheticEvent\r\n ) => {\r\n let newOrg = this.state.org;\r\n newOrg[e.currentTarget.name] = e.currentTarget.value;\r\n this.setState({\r\n org: newOrg\r\n });\r\n }\r\n\r\n private confirmButtonPressed = () => {\r\n // Call change password method that was passed in\r\n this.props.editOrg(this.state.org, this.state.distIndex\r\n );\r\n }\r\n\r\n private cancelButtonPressed = () => {\r\n this.setState({\r\n org: new orgInfo(),\r\n });\r\n this.props.closeModal();\r\n }\r\n\r\n private onFocus = (e: React.SyntheticEvent | React.SyntheticEvent) => {\r\n this.setState({\r\n blockUpdates: true\r\n });\r\n\r\n }\r\n // private onTypeChange = (e: React.SyntheticEvent) => {\r\n // // First try to parse the value that was sent - if it fails, do nothing\r\n // let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n // let newOrg: orgInfo = this.state.org;\r\n // if (!isNaN(parsedNumber)) {\r\n // // Element in the dropdown has been selected\r\n // newOrg.orgType = parsedNumber;\r\n // this.setState({\r\n // org: newOrg\r\n // });\r\n // }\r\n // }\r\n\r\n private onDistChange = (e: React.SyntheticEvent) => {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n this.setState({\r\n distIndex: parsedNumber\r\n });\r\n }\r\n }\r\n}","import * as React from \"react\";\r\nimport \"react-table/react-table.css\";\r\nimport * as TableStyles from \"../styles/TableFormats\";\r\nimport { Header } from \"../components/header\";\r\nimport { orgInfo, orgTypes, DropdownList, userInfo, getDefaultUserInfo } from \"../api/dataTypes\";\r\nimport { getAllOrgsApi, addOrgApi, editOrgApi } from \"../api/api-organizations\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faPencilAlt } from \"@fortawesome/free-solid-svg-icons\";\r\nimport ReactTable from \"react-table\";\r\nimport matchSorter from 'match-sorter';\r\nimport { AddOrgModal } from \"../modals/modal-AddOrg\";\r\nimport { EditOrgModal } from \"../modals/modal-EditOrg\";\r\nimport { PromiseHelper } from \"../classes/promiseHelper\";\r\nimport { hasAdminRole, hasDistributorRole, getCurrentUser} from \"../api/api-account\";\r\n// import { isCustomerRole, isOwnerRole } from \"src/api/auth-api\";\r\n\r\n\r\ninterface State {\r\n // selected: boolean;\r\n orgs: orgInfo[];\r\n addCustModalOpen: boolean;\r\n editCustModalOpen: boolean;\r\n // okToAddCustomer: boolean;\r\n}\r\n\r\nexport interface Props {\r\n}\r\n\r\nexport class OrganizationsPage extends React.Component {\r\n private editData: orgInfo = new orgInfo();\r\n private distOptions: DropdownList[] = [];\r\n private currentUser:userInfo = getDefaultUserInfo();\r\n\r\n getPromise: PromiseHelper = new PromiseHelper();\r\n editPromise: PromiseHelper = new PromiseHelper();\r\n addPromise: PromiseHelper = new PromiseHelper();\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n //selected: false,\r\n orgs: [],\r\n addCustModalOpen: false,\r\n editCustModalOpen: false,\r\n };\r\n }\r\n componentDidMount() {\r\n this.getOrgs();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.getPromise.clearPromise();\r\n this.addPromise.clearPromise();\r\n this.editPromise.clearPromise();\r\n }\r\n\r\n render() {\r\n let isCustomer = !(hasDistributorRole()||hasAdminRole())\r\n return (\r\n \r\n
\r\n
\r\n
Organizations
\r\n
\r\n \r\n {!isCustomer&&
\r\n {\r\n this.setState({ addCustModalOpen: true });\r\n }\r\n }\r\n >\r\n + Add Org\r\n \r\n
}\r\n {\r\n this.setState({ addCustModalOpen: false })\r\n this.getOrgs();\r\n }}\r\n addOrg={this.AddOrg}\r\n distributorOptions={this.distOptions}\r\n />\r\n\r\n {\r\n this.setState({ editCustModalOpen: false })\r\n this.getOrgs();\r\n }}\r\n editOrg={this.EditOrg}\r\n distributorOptions={this.distOptions}\r\n distIndex={this.state.orgs.findIndex(x => x.orgType === orgTypes.Distributor && x.id === this.editData.distId)}\r\n disableDropdowns={!(hasAdminRole()||hasDistributorRole())}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n showPagination={this.state.orgs.length > 20}\r\n minRows={10}\r\n // COLUMNS ////////////////////////////////\r\n columns={[\r\n {\r\n Header: \"Name\",\r\n accessor: \"name\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 300\r\n },\r\n {\r\n Header: \"Type\",\r\n accessor: \"test\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n },\r\n {\r\n Header: \"\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n width: 90,\r\n sortable: false,\r\n filterable: false,\r\n show: true,\r\n Cell: row => (\r\n
\r\n this.handleEdit(row.original)}\r\n >\r\n \r\n \r\n {/* this.handleDelete(row.original)}\r\n >\r\n \r\n */}\r\n
\r\n )\r\n }\r\n ]}\r\n // COLUMNS END //////////////////\r\n className=\"-highlight\"\r\n />\r\n
\r\n \r\n );\r\n }\r\n\r\n private getOrgs = () => {\r\n //if(hasAdminRole()||hasDistributorRole()){\r\n getCurrentUser().then(res=>{this.currentUser=res!});\r\n this.getPromise!.newPromise(\r\n getAllOrgsApi(), result => {\r\n this.setState({ orgs: result });\r\n this.distDropdownOptions();\r\n },\r\n e => {\r\n console.log(`Error caught in page-organizations.GetOrgs(). ${e!.message}`);\r\n alert('Error getting Orgs');\r\n }\r\n )\r\n // }\r\n // else{\r\n // getCurrentUser().then(res=>{\r\n // let customerOrg:orgInfo =new orgInfo();\r\n // customerOrg.Init({name:res!.customerName!, id:res!.customerId, orgType:orgTypes.Customer, distId:res!.distributorId});\r\n // let distOrg:orgInfo = new orgInfo();\r\n // distOrg.Init({name:res!.distributorName!, id:res!.distributorId, orgType:orgTypes.Distributor, distId:null});\r\n // this.setState({orgs:[customerOrg]});//, distOrg]});\r\n // this.distOptions.push({name:distOrg.name,value:distOrg.id!})\r\n // //this.distDropdownOptions();\r\n // })\r\n // }\r\n }\r\n\r\n private handleEdit = (org: orgInfo) => {\r\n this.editData = org;\r\n this.setState({ editCustModalOpen: true })\r\n }\r\n\r\n private distDropdownOptions = () => {\r\n let distributors: DropdownList[] = this.state.orgs.filter(\r\n x => x.orgType === orgTypes.Distributor).map(\r\n c => {\r\n return { name: c.name, value: this.state.orgs.indexOf(c) };\r\n })\r\n distributors.push({ name: \"Select....\", value: -1 })\r\n this.distOptions = distributors;\r\n }\r\n\r\n private AddOrg = (org: orgInfo, distIndex: number) => {\r\n let newOrg = org;\r\n if(hasDistributorRole()&&!hasAdminRole()){\r\n newOrg.distId=this.currentUser.distributorId;\r\n }\r\n else if (distIndex >= 0) {\r\n let distId = this.state.orgs[distIndex].id;\r\n newOrg.distId = distId;\r\n }\r\n this.addPromise!.newPromise(\r\n addOrgApi(newOrg), result => {\r\n this.setState({ addCustModalOpen: false })\r\n this.getOrgs();\r\n },\r\n e => {\r\n console.log(`Error caught in page-organizations.AddOrg(). ${e!.message}`);\r\n alert('Error adding Org');\r\n }\r\n )\r\n\r\n }\r\n\r\n private EditOrg = (org: orgInfo, distIndex: number) => {\r\n let newOrg = org;\r\n if(hasDistributorRole()&&!hasAdminRole()){\r\n newOrg.distId=this.currentUser.distributorId;\r\n alert(this.currentUser.distributorId)\r\n }\r\n else if (distIndex >= 0) {\r\n let distId = this.state.orgs[distIndex].id;\r\n newOrg.distId = distId;\r\n }\r\n this.editPromise!.newPromise(\r\n editOrgApi(newOrg), result => {\r\n this.setState({ editCustModalOpen: false })\r\n this.getOrgs();\r\n },\r\n e => {\r\n console.log(`Error caught in page-organizations.EditOrg(). ${e!.message}`);\r\n alert('Error editing Org');\r\n }\r\n )\r\n\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { OEEHistory } from \"../api/dataTypes\";\r\nimport ReactTable from \"react-table\";\r\nimport 'react-table/react-table.css'\r\nimport * as TableStyles from \"../styles/TableFormats\";\r\nimport \"../styles/Tables.css\";\r\nimport moment from 'moment';\r\nimport matchSorter from 'match-sorter';\r\n\r\ninterface State {\r\n\r\n}\r\n\r\nexport interface Props {\r\n records: OEEHistory[] | null;\r\n loading: boolean;\r\n}\r\n\r\nexport class OEERecordsTable extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n Daily OEE Reports:\r\n
\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n\r\n // COLUMNS ////////////////////////////////\r\n columns={[{\r\n Header: 'Run Time',\r\n accessor: 'runTime',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Idle Time',\r\n accessor: 'idleTime',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Utilization',\r\n id: 'utilization',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n accessor: (a: OEEHistory) => {\r\n return (`${(100 * a.runTime / (a.runTime + a.idleTime)).toFixed()}%`)\r\n }\r\n }, {\r\n Header: 'Cycle Count',\r\n accessor: 'cycleCount',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Cut Length (ft)',\r\n id: 'cutLengthTotal',\r\n accessor: row => Math.round(row.cutLengthTotal * 100) / 100,\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n // width: 300\r\n }, {\r\n Header: 'Start Time',\r\n id: 'startTime',\r\n accessor: row => moment(row.startTime).format('x'),\r\n Cell: row => (moment(row.original.startTime).format(' hh:mm:ss a, MM/DD/YY')),\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 225,\r\n }, {\r\n Header: 'End Time',\r\n id: 'endTime',\r\n accessor: row => moment(row.endTime).format('x'),\r\n Cell: row => (moment(row.original.endTime).format(' hh:mm:ss a, MM/DD/YY')),\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n width: 225\r\n },\r\n ]}\r\n // COLUMNS END //////////////////\r\n defaultSorted={[{ id: 'startTime', desc: true }]}\r\n className=\"-highlight\"\r\n // showPagination={false}\r\n minRows={10}\r\n loading={this.props.loading}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n}","import * as React from 'react';\r\nimport * as Victory from 'victory';\r\n// import '../styles/DataGraph.css';\r\nimport { OEEHistory } from '../api/dataTypes';\r\n\r\n// Create constants for graph axis scaling\r\nconst RUNTIME_INDEX = 0;\r\nconst CUT_LENGTH_INDEX = 1;\r\nconst CYCLE_COUNT_INDEX = 2;\r\n\r\nconst AXIS_OFFSET_BASELINE = 40;\r\nconst AXIS_OFFSET = 30;\r\n\r\nconst tickValuesArray = [0, 0.2, 0.4, 0.6, 0.8, 1, 1.2];\r\nconst tickScaleFactor = 5;\r\n\r\ninterface State {\r\n maxValues: number[];\r\n runTimeUnits: string;\r\n cutLengthUnits: string;\r\n cycleCountUnits: string;\r\n}\r\n\r\nexport interface Props {\r\n data: OEEHistory[] | null;\r\n startDate: Date;\r\n endDate: Date;\r\n}\r\n\r\nlet days = [\r\n 'Sunday',\r\n 'Monday',\r\n 'Tuesday',\r\n 'Wednesday',\r\n 'Thursday',\r\n 'Friday',\r\n 'Saturday'\r\n];\r\n\r\nexport class OEEDataGraph extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n maxValues: this.computeMaxima(props.data),\r\n runTimeUnits: \"min\",\r\n cycleCountUnits: \"cycles\",\r\n cutLengthUnits: \"feet\"\r\n };\r\n\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n this.setState({\r\n maxValues: this.computeMaxima(nextProps.data),\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.data === null || this.props.data.length <= 0 ? (\r\n
\r\n
\r\n No data to display\r\n
\r\n
\r\n ) : ( this.props.data.length > 1 &&\r\n d.y))),\r\n // Math.max(0.01, Math.max(...this.state.data.map(d => d.y)))]}}\r\n domainPadding={{ y: 10 }}\r\n scale={{ x: 'time', y: 'linear' }}\r\n width={400}\r\n height={200}\r\n // containerComponent={\r\n // d.drawLabel ?\r\n // d.y.toFixed(3) + ' ' + d.units +\r\n // '\\n' +\r\n // this.getLabelDateString(d.x)\r\n // :\r\n // ''\r\n // }\r\n // labelComponent={\r\n // \r\n // }\r\n // />\r\n // }\r\n >\r\n \r\n ({\r\n x: new Date(d.endTime ),\r\n y: d.runTime\r\n }))\r\n }\r\n style={{ data: { stroke: '#029c02', strokeWidth: .75 } }}\r\n y={(d) => d.y / this.state.maxValues[RUNTIME_INDEX]}\r\n interpolation=\"linear\"\r\n />\r\n ({\r\n x: new Date(d.endTime),\r\n y: d.runTime,\r\n drawLabel: true,\r\n units: this.state.runTimeUnits\r\n }))\r\n }\r\n y={(d) => d.y / this.state.maxValues[RUNTIME_INDEX]}\r\n style={{ data: { fill: '#029c02' } }}\r\n size={1}\r\n />\r\n \r\n ({\r\n x: new Date(d.endTime),\r\n y: d.runTime,\r\n drawLabel: true,\r\n units: this.state.runTimeUnits\r\n })\r\n )}\r\n style={{\r\n data: { fill: '#ffffff', stroke: '#029c02', strokeWidth: 1 }\r\n }}\r\n size={2.5}\r\n y={(d) => d.y / this.state.maxValues[RUNTIME_INDEX]}\r\n />\r\n \r\n\r\n \r\n ({ x: new Date(d.endTime), y: d.cutLengthTotal }))\r\n }\r\n style={{ data: { stroke: '#355590', strokeWidth: .75 } }}\r\n y={(d) => d.y / this.state.maxValues[CUT_LENGTH_INDEX]}\r\n interpolation=\"linear\"\r\n />\r\n ({\r\n x: new Date(d.endTime),\r\n y: d.cutLengthTotal,\r\n drawLabel: true,\r\n units: this.state.cutLengthUnits\r\n }))\r\n }\r\n y={(d) => d.y / this.state.maxValues[CUT_LENGTH_INDEX]}\r\n style={{ data: { fill: '#355590' } }}\r\n size={1}\r\n />\r\n \r\n ({\r\n x: new Date(d.endTime),\r\n y: d.cutLengthTotal,\r\n drawLabel: true,\r\n units: this.state.cutLengthUnits\r\n })\r\n )}\r\n style={{\r\n data: { fill: '#ffffff', stroke: '#355590', strokeWidth: 1 }\r\n }}\r\n size={2.5}\r\n y={(d) => d.y / this.state.maxValues[CUT_LENGTH_INDEX]}\r\n />\r\n \r\n\r\n \r\n ({ x: new Date(d.endTime), y: d.cycleCount }))\r\n }\r\n style={{ data: { stroke: '#f15a24', strokeWidth: .75 } }}\r\n y={(d) => d.y / this.state.maxValues[CYCLE_COUNT_INDEX]}\r\n interpolation=\"linear\"\r\n />\r\n ({\r\n x: new Date(d.endTime),\r\n y: d.cycleCount,\r\n drawLabel: true,\r\n units: this.state.cycleCountUnits\r\n }))\r\n }\r\n y={(d) => d.y / this.state.maxValues[CYCLE_COUNT_INDEX]}\r\n style={{ data: { fill: '#f15a24' } }}\r\n size={1}\r\n />\r\n \r\n ({\r\n x: new Date(d.endTime),\r\n y: d.cycleCount,\r\n drawLabel: true,\r\n units: this.state.cycleCountUnits\r\n })\r\n )}\r\n style={{\r\n data: { fill: '#ffffff', stroke: '#f15a24', strokeWidth: 1 }\r\n }}\r\n size={2.5}\r\n y={(d) => d.y / this.state.maxValues[CYCLE_COUNT_INDEX]}\r\n />\r\n \r\n\r\n this.getTickDateString(t, ticks)}\r\n tickLabelComponent={}\r\n axisLabelComponent={}\r\n />\r\n }\r\n axisLabelComponent={}\r\n tickFormat={(t) => (t * this.state.maxValues[RUNTIME_INDEX])}\r\n tickValues={tickValuesArray}\r\n orientation={'left'}\r\n offsetX={AXIS_OFFSET_BASELINE}\r\n />\r\n }\r\n axisLabelComponent={}\r\n tickFormat={(t) => (t * this.state.maxValues[RUNTIME_INDEX])}\r\n tickValues={tickValuesArray}\r\n orientation={'left'}\r\n offsetX={AXIS_OFFSET_BASELINE + AXIS_OFFSET}\r\n />\r\n }\r\n axisLabelComponent={}\r\n tickFormat={(t) => (t * this.state.maxValues[CYCLE_COUNT_INDEX])}\r\n tickValues={tickValuesArray}\r\n orientation={'right'}\r\n offsetX={AXIS_OFFSET_BASELINE}\r\n />\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n private getTickDateString = (endTime: any, ticks: any[]) => {\r\n // Find the difference between two tick marks\r\n var tickDifference = ticks[1] - ticks[0];\r\n\r\n var date = new Date(endTime);\r\n var hours = date.getHours();\r\n var minutes = date.getMinutes();\r\n var day = date.getDate();\r\n\r\n // Return one of two date formats. Longer term data on left, short term on right\r\n // mm/dd/yyyy hh:mm AM/PM\r\n // day day\r\n return (tickDifference > 50000000 ? // 50000000 milliseconds, about 14 hours\r\n (date.getMonth() + 1) +\r\n '/' +\r\n (day < 10 ? '0' + day : day) +\r\n '/' +\r\n date.getFullYear() +\r\n '\\n' +\r\n days[date.getDay()]\r\n :\r\n (hours > 12 ? hours - 12 : (hours === 0 ? hours + 12 : hours)) +\r\n ':' +\r\n (minutes < 10 ? '0' + minutes : minutes) +\r\n ' ' +\r\n (hours > 11 ? 'PM' : 'AM') +\r\n '\\n' +\r\n days[date.getDay()]\r\n );\r\n }\r\n\r\n // private getLabelDateString = (endTime: any) => {\r\n // // Convert millisecond endTime to friendly date string\r\n // var date = new Date(endTime);\r\n // var hours = date.getHours();\r\n // var minutes = date.getMinutes();\r\n // var seconds = date.getSeconds();\r\n // var day = date.getDate();\r\n\r\n // return (\r\n // (hours > 12 ? hours - 12 : (hours === 0 ? hours + 12 : hours)) +\r\n // ':' +\r\n // (minutes < 10 ? '0' + minutes : minutes) +\r\n // ':' +\r\n // (seconds < 10 ? '0' + seconds : seconds) +\r\n // ' ' +\r\n // (hours > 11 ? 'PM' : 'AM') +\r\n // ' ' +\r\n // (date.getMonth() + 1) +\r\n // '/' +\r\n // (day < 10 ? '0' + day : day) +\r\n // '/' +\r\n // date.getFullYear()\r\n // );\r\n // }\r\n\r\n private computeMaxima = (data: OEEHistory[] | null ): number[] => {\r\n if (data !== null) {\r\n let maxima: number[] = []; \r\n let runTimeMax = Math.max(...data.map(d => Math.abs(d.runTime)))\r\n\r\n maxima.push(Math.max(tickScaleFactor * Math.round(runTimeMax / tickScaleFactor),1));\r\n maxima.push(Math.max(\r\n tickScaleFactor * Math.round(Math.max(...data.map(d => Math.abs(d.cutLengthTotal))) / tickScaleFactor),\r\n 1)); \r\n maxima.push(Math.max(\r\n tickScaleFactor * Math.round(Math.max(...data.map(d => Math.abs(d.cycleCount))) / tickScaleFactor),\r\n 1)); \r\n\r\n if (runTimeMax > 60) {\r\n this.setState({\r\n runTimeUnits: runTimeMax < 1440 ? \"hours\" : \"days\"\r\n });\r\n }\r\n\r\n return maxima;\r\n } else {\r\n return [10, 10, 10, 10]\r\n }\r\n }\r\n\r\n}","import * as React from 'react';\r\nimport { OEEHistory } from '../api/dataTypes';\r\nimport { VictoryPie } from 'victory';\r\nimport { OEEDataGraph } from './oeeDataGraph';\r\n\r\ninterface status {\r\n value: number,\r\n units: string,\r\n}\r\n\r\ninterface State {\r\n runTimeTotal: status,\r\n idleTimeTotal: status,\r\n cutLengthTotal: number,\r\n cycleCountTotal: number,\r\n utilizationTotal: number,\r\n}\r\n\r\nexport interface Props {\r\n records: OEEHistory[] | null,\r\n startDate: Date;\r\n endDate: Date;\r\n}\r\n\r\nexport class OEESummary extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n runTimeTotal: { value: 0, units: \"min\" },\r\n idleTimeTotal: { value: 0, units: \"min\" },\r\n cutLengthTotal: 0,\r\n cycleCountTotal: 0,\r\n utilizationTotal: 0,\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n if (prevProps !== this.props ) {\r\n this.updateTotals();\r\n }\r\n }\r\n\r\n updateTotals = () => {\r\n if (this.props.records !== null) {\r\n let totalRunTime = Math.round(this.props.records.reduce((totalRunTime, record) => totalRunTime + record.runTime, 0) * 100) / 100;\r\n let totalIdleTime = Math.round(this.props.records.reduce((totalIdleTime, record) => totalIdleTime + record.idleTime, 0) * 100) / 100;\r\n\r\n let runTimeStat = { value: totalRunTime, units: \"minutes\" };\r\n let idleTimeStat = { value: totalIdleTime, units: \"minutes\" };\r\n\r\n if (totalRunTime > 60 && totalRunTime <= 1440) {\r\n runTimeStat = { value: Math.round(totalRunTime * 100 / 60) / 100, units: \"hours\" };\r\n } else if (totalRunTime > 1440) {\r\n runTimeStat = { value: Math.round(totalRunTime * 100 / 60) / 1440, units: \"days\" };\r\n }\r\n if (totalIdleTime > 60 && totalRunTime <= 1440) {\r\n idleTimeStat = { value: Math.round(totalIdleTime * 100 / 60) / 100, units: \"hours\" };\r\n } else if (totalIdleTime > 1440) {\r\n idleTimeStat = { value: Math.round(totalIdleTime * 100 / 60) / 1440, units: \"days\" };\r\n }\r\n \r\n this.setState({\r\n runTimeTotal: runTimeStat,\r\n idleTimeTotal: idleTimeStat,\r\n cycleCountTotal: this.props.records.reduce((totalCount, record) => totalCount + record.cycleCount, 0),\r\n utilizationTotal: Math.round(100 * totalRunTime / (totalIdleTime + totalRunTime)),\r\n cutLengthTotal: Math.round( 100 * this.props.records.reduce((totalLength, record) => totalLength + record.cutLengthTotal, 0)) / 100,\r\n })\r\n } else {\r\n this.setState({\r\n runTimeTotal: { value: 0, units: \"min\" },\r\n idleTimeTotal: { value: 0, units: \"min\" },\r\n cutLengthTotal: 0,\r\n cycleCountTotal: 0,\r\n utilizationTotal: 0,\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.records !== null && \r\n
\r\n
\r\n
\r\n OEE Summary Over Selected Date Range:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n Run Time Total:\r\n
\r\n
\r\n
\r\n \r\n {this.state.runTimeTotal.value}\r\n \r\n \r\n {this.state.runTimeTotal.units}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Idle Time Total:\r\n
\r\n
\r\n
\r\n \r\n {this.state.idleTimeTotal.value}\r\n \r\n \r\n {this.state.idleTimeTotal.units}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Cycle Count Total:\r\n
\r\n
\r\n
\r\n \r\n {this.state.cycleCountTotal}\r\n \r\n \r\n cycles\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Total Length Cut:\r\n
\r\n
\r\n
\r\n \r\n {this.state.cutLengthTotal}\r\n \r\n \r\n feet\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {`${isNaN(this.state.utilizationTotal)? 0 : this.state.utilizationTotal}% Utilization`}\r\n
\r\n
\r\n
\r\n
}\r\n
\r\n \r\n
\r\n
\r\n\r\n );\r\n }\r\n}","import * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport { Header } from '../components/header';\r\nimport { reportRequest, OEEHistory, DATA_REFRESH_TIME } from '../api/dataTypes';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { PromiseHelper } from '../classes/promiseHelper';\r\nimport { OEERecordsTable } from '../components/table-oeeRecords';\r\nimport { getOEEApi } from '../api/api-cutRecords';\r\nimport { OEESummary } from '../components/oeeSummaryComponent';\r\nimport { DataSelectionHeader } from '../components/dataSelectionHeader';\r\nimport moment from 'moment';\r\nimport { STORAGE } from '../api/api-account';\r\n\r\ninterface State {\r\n oeeRecordsData: OEEHistory[] | null;\r\n reportRequest: reportRequest;\r\n message: string;\r\n setupTime: number;\r\n}\r\n\r\nexport interface Props { }\r\n\r\nexport class OEEPage extends React.Component {\r\n recordsPromise: PromiseHelper = new PromiseHelper();\r\n dataTimerId: number | null = null;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n oeeRecordsData: null,\r\n reportRequest: {\r\n startDate: moment(new Date(Date.now()))\r\n .subtract(7, \"days\")\r\n .toDate(),\r\n endDate: new Date(Date.now()),\r\n systemId: 0,\r\n org: 0,\r\n shiftStartTime: moment(localStorage.getItem(STORAGE.SHIFT_START)! || moment().hour(23).minute(55)).toDate(),\r\n shiftEndTime: moment(localStorage.getItem(STORAGE.SHIFT_END)! || moment().hour(23).minute(55)).toDate() \r\n },\r\n setupTime: parseInt(localStorage.getItem(STORAGE.SETUP_TIME)!, 10) || 0,\r\n message: 'loading...'\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.recordsPromise.clearPromise();\r\n if (this.dataTimerId !== null) {\r\n window.clearInterval(this.dataTimerId);\r\n this.dataTimerId = null;\r\n } \r\n }\r\n\r\n componentDidMount=()=>{\r\n this.getRecords(this.state.reportRequest);\r\n this.dataTimerId = window.setInterval(this.getRecords, DATA_REFRESH_TIME);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n Utilization Records\r\n
\r\n
\r\n \r\n {/* TODO: Grouping: Day, week, month? Currently per day */}\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n Adjust Setup Time per Cut (min): \r\n \r\n
\r\n this.handleSetupTimeChange(e)}\r\n /> \r\n this.getRecords(this.state.reportRequest)}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n )\r\n }\r\n\r\n handleSetupTimeChange = (e: React.ChangeEvent) => {\r\n let val: number = parseInt(e.target.value, 10);\r\n localStorage.setItem(STORAGE.SETUP_TIME, e.target.value);\r\n this.setState(prevState => ({\r\n ...prevState,\r\n setupTime: val\r\n }));\r\n }\r\n\r\n private getRecords = (request: reportRequest | null) => {\r\n this.recordsPromise!.newPromise(\r\n getOEEApi(request || this.state.reportRequest, this.state.setupTime),\r\n result => {\r\n this.setState({\r\n oeeRecordsData: result,\r\n reportRequest: request || this.state.reportRequest,\r\n message: ''\r\n });\r\n },\r\n e => {\r\n console.log(`Error caught in page-oee.getRecords(). ${e.message} ${e.detail}`);\r\n alert('Error getting OEE records');\r\n }\r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport { Winder, DropdownList, editWinder } from \"../api/dataTypes\";\r\n\r\ninterface State {\r\n winder:Winder;\r\n orgIndex: number;\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n editWinder: (editData:editWinder,orgIndex:number) => void;\r\n winder:Winder;\r\n orgOptions: DropdownList[];\r\n orgIndex:number;\r\n}\r\n\r\nexport class EditWinderModal extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n winder: {\r\n id:0,\r\n name:\"\",\r\n location:\"\",\r\n ownerName: \"\",\r\n mode:\"\",\r\n currentCutRequest:null,\r\n heartBeat: new Date(1999,1,1,0,0,0),\r\n serialNumber:\"\",\r\n mqttPassword:\"\",\r\n macAddress:\"\",\r\n },\r\n orgIndex:-1,\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n if (!nextProps.isModalOpen || (nextProps.winder.name !== \"\")) {\r\n this.setState({\r\n winder: JSON.parse(JSON.stringify(nextProps.winder)),\r\n orgIndex:nextProps.orgIndex,\r\n })\r\n }\r\n}\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
Winder Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Location
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
PLC Serial #
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
PLC Mac Address
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Organization
\r\n
\r\n \r\n {this.props.orgOptions.map(c =>\r\n )\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n private onInputChange = (\r\n e:\r\n | React.SyntheticEvent\r\n | React.SyntheticEvent\r\n) => {\r\n let newWinder = this.state.winder;\r\n newWinder[e.currentTarget.name] = e.currentTarget.value;\r\n this.setState({\r\n winder: newWinder\r\n });\r\n}\r\n\r\nprivate confirmButtonPressed = () => {\r\n let editData:editWinder = {\r\n id:this.state.winder.id,\r\n name:this.state.winder.name,\r\n location:this.state.winder.location,\r\n serialNumber:this.state.winder.serialNumber,\r\n mqttPassword:this.state.winder.mqttPassword,\r\n customerId:null,\r\n distributorId:null, \r\n macAddress:this.state.winder.macAddress, \r\n }\r\n this.props.editWinder(editData, this.state.orgIndex);\r\n this.props.closeModal();\r\n}\r\n\r\nprivate cancelButtonPressed = () => {\r\n this.setState({\r\n winder: {\r\n id:0,\r\n name:\"\",\r\n location:\"\",\r\n ownerName: \"\",\r\n mode:\"\",\r\n currentCutRequest:null,\r\n heartBeat: new Date(1999,1,1,0,0,0),\r\n serialNumber:\"\",\r\n mqttPassword:\"\",\r\n macAddress:\"\",\r\n },\r\n orgIndex:-1,\r\n });\r\n this.props.closeModal();\r\n}\r\n\r\nprivate onChange = (e: React.SyntheticEvent) => {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n this.setState({\r\n orgIndex: parsedNumber,\r\n });\r\n }\r\n}\r\n}","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport { createWinder, DropdownList } from \"../api/dataTypes\";\r\n\r\n\r\ninterface State {\r\n winder:createWinder;\r\n orgIndex:number;\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n addWinder: (newWinder:createWinder, orgIndex:number) => void;\r\n orgOptions: DropdownList[];\r\n}\r\n\r\nexport class AddWinderModal extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n winder: {\r\n name:\"\",\r\n location:\"\",\r\n serialNumber:\"\",\r\n macAddress:\"\",\r\n customerId:null,\r\n distributorId:null,\r\n },\r\n orgIndex:-1\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps:Props){\r\n if (!nextProps.isModalOpen || (nextProps.orgOptions.length!==0)) {\r\n if(nextProps.orgOptions.length===1){\r\n this.setState({\r\n orgIndex:0,\r\n })\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
Winder Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Location
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
PLC Serial #
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
PLC Mac Address
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Organization
\r\n
\r\n \r\n {this.props.orgOptions.map(c =>\r\n )\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n private onInputChange = (\r\n e:\r\n | React.SyntheticEvent\r\n | React.SyntheticEvent\r\n ) => {\r\n let newWinder = this.state.winder;\r\n newWinder[e.currentTarget.name] = e.currentTarget.value;\r\n this.setState({\r\n winder: newWinder\r\n });\r\n }\r\n\r\n private confirmButtonPressed = () => {\r\n // Call change password method that was passed in\r\n this.props.addWinder(this.state.winder, this.state.orgIndex\r\n );\r\n this.props.closeModal();\r\n }\r\n\r\n private cancelButtonPressed = () => {\r\n this.setState({\r\n winder: {\r\n name:\"\",\r\n location:\"\",\r\n serialNumber:\"\",\r\n macAddress:\"\",\r\n customerId:null,\r\n distributorId:null,\r\n },\r\n orgIndex:-1,\r\n });\r\n this.props.closeModal();\r\n }\r\n\r\n private onChange = (e: React.SyntheticEvent) => {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n this.setState({\r\n orgIndex: parsedNumber,\r\n });\r\n }\r\n }\r\n}","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport {presetInfo } from \"../api/dataTypes\";\r\n\r\ninterface State {\r\n presets:presetInfo;\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n editPresets: (editData:presetInfo) => void;\r\n presets:presetInfo;\r\n winderName:string;\r\n}\r\n\r\nexport class EditPresetsModal extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n presets:{\r\n id:0,\r\n winderId:0,\r\n preset1:0,\r\n preset2:0,\r\n preset3:0,\r\n preset4:0,\r\n preset5:0,\r\n preset6:0,\r\n preset7:0,\r\n preset8:0,\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n if (!nextProps.isModalOpen || (nextProps.presets.id !==0)) {\r\n this.setState({\r\n presets: JSON.parse(JSON.stringify(nextProps.presets)),\r\n })\r\n }\r\n}\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\nprivate onInputChange = (\r\n e:\r\n | React.SyntheticEvent\r\n | React.SyntheticEvent\r\n ) => {\r\n let newPresets = this.state.presets;\r\n newPresets[e.currentTarget.name] = e.currentTarget.value;\r\n this.setState({\r\n presets:newPresets\r\n });\r\n}\r\n\r\nprivate confirmButtonPressed = () => {\r\n this.props.editPresets(this.state.presets);\r\n this.props.closeModal();\r\n}\r\n\r\nprivate cancelButtonPressed = () => {\r\n this.setState({\r\n presets:{\r\n id:0,\r\n winderId:0,\r\n preset1:0,\r\n preset2:0,\r\n preset3:0,\r\n preset4:0,\r\n preset5:0,\r\n preset6:0,\r\n preset7:0,\r\n preset8:0,\r\n }\r\n });\r\n this.props.closeModal();\r\n}\r\n\r\n\r\n}","import * as React from \"react\";\r\nimport ReactTable from \"react-table\";\r\nimport \"react-table/react-table.css\";\r\nimport { Header } from \"../components/header\";\r\n// import { login } from \"../api/api-account\";\r\n// import { TestWithErrorResult, TestWithAlert } from \"../api/api-tester\";\r\n// import {TestResponse} from \"../api/dataTypes\";\r\nimport \"../styles/Headers.css\";\r\nimport \"../styles/Tables.css\";\r\nimport * as TableStyles from \"../styles/TableFormats\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faPencilAlt, faCog } from \"@fortawesome/free-solid-svg-icons\";\r\nimport matchSorter from 'match-sorter';\r\nimport { Winder, GetDefaultWinder, createWinder, orgInfo, DropdownList, orgTypes, presetInfo, editWinder } from \"../api/dataTypes\";\r\nimport { PromiseHelper } from \"../classes/promiseHelper\";\r\nimport { EditWinderModal } from \"../modals/modal-EditWinder\";\r\nimport { AddWinderModal } from \"../modals/modal-AddWinder\";\r\nimport { getAllWindersApi, addWinderApi, getAllPresetsApi, editWinderApi, editPresetApi } from \"../api/api-winder\";\r\nimport { getAllOrgsApi } from \"../api/api-organizations\";\r\nimport { EditPresetsModal } from \"../modals/modal-EditPresets\";\r\nimport { hasAdminRole, hasDistributorRole, getCurrentUser } from \"../api/api-account\";\r\nimport moment from 'moment';\r\nimport { isNull, isUndefined } from \"util\";\r\n\r\n\r\ninterface State {\r\n example: string\r\n winders:Winder[];\r\n presets: presetInfo[];\r\n orgOptions:DropdownList[]\r\n addModalOpen: boolean;\r\n editModalOpen: boolean;\r\n editPresetModalOpen:boolean;\r\n // deleteModalOpen: boolean;\r\n}\r\n\r\nexport interface Props {}\r\n\r\nexport class SpoolWindersPage extends React.Component {\r\n private editData: Winder;\r\n private editPreset: presetInfo;\r\n private editName:string = \"\";\r\n private orgList: orgInfo[] = [];\r\n private adminIndex:number = -2;\r\n private offset = moment().utcOffset();\r\n getPromise: PromiseHelper = new PromiseHelper();\r\n addPromise: PromiseHelper = new PromiseHelper();\r\n editPromise: PromiseHelper = new PromiseHelper();\r\n getPresetsPromise: PromiseHelper = new PromiseHelper();\r\n editPresetsPromise:PromiseHelper = new PromiseHelper();\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.editData = GetDefaultWinder();\r\n this.editPreset = {\r\n id:0,\r\n winderId:0,\r\n preset1:0,\r\n preset2:0,\r\n preset3:0,\r\n preset4:0,\r\n preset5:0,\r\n preset6:0,\r\n preset7:0,\r\n preset8:0,\r\n }\r\n this.state = {\r\n example: '',\r\n winders:[GetDefaultWinder()],\r\n presets:[],\r\n addModalOpen:false,\r\n editModalOpen:false,\r\n editPresetModalOpen:false,\r\n orgOptions: [],\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.getWinders();\r\n if(hasAdminRole()||hasDistributorRole()){\r\n getAllOrgsApi().then((res) => {\r\n this.orgList = res;\r\n this.setDropDownOptions(res);\r\n });\r\n }\r\n else{\r\n getCurrentUser().then(res=>{\r\n let customerOrg:orgInfo =new orgInfo();\r\n customerOrg.Init({name:res!.customerName!, id:res!.customerId, orgType:orgTypes.Customer, distId:res!.distributorId});\r\n this.orgList=[customerOrg];\r\n this.setState({orgOptions: [{name:customerOrg.name,value:0}]});\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount(){\r\n this.getPromise.clearPromise();\r\n this.addPromise.clearPromise();\r\n this.editPromise.clearPromise();\r\n this.getPresetsPromise.clearPromise();\r\n this.editPresetsPromise.clearPromise();\r\n }\r\n \r\n // Given an array of arrays, set the values as the drop down options:\r\n //TODO: limit this list to orgs that the current org should be able to see\r\n setDropDownOptions = (value: orgInfo[]) => {\r\n let cOptions = value.map(c => {\r\n return { name: c.name, value: value.indexOf(c) };\r\n });\r\n cOptions.unshift({ name: \"Unassigned\", value: this.adminIndex }); // TODO: only add if admin is logged in\r\n cOptions.unshift({ name: \"Select...\", value: -1 });\r\n this.setState({\r\n orgOptions: cOptions,\r\n });\r\n };\r\n // componentWillMount() {\r\n // login(\"admin@dmcinfo.com\", \"Elston2222!\")\r\n // .then(() => {\r\n // TestWithErrorResult(true)\r\n // .then(r => {\r\n // if(r.success === true) {\r\n // this.setState({ example: r.data!.msg });\r\n // } else {\r\n // this.setState({ example: `ERROR: ${r.error!.message}` });\r\n // }\r\n // });\r\n // TestWithAlert(true)\r\n // .catch(e => alert(`A simulated error occurred.\\nERROR:\\n${e}`));\r\n // })\r\n // }\r\n\r\n render() {\r\n //let isCustomer = !(hasDistributorRole()||hasAdminRole())\r\n return (\r\n \r\n
\r\n\r\n
\r\n
\r\n Spool Winding Trolley Systems\r\n
\r\n
\r\n {hasAdminRole()&&
\r\n \r\n + Add Spool Winding Trolley\r\n \r\n \r\n\r\n
}\r\n
\r\n
\r\n\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n minRows = {10}\r\n showPagination={this.state.winders.length>20}\r\n // COLUMNS ////////////////////////////////\r\n columns={[\r\n {\r\n Header: \"Name\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"name\",\r\n style: TableStyles.dataStyle,\r\n minWidth: 200\r\n },\r\n {\r\n Header: \"Location\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"location\",\r\n style: TableStyles.dataStyle,\r\n minWidth: 200\r\n },\r\n {\r\n Header: \"Owner\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"ownerName\",\r\n style: TableStyles.dataStyle,\r\n minWidth: 200\r\n },\r\n {\r\n Header: \"Mode\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"mode\",\r\n style: TableStyles.dataStyle,\r\n minWidth: 120\r\n },\r\n {\r\n Header: \"Current Cut\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"currentCutRequest\",\r\n style: TableStyles.dataStyle,\r\n minWidth: 120\r\n },\r\n {\r\n Header: \"Heartbeat\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n id: 'heartBeat',\r\n accessor: row => moment(row.heartBeat!).format('x'),\r\n Cell: row =>{\r\n if(!isNull(row.original.heartBeat)&& !isUndefined(row.original.heartBeat)){\r\n return (moment(row.original.heartBeat).add(this.offset,'m').format(' hh:mm a, MM/DD/YY'))\r\n }else{\r\n return null;\r\n }\r\n },\r\n style: TableStyles.dataStyle,\r\n minWidth: 120\r\n },\r\n {\r\n Header: \"PLC Serial\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"serialNumber\",\r\n style: TableStyles.dataStyle,\r\n minWidth: 120\r\n },\r\n {\r\n Header: \"Mac Address\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"macAddress\",\r\n style: TableStyles.dataStyle,\r\n minWidth: 120\r\n },\r\n {\r\n Header: \"\",\r\n filterable: false,\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n width: 80,\r\n sortable: false,\r\n Cell: row => (\r\n
\r\n {/* {}}//this.handleView(row.original)}\r\n >\r\n \r\n //TODO: Alarm status/Navigate to alarm page */}\r\n {\r\n this.editData = row.original;\r\n this.setState({ editModalOpen: true });\r\n }}\r\n >\r\n \r\n \r\n
\r\n )\r\n },\r\n ]}\r\n // COLUMNS END //////////////////\r\n className=\"-highlight\"\r\n SubComponent={row =>{\r\n return (\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n data = {this.state.presets.filter(x=> x.winderId === row.original.id)}\r\n columns={[\r\n {\r\n Header: \"Preset 1\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset1\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"Preset 2\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset2\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"Preset 3\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset3\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"Preset 4\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset4\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"Preset 5\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset5\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"Preset 6\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset6\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"Preset 7\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset7\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"Preset 8\",\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n accessor: \"preset8\",\r\n minWidth: 60\r\n },\r\n {\r\n Header: \"\",\r\n filterable: false,\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n columns: [\r\n {\r\n width: 75,\r\n sortable: false,\r\n filterable: false,\r\n Cell: row2 => (\r\n
\r\n {\r\n this.editPreset = row2.original;\r\n this.editName= row.original.name\r\n this.setState({ editPresetModalOpen: true });\r\n }}\r\n >\r\n \r\n \r\n
\r\n )\r\n },\r\n ]\r\n },\r\n ]}\r\n minRows = {1}\r\n showPagination = {false}\r\n \r\n />\r\n
\r\n \r\n )\r\n }}\r\n /> \r\n
\r\n x.name===this.editData.ownerName)}\r\n />\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private getWinders = () => {\r\n this.getPromise!.newPromise(getAllWindersApi(), result => {\r\n this.setState({\r\n winders:result,\r\n });\r\n }, e=> {\r\n alert(`Error retrieving winders. ${e.detail}`)\r\n });\r\n this.getPresetsPromise!.newPromise(getAllPresetsApi(), result => {\r\n this.setState({\r\n presets:result,\r\n });\r\n }, e=> {\r\n alert(`Error retrieving presets. ${e.detail}`)\r\n })\r\n };\r\n\r\n handleAdd = () => {\r\n this.setState({\r\n addModalOpen: true\r\n });\r\n };\r\n\r\n private closeModal = () => {\r\n this.setState({\r\n addModalOpen: false,\r\n editModalOpen: false,\r\n editPresetModalOpen:false,\r\n //deleteModalOpen: false,\r\n });\r\n this.getWinders();\r\n }\r\n\r\n private addWinder = (newWinder:createWinder,orgIndex:number) => {\r\n if (orgIndex >= 0) {\r\n let org: orgInfo = this.orgList[orgIndex];\r\n if (org.orgType === orgTypes.Customer) {\r\n newWinder.customerId = org.id;\r\n }\r\n else if (org.orgType === orgTypes.Distributor) {\r\n newWinder.distributorId = org.id;\r\n }\r\n }\r\n this.addPromise!.newPromise(\r\n addWinderApi(newWinder), result => {\r\n this.getWinders();\r\n },\r\n e => {\r\n console.log(`Error caught in page-spoolWinder.addWinder(). ${e}`);\r\n alert('Error adding winder.');\r\n }\r\n )\r\n }\r\n\r\n private editWinder = (editData:editWinder,orgIndex:number) => {\r\n if (orgIndex >= 0) {\r\n let org: orgInfo = this.orgList[orgIndex];\r\n if (org.orgType === orgTypes.Customer) {\r\n editData.customerId = org.id;\r\n }\r\n else if (org.orgType === orgTypes.Distributor) {\r\n editData.distributorId = org.id;\r\n }\r\n }\r\n this.editPromise!.newPromise(\r\n editWinderApi(editData), result => {\r\n this.getWinders();\r\n },\r\n e => {\r\n console.log(`Error caught in page-spoolWinders.editWinder(). ${e}`);\r\n alert('Error editing winder.');\r\n }\r\n )\r\n }\r\n\r\n private editPresets = (editData:presetInfo) => {\r\n this.editPresetsPromise!.newPromise(\r\n editPresetApi(editData), result => {\r\n this.getWinders();\r\n },\r\n e => {\r\n console.log(`Error caught in page-spoolWinders.editPresets(). ${e}`);\r\n alert('Error editing presets.');\r\n }\r\n )\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport { userInfo, DropdownList } from \"../api/dataTypes\";\r\n\r\ninterface State {\r\n userInfo: userInfo;\r\n orgIndex: number;\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n addUser: (addUser: userInfo, orgIndex: number) => void;\r\n orgOptions: DropdownList[],\r\n}\r\n\r\n\r\nexport class AddUserModal extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n userInfo: {\r\n id: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n phone: \"\",\r\n roles: [],\r\n distributorId: null,\r\n distributorName: null,\r\n customerId: null,\r\n customerName: null,\r\n },\r\n orgIndex: -1,\r\n };\r\n }\r\n\r\n componentWillReceiveProps(nextProps:Props){\r\n if (!nextProps.isModalOpen || (nextProps.orgOptions.length!==0)) {\r\n if(nextProps.orgOptions.length===1){\r\n this.setState({\r\n orgIndex:0,\r\n })\r\n }\r\n }\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
First Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Last Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Phone
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Email
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Organization
\r\n
\r\n \r\n {this.props.orgOptions.map(c =>\r\n )\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private onInputChange = (e: React.SyntheticEvent) => {\r\n let newUser = this.state.userInfo;\r\n newUser[e.currentTarget.name] = e.currentTarget.value;\r\n this.setState({\r\n userInfo: newUser\r\n });\r\n }\r\n\r\n private confirmButtonPressed = () => {\r\n // Call the provided method to subsequently call the api\r\n this.props.addUser(this.state.userInfo, this.state.orgIndex);\r\n this.setState({\r\n userInfo: {\r\n id: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n phone: \"\",\r\n roles: [],\r\n distributorId: null,\r\n distributorName: null,\r\n customerId: null,\r\n customerName: null,\r\n },\r\n orgIndex:-1,\r\n });\r\n this.props.closeModal();\r\n }\r\n\r\n private cancelButtonPressed = () => {\r\n this.setState({\r\n userInfo: {\r\n id: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n phone: \"\",\r\n roles: [],\r\n distributorId: null,\r\n distributorName: null,\r\n customerId: null,\r\n customerName: null,\r\n },\r\n orgIndex:-1,\r\n });\r\n this.props.closeModal();\r\n }\r\n\r\n private onChange = (e: React.SyntheticEvent) => {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n this.setState({\r\n orgIndex: parsedNumber,\r\n });\r\n }\r\n }\r\n}","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\n\r\ninterface State {\r\n\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n confirmInfo: string;\r\n deleteInfo: () => void;\r\n}\r\n\r\nexport class ConfirmDeleteModal extends React.Component {\r\n // constructor(props: Props) {\r\n // super(props);\r\n\r\n\r\n // }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {this.props.confirmInfo}\r\n
\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private confirmButtonPressed = () => {\r\n // Edit the setpoint\r\n // this.props.deleteInfo(this.props.currentInfo); \r\n this.props.deleteInfo();\r\n // Then close the modal\r\n this.props.closeModal();\r\n }\r\n}","import * as React from \"react\";\r\nimport \"../styles/Modal.css\";\r\nimport ReactModal from \"react-modal\";\r\nimport { userInfo, getDefaultUserInfo, DropdownList } from \"../api/dataTypes\";\r\nimport { isNull } from \"util\";\r\n\r\ninterface State {\r\n userInfo: userInfo;\r\n orgIndex: number;\r\n}\r\n\r\nexport interface Props {\r\n isModalOpen: boolean;\r\n closeModal: () => void;\r\n editUser: (addUser: userInfo, orgIndex: number) => void;\r\n orgOptions: DropdownList[];\r\n userInfo: userInfo;\r\n orgIndex:number;\r\n}\r\n\r\nexport class EditUserModal extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n userInfo: getDefaultUserInfo(),\r\n orgIndex: -1,\r\n };\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n if (!nextProps.isModalOpen || (nextProps.userInfo.id !== \"\")) {\r\n this.setState({\r\n userInfo: JSON.parse(JSON.stringify(nextProps.userInfo)),\r\n orgIndex:nextProps.orgIndex,\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
First Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Last Name
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Phone
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Organization
\r\n
\r\n \r\n {this.props.orgOptions.map(c =>\r\n )\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Confirm\r\n \r\n
\r\n
\r\n \r\n Close/Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private onInputChange = (\r\n e: React.SyntheticEvent\r\n ) => {\r\n let newUser = this.state.userInfo;\r\n newUser[e.currentTarget.name] = e.currentTarget.value;\r\n this.setState({\r\n userInfo: newUser\r\n });\r\n }\r\n\r\n private confirmButtonPressed = () => {\r\n this.props.editUser(this.state.userInfo, this.state.orgIndex);\r\n this.props.closeModal();\r\n }\r\n\r\n private cancelButtonPressed = () => {\r\n this.setState({\r\n userInfo: getDefaultUserInfo(),\r\n });\r\n this.props.closeModal();\r\n }\r\n\r\n private onChange = (e: React.SyntheticEvent) => {\r\n // First try to parse the value that was sent - if it fails, do nothing\r\n let parsedNumber = parseInt(e.currentTarget.value, 10);\r\n\r\n if (!isNaN(parsedNumber)) {\r\n // Element in the dropdown has been selected\r\n this.setState({\r\n orgIndex: parsedNumber,\r\n });\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport 'react-table/react-table.css'\r\nimport * as TableStyles from '../styles/TableFormats'\r\nimport { Header } from '../components/header';\r\nimport { AddUserModal } from '../modals/modal-AddUser';\r\nimport { userInfo, DropdownList, getDefaultUserInfo, orgInfo, orgTypes, registerUserInfo } from '../api/dataTypes';\r\nimport ReactTable from 'react-table';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPencilAlt, faTrashAlt } from '@fortawesome/free-solid-svg-icons';\r\n// import { EditUserModal } from 'src/modals/modal-edit-user';\r\n// import { isCustomerRole, USER_ROLE, isAdminRole, isOwnerRole, isRoleSubordinate } from 'src/api/auth-api';\r\n// import { getOrgCustomersListApi, getCustomersListApi } from 'src/api/api-customers';\r\nimport matchSorter from 'match-sorter';\r\nimport * as userApi from '../api/api-user';\r\nimport { ConfirmDeleteModal } from '../modals/modal-ConfirmDelete';\r\nimport { getAllOrgsApi } from '../api/api-organizations';\r\nimport { EditUserModal } from '../modals/modal-EditUser';\r\nimport { PromiseHelper } from '../classes/promiseHelper';\r\nimport { getUserName, hasAdminRole, hasDistributorRole, getCurrentUser } from '../api/api-account';\r\n\r\ninterface State {\r\n usersData: userInfo[]\r\n editModalOpen: boolean,\r\n addModalOpen: boolean,\r\n deleteModalOpen: boolean,\r\n orgOptions: DropdownList[],\r\n}\r\n\r\nexport interface Props {\r\n}\r\n\r\n\r\nexport class UsersPage extends React.Component {\r\n\r\n private orgList: orgInfo[];\r\n private adminIndex: number = -2;\r\n private currentOrgIndex: number = -3;\r\n private editData:userInfo = getDefaultUserInfo();\r\n private currentUser:userInfo = getDefaultUserInfo();\r\n\r\n getPromise: PromiseHelper = new PromiseHelper();\r\n addPromise: PromiseHelper = new PromiseHelper();\r\n editPromise: PromiseHelper = new PromiseHelper();\r\n deletePromise: PromiseHelper = new PromiseHelper();\r\n orgPromise: PromiseHelper = new PromiseHelper();\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.orgList = [];\r\n this.state = {\r\n usersData: [getDefaultUserInfo()],\r\n addModalOpen: false,\r\n editModalOpen: false,\r\n deleteModalOpen: false,\r\n orgOptions: [],\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.getUsersApiCall();getCurrentUser().then(res=>{\r\n this.currentUser=res!\r\n if(hasAdminRole()||hasDistributorRole()){\r\n this.orgPromise.newPromise(getAllOrgsApi(), \r\n t => {\r\n this.orgList = t;\r\n this.setDropDownOptions(t);\r\n },\r\n c => alert(`${c.message} \\n ${c.detail}`)\r\n );\r\n }\r\n else{\r\n let customerOrg:orgInfo =new orgInfo();\r\n customerOrg.Init({name:this.currentUser.customerName!, id:this.currentUser.customerId, orgType:orgTypes.Customer, distId:this.currentUser.distributorId});\r\n this.orgList=[customerOrg];\r\n this.setState({orgOptions: [{name:customerOrg.name,value:0}]});\r\n }\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.getPromise.clearPromise();\r\n this.addPromise.clearPromise();\r\n this.editPromise.clearPromise();\r\n this.deletePromise.clearPromise();\r\n this.orgPromise.clearPromise();\r\n }\r\n\r\n // Given an array of arrays, set the values as the drop down options:\r\n //TODO: limit this list to orgs that the current org should be able to see\r\n setDropDownOptions = (value: orgInfo[]) => {\r\n let cOptions = value.map(c => {\r\n return { name: c.name, value: value.indexOf(c) };\r\n });\r\n if(hasAdminRole()){\r\n cOptions.unshift({ name: \"Admin Web User\", value: this.adminIndex })\r\n }\r\n else if(hasDistributorRole()){\r\n cOptions.unshift({name:this.currentUser.distributorName!, value:this.currentOrgIndex});\r\n }\r\n else{\r\n cOptions.unshift({name:this.currentUser.customerName!, value:this.currentOrgIndex});\r\n }\r\n \r\n cOptions.unshift({ name: \"Select...\", value: -1 });\r\n this.setState({\r\n orgOptions: cOptions,\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n\r\n
\r\n
\r\n Users\r\n
\r\n
\r\n
\r\n \r\n + Add User\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n (matchSorter([row[filter.id]], filter.value).length !== 0)}\r\n showPagination={this.state.usersData.length>20}\r\n minRows={10}\r\n // COLUMNS ////////////////////////////////\r\n columns={\r\n [\r\n {\r\n Header: 'First Name',\r\n accessor: 'firstName',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n minWidth: 200\r\n }, {\r\n Header: 'Last Name',\r\n accessor: 'lastName',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n minWidth: 200\r\n }, {\r\n Header: 'Organization',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n minWidth: 200,\r\n Cell: cell => (\r\n this.getOrgName(cell.original)\r\n )\r\n }, {\r\n Header: 'Phone',\r\n accessor: 'phone',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n minWidth: 120\r\n }, {\r\n Header: 'Email',\r\n accessor: 'email',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n minWidth: 200\r\n\r\n }, {\r\n Header: 'Role',\r\n accessor: 'role',\r\n headerStyle: TableStyles.columnHeaderStyle,\r\n style: TableStyles.dataStyle,\r\n minWidth: 100,\r\n }, {\r\n Header: '',\r\n width: 112,\r\n sortable: false,\r\n filterable: false,\r\n show: true, //isOwnerRole(),\r\n Cell: cell => (\r\n getUserName()!==cell.original.email &&\r\n
\r\n \r\n \r\n
\r\n )\r\n },\r\n ]}\r\n // COLUMNS END //////////////////\r\n className=\"-highlight\"\r\n />\r\n
\r\n \r\n x.name===(\r\n this.editData.customerName==null\r\n ?this.editData.distributorName\r\n :this.editData.customerName))}\r\n />\r\n\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n private getUsersApiCall = () => {\r\n this.getPromise!.newPromise(\r\n userApi.getUsersApi(), result => {\r\n if (result) {\r\n this.setState({\r\n ...this.state,\r\n usersData: result\r\n });\r\n }\r\n },\r\n e => {\r\n console.log(`Error caught in page-users.GetUsers(). ${e!.message}`);\r\n alert('Error getting Users.');\r\n }\r\n )\r\n }\r\n\r\n private deleteUser = () => {\r\n this.deletePromise!.newPromise(\r\n userApi.deleteUserApi(this.editData),\r\n _ => {\r\n this.getUsersApiCall();\r\n },\r\n e => {\r\n console.log(`Error caught in page-users.DeleteUser(). ${e!.message}`);\r\n alert('Error deleting user.');\r\n }\r\n )\r\n }\r\n\r\n private addUser = (userInfo: userInfo, orgIndex: number) => {\r\n this.setUserRoleAndOrgId(userInfo, orgIndex);\r\n\r\n let newUser: registerUserInfo = {\r\n firstName: userInfo.firstName,\r\n lastName: userInfo.lastName,\r\n phone: userInfo.phone,\r\n email: userInfo.email,\r\n customerId: userInfo.customerId,\r\n distributorId: userInfo.distributorId,\r\n roles: userInfo.roles,\r\n };\r\n\r\n this.addPromise!.newPromise(\r\n userApi.addUserApi(newUser),\r\n result => {\r\n this.setState({addModalOpen: false});\r\n this.getUsersApiCall();\r\n },\r\n e => {\r\n console.log(`Error caught in page-users.AddUser(). ${e!.message}`);\r\n alert('Error adding user.');\r\n }\r\n )\r\n }\r\n\r\n private editUser = (userInfo: userInfo, orgIndex: number) => {\r\n this.setUserRoleAndOrgId(userInfo, orgIndex);\r\n\r\n this.editPromise!.newPromise(\r\n userApi.editUserApi(userInfo),\r\n result => {\r\n this.getUsersApiCall();\r\n },\r\n e => {\r\n console.log(`Error caught in page-users.EditUser(). ${e!.message}`);\r\n alert('Error editing user.');\r\n }\r\n )\r\n }\r\n\r\n private setUserRoleAndOrgId = (user: userInfo, orgIndex: number) => {\r\n if (orgIndex >= 0) {\r\n let org: orgInfo = this.orgList[orgIndex];\r\n if (org.orgType === orgTypes.Customer) {\r\n user.customerId = org.id;\r\n user.roles = [\"customer\"];\r\n }\r\n else if (org.orgType === orgTypes.Distributor) {\r\n user.distributorId = org.id;\r\n user.roles = [\"distributor\"];\r\n }\r\n }\r\n else if (orgIndex===this.adminIndex){\r\n user.distributorId = null;\r\n user.customerId = null;\r\n user.roles = [\"admin\"];\r\n }\r\n else if (orgIndex===this.currentOrgIndex){\r\n user.distributorId=this.currentUser.distributorId;\r\n user.customerId=this.currentUser.customerId;\r\n if(hasDistributorRole()){\r\n user.roles = [\"distributor\"];\r\n }else{\r\n user.roles = [\"customer\"];\r\n }\r\n }\r\n }\r\n\r\n handleAdd = () => {\r\n this.setState({\r\n addModalOpen: true\r\n });\r\n }\r\n\r\n private closeModal = () => {\r\n this.setState({\r\n ...this.state,\r\n addModalOpen: false,\r\n editModalOpen: false,\r\n deleteModalOpen: false\r\n });\r\n this.getUsersApiCall();\r\n }\r\n\r\n private getOrgName = (user: userInfo) => {\r\n if (user.customerId !== null) {\r\n return user.customerName;\r\n }\r\n else if (user.customerId === null && user.distributorId !== null) {\r\n return user.distributorName;\r\n }\r\n else {\r\n return 'N/A';\r\n }\r\n }\r\n\r\n}","import * as React from 'react';\r\nimport { withRouter, RouteComponentProps, Redirect } from 'react-router-dom';\r\nimport headerLogo from '../images/header-logo.png';\r\nimport '../styles/Login.css';\r\nimport { PromiseHelper } from '../classes/promiseHelper';\r\nimport { LogInResponse } from '../api/dataTypes';\r\nimport { confirmAccount } from '../api/api-account';\r\nimport TextInput from '../components/text-input';\r\n\r\ninterface State {\r\n email: string;\r\n password: string;\r\n password2: string;\r\n message: string;\r\n isLoggedIn: boolean;\r\n disableInputs: boolean;\r\n errorMsg: string;\r\n}\r\n\r\nexport interface Props extends RouteComponentProps<{}> { }\r\n\r\n// This component is linked in the email sent to new users, and password reset emails\r\n// The email will build the url to include the users email and the Identity token\r\nclass AccountConfirmPage extends React.Component {\r\n email: string = '';\r\n token: string = '';\r\n loginPromise: PromiseHelper = new PromiseHelper();\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n email: '',\r\n password: '',\r\n password2: '',\r\n message: '',\r\n isLoggedIn: false,\r\n disableInputs: false,\r\n errorMsg: '',\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n const params = this.props.location.search;\r\n let e = params.match(new RegExp('email=(.*)&'));\r\n let t = params.match(new RegExp('token=(.*)'));\r\n\r\n if (e && t) {\r\n this.email = e[1];\r\n this.token = t[1];\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ email: this.email });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.loginPromise.clearPromise();\r\n }\r\n\r\n render() {\r\n if (this.state.isLoggedIn === true) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n {this.renderButton()}\r\n\r\n
\r\n
\r\n
\r\n )\r\n }\r\n }\r\n\r\n renderButton = () => {\r\n return (\r\n
\r\n \r\n Confirm\r\n \r\n\r\n
\r\n )\r\n }\r\n\r\n private handleKeyPress = (e: any) => {\r\n if (e.key === 'Enter') {\r\n this.handleLogin();\r\n }\r\n }\r\n\r\n private handleInputChange = (e: React.SyntheticEvent) => {\r\n this.setState({\r\n ...this.state,\r\n [e.currentTarget.name]: e.currentTarget.value\r\n });\r\n }\r\n\r\n private handleLogin = () => {\r\n if(!this.state.password) {\r\n this.setState({ errorMsg: \"The password cannot be blank\" });\r\n return;\r\n } else if (this.state.password !== this.state.password2) {\r\n this.setState({ errorMsg: \"The entered passwords do not match\" });\r\n return;\r\n }\r\n this.setState({ disableInputs: true, errorMsg: '' });\r\n this.loginUser(this.state.email, this.state.password, this.state.password2);\r\n }\r\n\r\n private loginUser = (email: string, pw: string, pw2: string) => {\r\n this.loginPromise.newPromise(\r\n confirmAccount(email, this.token, pw, pw2),\r\n t => {\r\n this.setState({\r\n isLoggedIn: true,\r\n disableInputs: false\r\n });\r\n },\r\n error => {\r\n this.setState({ \r\n disableInputs: false,\r\n errorMsg: error.message\r\n });\r\n }\r\n )\r\n }\r\n\r\n private logoPressed = () => {\r\n this.setState({ isLoggedIn: true });\r\n }\r\n\r\n}\r\nexport default withRouter(AccountConfirmPage);","import React from 'react';\r\nimport { Router, Route, Switch } from 'react-router-dom';\r\nimport { createBrowserHistory } from 'history';\r\nimport LoginPage from './pages/page-login';\r\nimport PrivateRoutes from './components/private-route';\r\nimport './styles/App.css';\r\nimport { AccountPage } from './pages/page-account';\r\nimport { AlarmsPage } from './pages/page-alarms';\r\nimport { CutRecordsPage } from './pages/page-cutRecords';\r\nimport { OrganizationsPage } from './pages/page-organizations';\r\nimport { OEEPage } from './pages/page-oee';\r\nimport { SpoolWindersPage } from './pages/page-spoolWinders';\r\nimport { UsersPage } from './pages/page-users';\r\nimport AccountConfirmPage from './pages/page-accountConfirm';\r\n\r\nexport default class App extends React.Component {\r\n\r\n public render() {\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}