From f418231b6b2f5e030a0d2dcc390c314602b1f740 Mon Sep 17 00:00:00 2001
From: Anton Tananaev <anton@traccar.org>
Date: Sat, 6 Apr 2024 09:22:10 -0700
Subject: Move modern to the top

---
 src/settings/DeviceConnectionsPage.jsx | 107 +++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 src/settings/DeviceConnectionsPage.jsx

(limited to 'src/settings/DeviceConnectionsPage.jsx')

diff --git a/src/settings/DeviceConnectionsPage.jsx b/src/settings/DeviceConnectionsPage.jsx
new file mode 100644
index 00000000..c711d719
--- /dev/null
+++ b/src/settings/DeviceConnectionsPage.jsx
@@ -0,0 +1,107 @@
+import React from 'react';
+import { useParams } from 'react-router-dom';
+import {
+  Accordion,
+  AccordionSummary,
+  AccordionDetails,
+  Typography,
+  Container,
+} from '@mui/material';
+import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
+import LinkField from '../common/components/LinkField';
+import { useTranslation } from '../common/components/LocalizationProvider';
+import SettingsMenu from './components/SettingsMenu';
+import { formatNotificationTitle } from '../common/util/formatter';
+import PageLayout from '../common/components/PageLayout';
+import useFeatures from '../common/util/useFeatures';
+import useSettingsStyles from './common/useSettingsStyles';
+
+const DeviceConnectionsPage = () => {
+  const classes = useSettingsStyles();
+  const t = useTranslation();
+
+  const { id } = useParams();
+
+  const features = useFeatures();
+
+  return (
+    <PageLayout
+      menu={<SettingsMenu />}
+      breadcrumbs={['settingsTitle', 'sharedDevice', 'sharedConnections']}
+    >
+      <Container maxWidth="xs" className={classes.container}>
+        <Accordion defaultExpanded>
+          <AccordionSummary expandIcon={<ExpandMoreIcon />}>
+            <Typography variant="subtitle1">
+              {t('sharedConnections')}
+            </Typography>
+          </AccordionSummary>
+          <AccordionDetails className={classes.details}>
+            <LinkField
+              endpointAll="/api/geofences"
+              endpointLinked={`/api/geofences?deviceId=${id}`}
+              baseId={id}
+              keyBase="deviceId"
+              keyLink="geofenceId"
+              label={t('sharedGeofences')}
+            />
+            <LinkField
+              endpointAll="/api/notifications"
+              endpointLinked={`/api/notifications?deviceId=${id}`}
+              baseId={id}
+              keyBase="deviceId"
+              keyLink="notificationId"
+              titleGetter={(it) => formatNotificationTitle(t, it)}
+              label={t('sharedNotifications')}
+            />
+            {!features.disableDrivers && (
+              <LinkField
+                endpointAll="/api/drivers"
+                endpointLinked={`/api/drivers?deviceId=${id}`}
+                baseId={id}
+                keyBase="deviceId"
+                keyLink="driverId"
+                titleGetter={(it) => `${it.name} (${it.uniqueId})`}
+                label={t('sharedDrivers')}
+              />
+            )}
+            {!features.disableComputedAttributes && (
+              <LinkField
+                endpointAll="/api/attributes/computed"
+                endpointLinked={`/api/attributes/computed?deviceId=${id}`}
+                baseId={id}
+                keyBase="deviceId"
+                keyLink="attributeId"
+                titleGetter={(it) => it.description}
+                label={t('sharedComputedAttributes')}
+              />
+            )}
+            {!features.disableSavedCommands && (
+              <LinkField
+                endpointAll="/api/commands"
+                endpointLinked={`/api/commands?deviceId=${id}`}
+                baseId={id}
+                keyBase="deviceId"
+                keyLink="commandId"
+                titleGetter={(it) => it.description}
+                label={t('sharedSavedCommands')}
+              />
+            )}
+            {!features.disableMaintenance && (
+              <LinkField
+                endpointAll="/api/maintenance"
+                endpointLinked={`/api/maintenance?deviceId=${id}`}
+                baseId={id}
+                keyBase="deviceId"
+                keyLink="maintenanceId"
+                label={t('sharedMaintenance')}
+              />
+            )}
+          </AccordionDetails>
+        </Accordion>
+      </Container>
+    </PageLayout>
+  );
+};
+
+export default DeviceConnectionsPage;
-- 
cgit v1.2.3

