aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modern/src/common/attributes/useCommonDeviceAttributes.js13
-rw-r--r--modern/src/common/attributes/useCommonUserAttributes.js48
-rw-r--r--modern/src/common/attributes/useDeviceAttributes.js23
-rw-r--r--modern/src/common/attributes/useGeofenceAttributes.js12
-rw-r--r--modern/src/common/attributes/useGroupAttributes.js12
-rw-r--r--modern/src/common/attributes/useUserAttributes.js58
-rw-r--r--modern/src/settings/DevicePage.js15
-rw-r--r--modern/src/settings/GroupPage.js8
-rw-r--r--modern/src/settings/ServerPage.js10
-rw-r--r--modern/src/settings/UserPage.js4
10 files changed, 157 insertions, 46 deletions
diff --git a/modern/src/common/attributes/useCommonDeviceAttributes.js b/modern/src/common/attributes/useCommonDeviceAttributes.js
new file mode 100644
index 00000000..8a4d886c
--- /dev/null
+++ b/modern/src/common/attributes/useCommonDeviceAttributes.js
@@ -0,0 +1,13 @@
+import { useMemo } from 'react';
+
+export default (t) => useMemo(() => ({
+ speedLimit: {
+ name: t('attributeSpeedLimit'),
+ type: 'number',
+ subtype: 'speed',
+ },
+ 'report.ignoreOdometer': {
+ name: t('attributeReportIgnoreOdometer'),
+ type: 'boolean',
+ },
+}), [t]);
diff --git a/modern/src/common/attributes/useCommonUserAttributes.js b/modern/src/common/attributes/useCommonUserAttributes.js
new file mode 100644
index 00000000..fa6d7d8f
--- /dev/null
+++ b/modern/src/common/attributes/useCommonUserAttributes.js
@@ -0,0 +1,48 @@
+import { useMemo } from 'react';
+
+export default (t) => useMemo(() => ({
+ notificationTokens: {
+ name: t('attributeNotificationTokens'),
+ type: 'string',
+ },
+ /* 'web.liveRouteLength': {
+ name: t('attributeWebLiveRouteLength'),
+ type: 'number',
+ },
+ 'web.selectZoom': {
+ name: t('attributeWebSelectZoom'),
+ type: 'number',
+ },
+ 'web.maxZoom': {
+ name: t('attributeWebMaxZoom'),
+ type: 'number',
+ },
+ 'ui.disableEvents': {
+ name: t('attributeUiDisableEvents'),
+ type: 'boolean',
+ },
+ 'ui.disableVehicleFetures': {
+ name: t('attributeUiDisableVehicleFetures'),
+ type: 'boolean',
+ },
+ 'ui.disableDrivers': {
+ name: t('attributeUiDisableDrivers'),
+ type: 'boolean',
+ },
+ 'ui.disableComputedAttributes': {
+ name: t('attributeUiDisableComputedAttributes'),
+ type: 'boolean',
+ },
+ 'ui.disableCalendars': {
+ name: t('attributeUiDisableCalendars'),
+ type: 'boolean',
+ },
+ 'ui.disableMaintenance': {
+ name: t('attributeUiDisableMaintenance'),
+ type: 'boolean',
+ },
+ 'ui.hidePositionAttributes': {
+ name: t('attributeUiHidePositionAttributes'),
+ type: 'string',
+ }, */
+}), [t]);
diff --git a/modern/src/common/attributes/useDeviceAttributes.js b/modern/src/common/attributes/useDeviceAttributes.js
index 8a4d886c..34ddb64c 100644
--- a/modern/src/common/attributes/useDeviceAttributes.js
+++ b/modern/src/common/attributes/useDeviceAttributes.js
@@ -1,13 +1,24 @@
import { useMemo } from 'react';
export default (t) => useMemo(() => ({
- speedLimit: {
- name: t('attributeSpeedLimit'),
+ devicePassword: {
+ name: t('attributeDevicePassword'),
+ type: 'string',
+ },
+ 'processing.copyAttributes': {
+ name: t('attributeProcessingCopyAttributes'),
+ type: 'string',
+ },
+ 'decoder.timezone': {
+ name: t('sharedTimezone'),
+ type: 'string',
+ },
+ deviceInactivityStart: {
+ name: t('attributeDeviceInactivityStart'),
type: 'number',
- subtype: 'speed',
},
- 'report.ignoreOdometer': {
- name: t('attributeReportIgnoreOdometer'),
- type: 'boolean',
+ deviceInactivityPeriod: {
+ name: t('attributeDeviceInactivityPeriod'),
+ type: 'number',
},
}), [t]);
diff --git a/modern/src/common/attributes/useGeofenceAttributes.js b/modern/src/common/attributes/useGeofenceAttributes.js
index 89908aa5..a5cd068b 100644
--- a/modern/src/common/attributes/useGeofenceAttributes.js
+++ b/modern/src/common/attributes/useGeofenceAttributes.js
@@ -1,8 +1,18 @@
import { useMemo } from 'react';
export default (t) => useMemo(() => ({
+ color: {
+ name: t('attributeColor'),
+ type: 'string',
+ },
speedLimit: {
name: t('attributeSpeedLimit'),
- type: 'string',
+ type: 'number',
+ subtype: 'speed',
+ },
+ polylineDistance: {
+ name: t('attributePolylineDistance'),
+ type: 'number',
+ subtype: 'distance',
},
}), [t]);
diff --git a/modern/src/common/attributes/useGroupAttributes.js b/modern/src/common/attributes/useGroupAttributes.js
new file mode 100644
index 00000000..53a299e1
--- /dev/null
+++ b/modern/src/common/attributes/useGroupAttributes.js
@@ -0,0 +1,12 @@
+import { useMemo } from 'react';
+
+export default (t) => useMemo(() => ({
+ 'processing.copyAttributes': {
+ name: t('attributeProcessingCopyAttributes'),
+ type: 'string',
+ },
+ 'decoder.timezone': {
+ name: t('sharedTimezone'),
+ type: 'string',
+ },
+}), [t]);
diff --git a/modern/src/common/attributes/useUserAttributes.js b/modern/src/common/attributes/useUserAttributes.js
index fa6d7d8f..56dee060 100644
--- a/modern/src/common/attributes/useUserAttributes.js
+++ b/modern/src/common/attributes/useUserAttributes.js
@@ -1,48 +1,48 @@
import { useMemo } from 'react';
export default (t) => useMemo(() => ({
- notificationTokens: {
- name: t('attributeNotificationTokens'),
+ 'mail.smtp.host': {
+ name: t('attributeMailSmtpHost'),
type: 'string',
},
- /* 'web.liveRouteLength': {
- name: t('attributeWebLiveRouteLength'),
+ 'mail.smtp.port': {
+ name: t('attributeMailSmtpPort'),
type: 'number',
},
- 'web.selectZoom': {
- name: t('attributeWebSelectZoom'),
- type: 'number',
- },
- 'web.maxZoom': {
- name: t('attributeWebMaxZoom'),
- type: 'number',
- },
- 'ui.disableEvents': {
- name: t('attributeUiDisableEvents'),
+ 'mail.smtp.starttls.enable': {
+ name: t('attributeMailSmtpStarttlsEnable'),
type: 'boolean',
},
- 'ui.disableVehicleFetures': {
- name: t('attributeUiDisableVehicleFetures'),
+ 'mail.smtp.starttls.required': {
+ name: t('attributeMailSmtpStarttlsRequired'),
type: 'boolean',
},
- 'ui.disableDrivers': {
- name: t('attributeUiDisableDrivers'),
+ 'mail.smtp.ssl.enable': {
+ name: t('attributeMailSmtpSslEnable'),
type: 'boolean',
},
- 'ui.disableComputedAttributes': {
- name: t('attributeUiDisableComputedAttributes'),
- type: 'boolean',
+ 'mail.smtp.ssl.trust': {
+ name: t('attributeMailSmtpSslTrust'),
+ type: 'string',
},
- 'ui.disableCalendars': {
- name: t('attributeUiDisableCalendars'),
- type: 'boolean',
+ 'mail.smtp.ssl.protocols': {
+ name: t('attributeMailSmtpSslProtocols'),
+ type: 'string',
+ },
+ 'mail.smtp.from': {
+ name: t('attributeMailSmtpFrom'),
+ type: 'string',
},
- 'ui.disableMaintenance': {
- name: t('attributeUiDisableMaintenance'),
+ 'mail.smtp.auth': {
+ name: t('attributeMailSmtpAuth'),
type: 'boolean',
},
- 'ui.hidePositionAttributes': {
- name: t('attributeUiHidePositionAttributes'),
+ 'mail.smtp.username': {
+ name: t('attributeMailSmtpUsername'),
type: 'string',
- }, */
+ },
+ 'mail.smtp.password': {
+ name: t('attributeMailSmtpPassword'),
+ type: 'string',
+ },
}), [t]);
diff --git a/modern/src/settings/DevicePage.js b/modern/src/settings/DevicePage.js
index 491ba60f..56a589dc 100644
--- a/modern/src/settings/DevicePage.js
+++ b/modern/src/settings/DevicePage.js
@@ -15,6 +15,7 @@ import { useTranslation } from '../common/components/LocalizationProvider';
import useDeviceAttributes from '../common/attributes/useDeviceAttributes';
import { useAdministrator } from '../common/util/permissions';
import SettingsMenu from './components/SettingsMenu';
+import useCommonDeviceAttributes from '../common/attributes/useCommonDeviceAttributes';
const useStyles = makeStyles(() => ({
details: {
@@ -28,6 +29,7 @@ const DevicePage = () => {
const admin = useAdministrator();
+ const commonDeviceAttributes = useCommonDeviceAttributes(t);
const deviceAttributes = useDeviceAttributes(t);
const [item, setItem] = useState();
@@ -134,7 +136,7 @@ const DevicePage = () => {
<EditAttributesView
attributes={item.attributes}
setAttributes={(attributes) => setItem({ ...item, attributes })}
- definitions={deviceAttributes}
+ definitions={{ ...commonDeviceAttributes, ...deviceAttributes }}
/>
</AccordionDetails>
</Accordion>
@@ -190,6 +192,17 @@ const DevicePage = () => {
/>
<LinkField
margin="normal"
+ endpointAll="/api/commands"
+ endpointLinked={`/api/commands?deviceId=${item.id}`}
+ baseId={item.id}
+ keyBase="deviceId"
+ keyLink="commandId"
+ titleGetter={(it) => it.description}
+ label={t('sharedSavedCommands')}
+ variant="filled"
+ />
+ <LinkField
+ margin="normal"
endpointAll="/api/maintenance"
endpointLinked={`/api/maintenance?deviceId=${item.id}`}
baseId={item.id}
diff --git a/modern/src/settings/GroupPage.js b/modern/src/settings/GroupPage.js
index f56a2fd3..3d4769f3 100644
--- a/modern/src/settings/GroupPage.js
+++ b/modern/src/settings/GroupPage.js
@@ -7,10 +7,11 @@ import {
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
import EditItemView from './components/EditItemView';
import EditAttributesView from './components/EditAttributesView';
-import useDeviceAttributes from '../common/attributes/useDeviceAttributes';
import SelectField from '../common/components/SelectField';
import { useTranslation } from '../common/components/LocalizationProvider';
import SettingsMenu from './components/SettingsMenu';
+import useCommonDeviceAttributes from '../common/attributes/useCommonDeviceAttributes';
+import useGroupAttributes from '../common/attributes/useGroupAttributes';
const useStyles = makeStyles(() => ({
details: {
@@ -22,7 +23,8 @@ const GroupPage = () => {
const classes = useStyles();
const t = useTranslation();
- const deviceAttributes = useDeviceAttributes(t);
+ const commonDeviceAttributes = useCommonDeviceAttributes(t);
+ const groupAttributes = useGroupAttributes(t);
const [item, setItem] = useState();
@@ -82,7 +84,7 @@ const GroupPage = () => {
<EditAttributesView
attributes={item.attributes}
setAttributes={(attributes) => setItem({ ...item, attributes })}
- definitions={deviceAttributes}
+ definitions={{ ...commonDeviceAttributes, ...groupAttributes }}
/>
</AccordionDetails>
</Accordion>
diff --git a/modern/src/settings/ServerPage.js b/modern/src/settings/ServerPage.js
index 8943252e..5fdba47b 100644
--- a/modern/src/settings/ServerPage.js
+++ b/modern/src/settings/ServerPage.js
@@ -9,12 +9,12 @@ import { useHistory } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import { sessionActions } from '../store';
import EditAttributesView from './components/EditAttributesView';
-import useDeviceAttributes from '../common/attributes/useDeviceAttributes';
-import useUserAttributes from '../common/attributes/useUserAttributes';
import { useTranslation } from '../common/components/LocalizationProvider';
import SelectField from '../common/components/SelectField';
import PageLayout from '../common/components/PageLayout';
import SettingsMenu from './components/SettingsMenu';
+import useCommonDeviceAttributes from '../common/attributes/useCommonDeviceAttributes';
+import useCommonUserAttributes from '../common/attributes/useCommonUserAttributes';
const useStyles = makeStyles((theme) => ({
container: {
@@ -38,8 +38,8 @@ const ServerPage = () => {
const dispatch = useDispatch();
const t = useTranslation();
- const userAttributes = useUserAttributes(t);
- const deviceAttributes = useDeviceAttributes(t);
+ const commonUserAttributes = useCommonUserAttributes(t);
+ const commonDeviceAttributes = useCommonDeviceAttributes(t);
const original = useSelector((state) => state.session.server);
const [item, setItem] = useState({ ...original });
@@ -218,7 +218,7 @@ const ServerPage = () => {
<EditAttributesView
attributes={item.attributes}
setAttributes={(attributes) => setItem({ ...item, attributes })}
- definitions={{ ...userAttributes, ...deviceAttributes }}
+ definitions={{ ...commonUserAttributes, ...commonDeviceAttributes }}
/>
</AccordionDetails>
</Accordion>
diff --git a/modern/src/settings/UserPage.js b/modern/src/settings/UserPage.js
index 1fb7103f..10e49690 100644
--- a/modern/src/settings/UserPage.js
+++ b/modern/src/settings/UserPage.js
@@ -14,6 +14,7 @@ import useUserAttributes from '../common/attributes/useUserAttributes';
import { sessionActions } from '../store';
import SelectField from '../common/components/SelectField';
import SettingsMenu from './components/SettingsMenu';
+import useCommonUserAttributes from '../common/attributes/useCommonUserAttributes';
const useStyles = makeStyles(() => ({
details: {
@@ -28,6 +29,7 @@ const UserPage = () => {
const currentUserId = useSelector((state) => state.session.user.id);
+ const commonUserAttributes = useCommonUserAttributes(t);
const userAttributes = useUserAttributes(t);
const [item, setItem] = useState();
@@ -159,7 +161,7 @@ const UserPage = () => {
<EditAttributesView
attributes={item.attributes}
setAttributes={(attributes) => setItem({ ...item, attributes })}
- definitions={userAttributes}
+ definitions={{ ...commonUserAttributes, ...userAttributes }}
/>
</AccordionDetails>
</Accordion>