{"version":3,"sources":["data/session/UserSession/UserSession.tsx","reportWebVitals.ts","components/logos/AdminLogo/tl-logo-text.png","components/logos/AdminLogo/AdminLogo.tsx","data/utilities/utilities.tsx","components/charts/SensorDataChart.tsx","data/api/queries.tsx","components/forms/SensorSettingsForm/SensorSettingsForm.tsx","components/forms/AddUserForm/AddUserForm.tsx","components/markers/StateMarker/StateMarker.tsx","components/tables/NotificationsTable/NotificationsTable.tsx","data/utilities/validators.tsx","components/tables/FreezerSensorTable/FreezerSensorTable.tsx","pages/admin/Dashboard/Dashboard.tsx","pages/admin/UserManagement/UserManagement.tsx","components/cards/InfoCard/InfoCard.tsx","components/forms/LoginForm/LoginForm.tsx","pages/base/Login/Login.tsx","pages/base/Error/Error.tsx","routes.tsx","layouts/Admin/Admin.tsx","components/logos/Logo/tl-logo.png","components/logos/Logo/Logo.tsx","data/site-info/footer-data.tsx","layouts/Base/Base.tsx","index.tsx"],"names":["logoutTimer","AuthContext","React","createContext","token","isLoggedIn","role","login","expirationTime","organisationId","logout","calculateRemainingTime","currentTime","Date","getTime","AuthContextProvider","initialToken","children","tokenData","storedToken","localStorage","getItem","storedExpirationDate","remainingTime","removeItem","duration","retrieveStoredToken","useState","setToken","userIsLoggedIn","logoutHandler","useCallback","console","log","clearTimeout","useEffect","setTimeout","contextValue","setItem","bearer","Provider","value","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","AdminLogo","src","logo","className","alt","convertTimestamp","timestamp","d","yyyy","getFullYear","mm","getMonth","slice","dd","getDate","min","getMinutes","hh","getHours","getTwoWeeksAgoTimestamp","yesterday","getSeconds","url","SensorDataChart","sensorData","type","TabPane","Tabs","startTime","utilities","Number","max","threshold","data","getSensorDataByIdByTime","forEach","element","key","config","height","xField","xAxis","label","formatter","measuredtime","tickCount","point","size","shape","style","fill","stroke","lineWidth","tooltip","title","slider","configTemperature","yField","yAxis","val","toFixed","String","fromCharCode","lineStyle","annotations","start","end","lineDash","configHumidity","defaultActiveKey","tab","address","window","location","href","includes","headers","sendQueryReturnObj","query","variables","a","fetch","method","body","JSON","stringify","response","json","sendQueryReturnObjObj","SensorSettingsForm","props","Form","useForm","form","sensorParams","alertEnabled","isAlertEnabled","parseInt","maxThreshold","locationName","sensorDataInput","nodeId","settings","name","defaultValues","alert","setFieldsValue","layout","initialValues","onFinish","values","toString","queries","resetFields","onSubmit","errors","message","error","success","Item","icon","InfoCircleOutlined","valuePropName","htmlType","AddUserForm","email","password","onOk","addUser","rules","required","placeholder","StateMarker","NotificationsTable","Text","Typography","TextArea","Input","orgParams","setOrgParams","addedIdsValid","setAddedIdsValid","addInputStatus","setAddInpitStatus","processQuery","addOrRemove","reportEmailDataInput","reportEmail","alertEmailDataInput","alertEmail","telegramChatIdDataInput","chatId","extension","setHasSelected","messageContent","hasSelected","setSelectedRows","selectedIds","setSelectedIds","rowSelection","onChange","selectedRowKeys","selectedRows","length","idsToRemove","row","push","id","intro","columns","dataIndex","render","record","ids","idArray","split","map","item","trim","flex","validateStatus","e","input","currentTarget","isInputValid","emails","regex","result","replace","i","test","validators","chatIDs","justify","disabled","pagination","hideOnSinglePage","dataSource","rows","formattedRow","tempObject","processRows","block","onClick","FreezerSensorTable","Title","isAdmin","sensorInfoData","setSensorInfoData","orgName","orgDetailsString","orgDetails","parse","isDownloading","setIsDownloading","isLoading","setIsLoading","isLocationFilter","setLocationFilter","uniqueLocations","setUniqueLocations","getLatest","tempIsDownloadingArray","index","uniqueLocationsArr","filter","self","indexOf","locationsFilterArr","sort","tempLocation","text","isModalVisible","setIsModalVisible","isSettingsModalVisible","setIsSettingsModalVisible","isNewUserModalVisible","setIsNewUserModalVisible","isDrawerVisible","setDrawerVisible","handleNewUserModalOk","modalTitle","setModalTitle","sensorType","setSensorType","modalData","setModalData","settingsData","setSettingsData","handleSettingsOk","onCloseDrawer","locationNameColumn","align","filters","onFilter","sorter","b","localeCompare","staticColumns","locationType","temperature","alertStatus","alertStatusText","placement","dot","NotificationOutlined","color","loading","LineChartOutlined","downloadStatus","sensorReport","after","showModal","ControlOutlined","span","level","UserAddOutlined","scroll","x","top","width","visible","onCancel","footer","closable","onClose","Dashboard","UserManagement","InfoCard","LoginForm","history","useHistory","authCtx","useContext","remember","user","organisation","toISOString","pathname","catch","err","Password","Login","Error","routes","path","UploadOutlined","component","VideoCameraOutlined","UserOutlined","Base","Header","Layout","Footer","Sider","Content","switchRoutes","prop","collapsed","setCollapsed","breakpoint","collapsedWidth","collapsible","onCollapse","theme","defaultSelectedKeys","mode","to","BarChartOutlined","LogoutOutlined","Logo","site","footerString","loc","padding","minHeight","ReactDOM","StrictMode","Admin","document","getElementById"],"mappings":"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","file":"static/js/main.6174e77d.chunk.js","sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\n\nlet logoutTimer: NodeJS.Timeout;\n\nconst AuthContext = React.createContext({\n token: '',\n isLoggedIn: false,\n role: 'user',\n login: (token: string, expirationTime: string, role: string, organisationId: string) => {\n // function body placeholder\n },\n logout: () => {\n // function body placeholder\n },\n});\n\nconst calculateRemainingTime = (expirationTime: string | 0 ) => {\n const currentTime = new Date().getTime();\n const adjExpirationTime = new Date(expirationTime).getTime();\n\n const remainingDuration = adjExpirationTime - currentTime;\n\n return remainingDuration;\n};\n\nconst retrieveStoredToken = () => {\n const storedToken = localStorage.getItem('Token');\n \n const storedExpirationDate = localStorage.getItem('ExpirationTime') || 0 ;\n\n const remainingTime = calculateRemainingTime(storedExpirationDate);\n\n if (remainingTime <= 3600) {\n localStorage.removeItem('Token');\n localStorage.removeItem('Authorization');\n localStorage.removeItem('ExpirationTime');\n localStorage.removeItem('Role');\n localStorage.removeItem('OrganisationId');\n return null;\n }\n\n return {\n token: storedToken ?? '',\n duration: remainingTime,\n };\n};\n\ninterface AuthContextProviderProps {\n children?: React.ReactNode,\n}\n\nexport const AuthContextProvider = ({ children }: AuthContextProviderProps):JSX.Element => {\n const tokenData = retrieveStoredToken();\n \n let initialToken;\n if (tokenData) {\n initialToken = tokenData.token;\n }\n\n const [token, setToken] = useState(initialToken);\n \n const userIsLoggedIn = !!token;\n\n const logoutHandler = useCallback(() => {\n console.log('Logging out');\n setToken('');\n localStorage.removeItem('Token');\n localStorage.removeItem('Authorization');\n localStorage.removeItem('ExpirationTime');\n localStorage.removeItem('Role');\n localStorage.removeItem('OrganisationId');\n\n if (logoutTimer) {\n clearTimeout(logoutTimer);\n }\n }, []);\n\n const loginHandler = (token: string, expirationTime: string, role: string, organisationId: string) => {\n setToken(token);\n localStorage.setItem('Token', token);\n const bearer = 'Bearer ' + token;\n localStorage.setItem('Authorization', bearer);\n localStorage.setItem('ExpirationTime', expirationTime);\n localStorage.setItem('Role', role);\n localStorage.setItem('OrganisationId', organisationId);\n\n const remainingTime = calculateRemainingTime(expirationTime);\n\n logoutTimer = setTimeout(logoutHandler, remainingTime);\n };\n\n useEffect(() => {\n if (tokenData) {\n console.log(tokenData.duration);\n logoutTimer = setTimeout(logoutHandler, tokenData.duration);\n }\n }, [tokenData, logoutHandler]);\n\n const contextValue = {\n token: token ?? '',\n organisationId: '',\n role: 'user',\n isLoggedIn: userIsLoggedIn,\n login: loginHandler,\n logout: logoutHandler,\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport default AuthContext;","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","export default __webpack_public_path__ + \"static/media/tl-logo-text.54540601.png\";","// import { Link } from 'react-router-dom';\nimport './AdminLogo.css';\nimport logo from './tl-logo-text.png';\n\nconst AdminLogo: React.FC = () => {\n\n return (\n // \n \"logo\"\n // \n );\n};\n\nexport default AdminLogo;","export function convertTimestamp(timestamp: number): string {\n const d = new Date(timestamp), // Convert the passed timestamp to milliseconds\n yyyy = d.getFullYear(),\n mm = ('0' + (d.getMonth() + 1)).slice(-2), // Months are zero based. Add leading 0.\n dd = ('0' + d.getDate()).slice(-2), // Add leading 0.\n min = ('0' + d.getMinutes()).slice(-2), // Add leading 0.\n hh = d.getHours();\n let h = hh,\n ampm = 'AM';\n\n if (hh > 12) {\n h = hh - 12;\n ampm = 'PM';\n } else if (hh === 12) {\n h = 12;\n ampm = 'PM';\n } else if (hh == 0) {\n h = 12;\n }\n\n // ie: 2014-03-24, 3:00 PM\n const time12 = yyyy + '-' + mm + '-' + dd + ', ' + h + ':' + min + ' ' + ampm;\n const time24 = yyyy + '-' + mm + '-' + dd + ', ' + hh + ':' + min;\n return time24;\n}\n\nexport function convertTimestampShort(timestamp: number): string {\n const d = new Date(timestamp), // Convert the passed timestamp to milliseconds\n min = ('0' + d.getMinutes()).slice(-2), // Add leading 0.\n hh = d.getHours();\n let h = hh,\n ampm = 'AM';\n\n if (hh > 12) {\n h = hh - 12;\n ampm = 'PM';\n } else if (hh === 12) {\n h = 12;\n ampm = 'PM';\n } else if (hh == 0) {\n h = 12;\n }\n\n // ie: 3:00 PM\n const time = h + ':' + min + ' ' + ampm;\n return time;\n}\n\nexport function convertTimestampDay(timestamp: number): string {\n const d = new Date(timestamp), // Convert the passed timestamp to milliseconds\n yyyy = d.getFullYear(),\n mm = ('0' + (d.getMonth() + 1)).slice(-2), // Months are zero based. Add leading 0.\n dd = ('0' + d.getDate()).slice(-2); // Add leading 0.\n // min = ('0' + d.getMinutes()).slice(-2), // Add leading 0.\n // hh = d.getHours();\n // let h = hh,\n // ampm = 'AM';\n\n // if (hh > 12) {\n // h = hh - 12;\n // ampm = 'PM';\n // } else if (hh === 12) {\n // h = 12;\n // ampm = 'PM';\n // } else if (hh == 0) {\n // h = 12;\n // }\n\n const time = yyyy + '-' + mm + '-' + dd;\n return time;\n}\n\nexport function getYesterdayTimestamp(): string {\n const yesterday = new Date(new Date().getTime() - (24 * 60 * 60 * 1000));\n const date = yesterday.getFullYear() + '-' + (yesterday.getMonth() + 1) + '-'+yesterday.getDate();\n const time = yesterday.getHours() + \":\" + yesterday.getMinutes() + \":\" + yesterday.getSeconds();\n const dateTime = date+' '+time;\n return dateTime;\n}\n\nexport function getYesterdayUnixTimestamp(): Date {\n const yesterday = new Date(new Date().getTime() - (24 * 60 * 60 * 1000));\n // const date = yesterday.getFullYear() + '-' + (yesterday.getMonth() + 1) + '-'+yesterday.getDate();\n // const time = yesterday.getHours() + \":\" + yesterday.getMinutes() + \":\" + yesterday.getSeconds();\n // const dateTime = date+' '+time;\n return yesterday;\n}\n\nexport function getTwoWeeksAgoTimestamp(): string {\n const yesterday = new Date(new Date().getTime() - (14 * 24 * 60 * 60 * 1000));\n const date = yesterday.getFullYear() + '-' + (yesterday.getMonth() + 1) + '-'+yesterday.getDate();\n const time = yesterday.getHours() + \":\" + yesterday.getMinutes() + \":\" + yesterday.getSeconds();\n const dateTime = date+' '+time;\n return dateTime;\n}","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { Tabs } from 'antd';\nimport { Line } from '@ant-design/charts';\nimport PropTypes from 'prop-types';\nimport * as utilities from '../../data/utilities/utilities';\n\n\nconst SensorDataChart: React.FC<{ sensorData: Record[]>, type: string }> = ({sensorData, type}) => {\n const { TabPane } = Tabs;\n\n const startTime = utilities.getYesterdayUnixTimestamp();\n const verifyDate = utilities.convertTimestamp(Number(startTime));\n\n let min = -25;\n let max = 40;\n let threshold = 0;\n\n if (type === 'Chiller') {\n min = 0;\n max = 25;\n threshold = 5;\n } else if (type === 'Freezer') {\n max = 0;\n threshold = -15;\n } else if (type === 'Room') {\n min = 15;\n threshold = 30;\n }\n\n const data = sensorData.getSensorDataByIdByTime;\n data.forEach((element) => {\n element.key = element[\"nodeId\"];\n const timestamp = Number(element['measuredtime']);\n element['timestamp'] = utilities.convertTimestamp(timestamp);\n element['temperature'] = Number(element['temperature']);\n element['humidity'] = Number(element['humidity']);\n });\n\n const config = {\n height: 300,\n data : data,\n xField : 'measuredtime', \n xAxis: {\n label: {\n formatter: (measuredtime: string) => {\n return utilities.convertTimestampDay(Number(measuredtime));\n },\n },\n tickCount: 6,\n },\n point: {\n size: 2,\n shape: 'circle',\n style: {\n fill: 'white',\n stroke: '#5B8FF9',\n lineWidth: 1,\n },\n },\n tooltip: {\n title: (measuredtime: string) => {\n return utilities.convertTimestamp(Number(measuredtime));\n },\n },\n slider: {\n formatter: (measuredtime: string) => {\n return utilities.convertTimestamp(Number(measuredtime));\n },\n },\n }\n\n const configTemperature = { \n ...config,\n yField : 'temperature',\n yAxis: {\n tickCount: 5,\n label: {\n formatter: (val: string | number) => {\n return (+val).toFixed(1) + String.fromCharCode(176) + 'C';\n },\n },\n min: min,\n max: max,\n },\n lineStyle: {\n // stroke: '#fff',\n stroke: '#1890FF',\n lineWidth: 1,\n },\n annotations : [ \n // {\n // type : 'regionFilter',\n // top: true, \n // // start : [ threshold , 'max' ], \n // // end : [ 'max' , threshold ], \n // start: ['min', 'max'],\n // end: ['max', threshold],\n // color : '#F4664A', \n // },\n // {\n // type : 'regionFilter', \n // top: true,\n // // start : [ 'min' , threshold ], \n // // end : [ threshold , 'min' ], \n // start: ['min', threshold],\n // end: ['max', 'min'],\n // color : '#1890FF', \n // },\n {\n type : 'line', \n start : [ 'min' , threshold ], \n end : [ 'max' , threshold ], \n style : { \n stroke : '#F4664A', \n lineDash : [ 2 , 2 ], \n },\n },\n ],\n } ;\n\n const configHumidity = { \n ...config,\n yField : 'humidity',\n lineStyle: {\n stroke: '#1980FF',\n lineWidth: 1,\n },\n yAxis: {\n tickCount: 5,\n label: {\n formatter: (val: string | number) => {\n return (+val).toFixed(0) + '%';\n },\n },\n min: 0,\n max: 100,\n },\n } ;\n\n return (\n \n \n {/* @ts-expect-error */}\n \n \n \n \n \n \n );\n};\n\nSensorDataChart.propTypes = {\n sensorData: PropTypes.any.isRequired,\n type: PropTypes.string.isRequired,\n};\n\nexport default SensorDataChart;","const address = window.location.href;\nlet url: string;\nif (address.includes('localhost')) {\n url = 'http://192.168.16.12:4000';\n} else {\n url = 'https://api.therma.link';\n}\n\nexport const headers = {\n 'Content-Type': 'application/json',\n 'Authorization': '',\n};\n\n// export const organisationId2 = \"fa3a52f6-3766-414d-9106-329265e97ff1\";\n// export const organisationId = \"95e6d7e8-8068-42e4-b2ed-08d84c0df40e\";\n\nexport async function sendQuery(query:string, variables:Record, headers:Record): Promise[]>>> {\n const response = await fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify({ query, variables }), // Coordinate the body type with 'Content-Type'\n });\n return await response.json(); // convert to JSON\n}\n\nexport async function sendQueryReturnObj(query:string, variables:Record, headers:Record): Promise[]>>> {\n const response = await fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify({ query, variables }), // Coordinate the body type with 'Content-Type'\n });\n return await response.json(); // convert to JSON\n}\n\nexport async function sendQueryReturnObjObj(query:string, variables:Record, headers:Record): Promise>>>> {\n const response = await fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify({ query, variables }), // Coordinate the body type with 'Content-Type'\n });\n return await response.json(); // convert to JSON\n}\n\nexport const getSensorDataQuery = 'query{\\\n getSensorData{\\\n nodeId\\\n pressure\\\n temperature\\\n batt\\\n humidity\\\n }\\\n}'\n\nexport const getSensorDataByIdQuery = 'query($nodeId:String){\\\n getSensorDataById(nodeId:$nodeId){\\\n nodeId\\\n pressure\\\n temperature\\\n batt\\\n humidity\\\n arrivedtime\\\n measuredtime\\\n }\\\n}'\n\nexport const getSensorDataByIdByTimeQuery = 'query($nodeId:String,$after:String){\\\n getSensorDataByIdByTime(nodeId:$nodeId,after:$after){\\\n nodeId\\\n pressure\\\n temperature\\\n batt\\\n humidity\\\n arrivedtime\\\n measuredtime\\\n }\\\n}'\n\nexport const getSummaryQuery = 'query{\\\n getSummary(organisationId:\"fa3a52f6-3766-414d-9106-329265e97ff1\")\\\n {\\\n nodeId\\\n max_temperature\\\n min_temperature\\\n avg_temperature\\\n max_humidity\\\n min_humidity\\\n avg_humidity\\\n }\\\n}'\n\nexport const getLatestQuery = 'query{\\\n getLatest(organisationId:\"fa3a52f6-3766-414d-9106-329265e97ff1\"){\\\n nodeId\\\n pressure\\\n temperature\\\n batt\\\n humidity\\\n arrivedtime\\\n location\\\n locationId\\\n locationType\\\n locationName\\\n alertEnabled\\\n maxThreshold\\\n }\\\n}'\n\nexport const getLatestQueryWithVars = 'query( $organisationId:String ){\\\n getLatest(organisationId:$organisationId){\\\n nodeId\\\n pressure\\\n temperature\\\n batt\\\n humidity\\\n arrivedtime\\\n measuredtime\\\n location\\\n locationId\\\n locationType\\\n locationName\\\n alertEnabled\\\n maxThreshold\\\n }\\\n}'\n\nexport const loginMutation = 'mutation( $email:String!, $password:String! ){\\\n login( data: { email:$email, password:$password } ){\\\n user {\\\n name\\\n email\\\n organisationId\\\n role\\\n }\\\n organisation {\\\n id\\\n name\\\n alertEmail\\\n alertTelegram\\\n reportEmail\\\n }\\\n token\\\n }\\\n}'\n\nexport const addUserMutation = 'mutation( $name:String, $email:String!, $password:String!, $organisationId:String!, $role:String! ){\\\n addUser( data: { name:$name, email:$email, password:$password, organisationId:$organisationId, role:$role } ){\\\n name\\\n email\\\n role\\\n }\\\n}'\n\nexport const updateSensorMutation = 'mutation( $sensorDataInput: sensorDataInput! ){\\\n updateSensor( data: $sensorDataInput ){\\\n nodeId\\\n settings\\\n }\\\n}'\n\nexport const addReportEmailIdMutation = 'mutation($reportEmailDataInput :reportEmailDataInput){\\\n addReportEmailId(data: $reportEmailDataInput){\\\n id\\\n name\\\n alertEmail\\\n reportEmail\\\n alertTelegram\\\n }\\\n}'\n\nexport const addAlertEmailIdMutation = 'mutation($alertEmailDataInput :alertEmailDataInput){\\\n addAlertEmailId(data: $alertEmailDataInput){\\\n id\\\n name\\\n alertEmail\\\n reportEmail\\\n alertTelegram\\\n }\\\n}'\n\nexport const addTelegramChatIdMutation = 'mutation($telegramChatIdDataInput :telegramChatIdDataInput){\\\n addTelegramChatId(data: $telegramChatIdDataInput){\\\n id\\\n name\\\n alertEmail\\\n reportEmail\\\n alertTelegram\\\n }\\\n}'\n\nexport const removeReportEmailIdMutation = 'mutation($reportEmailDataInput :reportEmailDataInput){\\\n removeReportEmailId(data: $reportEmailDataInput){\\\n id\\\n name\\\n alertEmail\\\n reportEmail\\\n alertTelegram\\\n }\\\n}'\n\nexport const removeAlertEmailIdMutation = 'mutation($alertEmailDataInput :alertEmailDataInput){\\\n removeAlertEmailId(data: $alertEmailDataInput){\\\n id\\\n name\\\n alertEmail\\\n reportEmail\\\n alertTelegram\\\n }\\\n}'\n\nexport const removeTelegramChatIdMutation = 'mutation($telegramChatIdDataInput :telegramChatIdDataInput){\\\n removeTelegramChatId(data: $telegramChatIdDataInput){\\\n id\\\n name\\\n alertEmail\\\n reportEmail\\\n alertTelegram\\\n }\\\n}'\n\n\n","import { useState, useEffect } from 'react';\nimport { Form, Input, InputNumber, Button, Checkbox, message } from 'antd';\nimport { InfoCircleOutlined } from '@ant-design/icons';\nimport PropTypes from 'prop-types';\nimport * as queries from '../../../data/api/queries';\nimport './SensorSettingsForm.css';\n\ninterface Props {\n sensorParams: Record,\n onSubmit: () => void\n}\n\nconst SensorSettingsForm: React.FC = (props) => {\n const [form] = Form.useForm();\n\n const [isAlertEnabled] = useState(props.sensorParams.alertEnabled == 'true');\n const [maxThreshold] = useState(parseInt(props.sensorParams.maxThreshold));\n const [locationName] = useState(props.sensorParams.locationName);\n const sensorDataInput = {\n sensorDataInput: {\n nodeId: props.sensorParams.nodeId,\n settings: {\n alertEnabled: props.sensorParams.alertEnabled,\n maxThreshold: props.sensorParams.maxThreshold,\n },\n location: {\n name: props.sensorParams.locationName,\n },\n },\n }\n\n const defaultValues = {\n name: props.sensorParams.locationName, threshold: parseInt(props.sensorParams.maxThreshold), alert:props.sensorParams.alertEnabled === 'true',\n }\n useEffect(() => {\n form.setFieldsValue(defaultValues)\n }, [form, defaultValues])\n\n const onFinish = (values: Record) => {\n if (values.name !== locationName) {\n sensorDataInput.sensorDataInput.location.name = values.name;\n }\n if (values.threshold !== maxThreshold) {\n sensorDataInput.sensorDataInput.settings.maxThreshold = values.threshold;\n }\n if (values.alert !== isAlertEnabled) {\n sensorDataInput.sensorDataInput.settings.alertEnabled = values.alert.toString();\n }\n\n const query = queries.updateSensorMutation;\n const { headers } = queries;\n headers['Authorization'] = localStorage.getItem('Authorization') ?? '';\n const variables = sensorDataInput;\n console.log(variables);\n\n form.resetFields();\n\n queries.sendQueryReturnObjObj(query, variables, headers)\n .then((data) => {\n console.log(data);\n if ('errors' in data) {\n props.onSubmit();\n if (data.errors.message) {\n message.error(data.errors.message);\n } else if (data.errors[0].message) {\n message.error(data.errors[0].message);\n } else {\n message.error('Data unavailable');\n }\n } else {\n props.onSubmit();\n console.log(data.data);\n message.success('Settings were updated successfully');\n }\n })\n\n };\n\n return (\n \n \n \n \n\n ,\n }}\n >\n \n \n\n \n Alert enabled\n \n\n \n \n \n \n );\n};\n\nSensorSettingsForm.propTypes = {\n sensorParams: PropTypes.any.isRequired,\n onSubmit: PropTypes.func.isRequired,\n};\n\nexport default SensorSettingsForm;","import { Form, Button, Input, message } from 'antd';\nimport PropTypes from 'prop-types';\nimport * as queries from '../../../data/api/queries';\nimport './AddUserForm.css';\n\ninterface Props {\n onOk: () => void\n}\n\nconst AddUserForm: React.FC = (props) => {\n const [form] = Form.useForm();\n\n const onFinish = (values: Record) => {\n console.log(values.name);\n console.log(values.email);\n console.log(values.password);\n\n const query = queries.addUserMutation;\n const { headers } = queries;\n headers['Authorization'] = localStorage.getItem('Authorization') ?? '';\n const variables = {\n name: values.name,\n email: values.email,\n password: values.password,\n organisationId: localStorage.getItem('OrganisationId'),\n role: 'user',\n }\n\n form.resetFields();\n\n queries.sendQueryReturnObjObj(query, variables, headers)\n .then((data) => {\n console.log(data);\n if ('errors' in data) {\n props.onOk();\n if (data.errors.message) {\n message.error(data.errors.message);\n } else if (data.errors[0].message) {\n message.error(data.errors[0].message);\n } else {\n message.error('Data unavailable');\n }\n } else {\n props.onOk();\n console.log(data.data);\n message.success(data.data.addUser.name + ' was created successfully');\n }\n })\n }\n\n return (\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n );\n};\n\nAddUserForm.propTypes = {\n onOk: PropTypes.func.isRequired,\n};\n\nexport default AddUserForm;","import './StateMarker.css';\nimport PropTypes from 'prop-types';\n\nconst StateMarker: React.FC<{ type: string }> = ({type}) => {\n return (\n
\n );\n};\n\nStateMarker.propTypes = {\n type: PropTypes.oneOf(['warning', 'default', 'success', 'danger', 'info']).isRequired,\n};\n\nexport default StateMarker;","import { useState } from 'react';\nimport { Table, Form, Button, Input, Row, Col, Typography, message } from 'antd';\nimport { ColumnsType } from 'antd/es/table';\nimport PropTypes from 'prop-types';\nimport * as validators from '../../../data/utilities/validators';\nimport * as queries from '../../../data/api/queries';\nimport './NotificationsTable.css';\n\ninterface Props {\n orgParams: Record,\n onSubmit: () => void,\n type: string,\n}\n\nconst NotificationsTable: React.FC = (props) => {\n const { Text } = Typography;\n const { TextArea } = Input;\n const [form] = Form.useForm();\n\n const [orgParams, setOrgParams] = useState((props.orgParams));\n const [addedIdsValid, setAddedIdsValid] = useState(false);\n const [addInputStatus, setAddInpitStatus] = useState<'success'|'error'>('success');\n\n const processQuery = (data: string[], addOrRemove: 'add'|'remove') => {\n let query;\n let variables;\n if (props.type === 'reportEmail') {\n query = addOrRemove == 'add' ? queries.addReportEmailIdMutation : queries.removeReportEmailIdMutation;\n variables = { reportEmailDataInput: {reportEmail: data}};\n } else if (props.type === 'alertEmail') {\n query = addOrRemove == 'add' ? queries.addAlertEmailIdMutation : queries.removeAlertEmailIdMutation;\n variables = { alertEmailDataInput: {alertEmail: data}};\n } else {\n query = addOrRemove == 'add' ? queries.addTelegramChatIdMutation : queries.removeTelegramChatIdMutation;\n variables = { telegramChatIdDataInput: {chatId: data}};\n }\n const { headers } = queries;\n headers['Authorization'] = localStorage.getItem('Authorization') ?? '';\n\n form.resetFields();\n\n queries.sendQueryReturnObjObj(query, variables, headers)\n .then((data) => {\n if ('errors' in data) {\n props.onSubmit();\n if (data.errors.message) {\n message.error(data.errors.message);\n } else if (data.errors[0].message) {\n message.error(data.errors[0].message);\n } else {\n message.error('Data unavailable');\n }\n } else {\n let extension;\n if (props.type === 'reportEmail') {\n extension = addOrRemove == 'add' ? 'addReportEmailId' : 'removeReportEmailId';\n } else if (props.type === 'alertEmail') {\n extension = addOrRemove == 'add' ? 'addAlertEmailId' : 'removeAlertEmailId';\n } else {\n extension = addOrRemove == 'add' ? 'addTelegramChatId' : 'removeTelegramChatId';\n }\n setOrgParams(data.data[extension]);\n setAddedIdsValid(false);\n setHasSelected(false);\n localStorage.setItem('OrganisationDetails', JSON.stringify(data.data[extension]));\n const messageContent = addOrRemove == 'add' ? 'IDs were added successfully' : 'IDs were removed successfully';\n message.success(messageContent);\n }\n });\n }\n\n const onFinish = (ids: Record) => {\n const idArray: string[] = ids['ids'].split(/(?:,| )+/).map((item: string) => {return item.trim()});\n processQuery(idArray, 'add');\n };\n\n const onChange = (e: any) => {\n const input = e.currentTarget.value;\n const isInputValid = props.type.includes('mail') ? validators.validateEmailIds(input) : validators.validateTelegramChatIDs(input);\n if(input.length > 0 && isInputValid) {\n setAddedIdsValid(true);\n setAddInpitStatus('success');\n } else if (input.length > 0 && !isInputValid) {\n setAddedIdsValid(false);\n setAddInpitStatus('error');\n } else {\n setAddedIdsValid(false);\n setAddInpitStatus('success');\n }\n };\n\n const [hasSelected, setHasSelected] = useState(false);\n const [selectedRows, setSelectedRows] = useState([{}]);\n const [selectedIds, setSelectedIds] = useState([]);\n const rowSelection = {\n onChange: (selectedRowKeys: React.Key[], selectedRows: Record[]) => {\n setHasSelected(selectedRows.length > 0);\n setSelectedRows(selectedRows);\n const idsToRemove: string[] = [];\n selectedRows.forEach((row) => {\n idsToRemove.push(row.id);\n })\n setSelectedIds(idsToRemove);\n },\n };\n \n const title = props.type.includes('mail') ? 'Email IDs' : 'Telegram Chat IDs';\n const typeOfIds = props.type.includes('mail') ? 'email' : 'Telegram';\n const typeOfNotificationsShort = props.type.includes('report') ? 'Report ' : 'Alert ';\n const typeOfNotifications = props.type.includes('report') ? 'daily reports.' : 'alerts in case a sensor reports abnormal temperature.';\n const placeholder = 'Enter ' + typeOfIds + ' ID(s) to add; use spaces or commas to separate multiple entries';\n const intro = typeOfNotificationsShort + title + ' are recipients of ' + typeOfNotifications;\n\n const onClickToRemove = () => {\n processQuery(selectedIds, 'remove');\n }\n\n const processRows = (rows: string[]) => {\n const formattedRow: { key: string; id: string; }[] = [];\n rows.forEach((row) => {\n const tempObject = {\n key: row,\n id: row,\n };\n formattedRow.push(tempObject);\n })\n return formattedRow;\n }\n\n const columns: ColumnsType> = [\n {\n title,\n dataIndex: 'id',\n render: (record: string) => {return {record}},\n },\n ]\n\n return (\n <>\n {intro}\n

\n \n \n \n \n