diff --git a/interface/src/components/layout/LayoutMenu.tsx b/interface/src/components/layout/LayoutMenu.tsx
index 9a43749c1..ec1ca6e92 100644
--- a/interface/src/components/layout/LayoutMenu.tsx
+++ b/interface/src/components/layout/LayoutMenu.tsx
@@ -131,7 +131,11 @@ const LayoutMenu: FC = () => {
-
+
diff --git a/interface/src/framework/Settings.tsx b/interface/src/framework/Settings.tsx
index 5c8290b28..7ecb07166 100644
--- a/interface/src/framework/Settings.tsx
+++ b/interface/src/framework/Settings.tsx
@@ -34,7 +34,7 @@ const Settings: FC = () => {
-
+
@@ -142,7 +142,7 @@ const Settings: FC = () => {
-
+
diff --git a/interface/src/project/Devices.tsx b/interface/src/project/Devices.tsx
index 5ace3f3f2..b8fe104e4 100644
--- a/interface/src/project/Devices.tsx
+++ b/interface/src/project/Devices.tsx
@@ -33,7 +33,7 @@ import { useSort, SortToggleType } from '@table-library/react-table-library/sort
import { Table, Header, HeaderRow, HeaderCell, Body, Row, Cell } from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import { useRequest } from 'alova';
-import { useState, useEffect, useCallback, useLayoutEffect } from 'react';
+import { useState, useEffect, useCallback, useLayoutEffect, useContext } from 'react';
import { IconContext } from 'react-icons';
import { useNavigate } from 'react-router-dom';
@@ -51,10 +51,13 @@ import type { FC } from 'react';
import { dialogStyle } from 'CustomTheme';
import { ButtonRow, SectionContent, MessageBox, useLayoutTitle } from 'components';
+import { AuthenticatedContext } from 'contexts/authentication';
import { useI18nContext } from 'i18n/i18n-react';
const Devices: FC = () => {
const { LL } = useI18nContext();
+ const { me } = useContext(AuthenticatedContext);
+
const [size, setSize] = useState([0, 0]);
const [selectedDeviceValue, setSelectedDeviceValue] = useState();
const [onlyFav, setOnlyFav] = useState(false);
@@ -281,9 +284,9 @@ const Devices: FC = () => {
const customize = () => {
if (selectedDevice == 99) {
- navigate('/settings/customentities');
+ navigate('/customentities');
} else {
- navigate('/settings/customization', { state: selectedDevice });
+ navigate('/customizations', { state: selectedDevice });
}
};
@@ -520,9 +523,11 @@ const Devices: FC = () => {
setShowDeviceInfo(true)}>
-
-
-
+ {me.admin && (
+
+
+
+ )}
@@ -584,7 +589,7 @@ const Devices: FC = () => {
| {renderNameCell(dv)} |
{formatValue(LL, dv.v, dv.u)} |
- {dv.c && !hasMask(dv.id, DeviceEntityMask.DV_READONLY) && (
+ {me.admin && dv.c && !hasMask(dv.id, DeviceEntityMask.DV_READONLY) && (
showDeviceValue(dv)}>
{dv.v === '' && dv.c ? (
diff --git a/interface/src/project/Sensors.tsx b/interface/src/project/Sensors.tsx
index 17364b6d8..d74b88131 100644
--- a/interface/src/project/Sensors.tsx
+++ b/interface/src/project/Sensors.tsx
@@ -27,12 +27,13 @@ import { useI18nContext } from 'i18n/i18n-react';
const Sensors: FC = () => {
const { LL } = useI18nContext();
+ const { me } = useContext(AuthenticatedContext);
+
const [selectedTemperatureSensor, setSelectedTemperatureSensor] = useState();
const [selectedAnalogSensor, setSelectedAnalogSensor] = useState();
const [temperatureDialogOpen, setTemperatureDialogOpen] = useState(false);
const [analogDialogOpen, setAnalogDialogOpen] = useState(false);
const [creating, setCreating] = useState(false);
- const { me } = useContext(AuthenticatedContext);
const { data: sensorData, send: fetchSensorData } = useRequest(() => EMSESP.readSensorData(), {
initialData: {
@@ -220,8 +221,10 @@ const Sensors: FC = () => {
}
const updateTemperatureSensor = (ts: TemperatureSensor) => {
- setSelectedTemperatureSensor(ts);
- setTemperatureDialogOpen(true);
+ if (me.admin) {
+ setSelectedTemperatureSensor(ts);
+ setTemperatureDialogOpen(true);
+ }
};
const onTemperatureDialogClose = () => {
@@ -244,9 +247,11 @@ const Sensors: FC = () => {
};
const updateAnalogSensor = (as: AnalogSensor) => {
- setCreating(false);
- setSelectedAnalogSensor(as);
- setAnalogDialogOpen(true);
+ if (me.admin) {
+ setCreating(false);
+ setSelectedAnalogSensor(as);
+ setAnalogDialogOpen(true);
+ }
};
const onAnalogDialogClose = () => {
diff --git a/mock-api/handler.ts b/mock-api/handler.ts
index bbf6e1542..9dfd6558c 100644
--- a/mock-api/handler.ts
+++ b/mock-api/handler.ts
@@ -412,6 +412,7 @@ const guest_signin = {
access_token:
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Imd1ZXN0IiwiYWRtaW4iOmZhbHNlfQ.E_lylR_vGIQFZUGNwcl5F6OkHoaELGsC5zqhi0pAiJE'
};
+// modify here to simulate admin and guest logins
const signin = admin_signin;
// const signin = guest_signin;
@@ -425,6 +426,7 @@ const EMSESP_CORE_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'coreData';
const EMSESP_SENSOR_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'sensorData';
const EMSESP_DEVICES_ENDPOINT = REST_ENDPOINT_ROOT + 'devices';
const EMSESP_SCANDEVICES_ENDPOINT = REST_ENDPOINT_ROOT + 'scanDevices';
+// for later
// const EMSESP_DEVICEDATA_ENDPOINT = REST_ENDPOINT_ROOT + 'deviceData/:id';
// const EMSESP_DEVICEENTITIES_ENDPOINT = REST_ENDPOINT_ROOT + 'deviceEntities/:id';
const EMSESP_DEVICEDATA_ENDPOINT = REST_ENDPOINT_ROOT + 'deviceData';
|