diff --git a/src/pages/403.tsx b/src/pages/403.tsx
index 5f1e2b3..f59289d 100644
--- a/src/pages/403.tsx
+++ b/src/pages/403.tsx
@@ -5,6 +5,7 @@ import { strings } from '../shared/strings/strings';
import { redirect, useNavigate } from 'react-router-dom';
import { routesPath } from '../router/routes.path';
import { Context } from '..';
+import { observer } from 'mobx-react-lite';
const Forbidden = () => {
@@ -29,4 +30,4 @@ const Forbidden = () => {
);
};
-export default Forbidden;
\ No newline at end of file
+export default observer(Forbidden);
\ No newline at end of file
diff --git a/src/pages/404.tsx b/src/pages/404.tsx
index dcf3e64..a78e85e 100644
--- a/src/pages/404.tsx
+++ b/src/pages/404.tsx
@@ -5,6 +5,7 @@ import { strings } from '../shared/strings/strings';
import { redirect, useNavigate } from 'react-router-dom';
import { routesPath } from '../router/routes.path';
import { Context } from '..';
+import { observer } from 'mobx-react-lite';
const NotFound = () => {
@@ -29,4 +30,4 @@ const NotFound = () => {
);
};
-export default NotFound;
\ No newline at end of file
+export default observer(NotFound);
\ No newline at end of file
diff --git a/src/pages/AccessSettings.tsx b/src/pages/AccessSettings.tsx
index 4ab844f..d6141a5 100644
--- a/src/pages/AccessSettings.tsx
+++ b/src/pages/AccessSettings.tsx
@@ -12,6 +12,7 @@ import { Context } from '..';
import { strings } from '../shared/strings/strings';
import { useAdminRole } from '../hooks/useAdminRole';
import Forbidden from './403';
+import { observer } from 'mobx-react-lite';
const AccessSettings = () => {
const { data, isPending, isError, refetch } = useQuery({
@@ -64,4 +65,4 @@ const AccessSettings = () => {
);
};
-export default AccessSettings;
\ No newline at end of file
+export default observer(AccessSettings);
\ No newline at end of file
diff --git a/src/pages/FrigateHostsPage.tsx b/src/pages/FrigateHostsPage.tsx
index 1072741..75c3583 100644
--- a/src/pages/FrigateHostsPage.tsx
+++ b/src/pages/FrigateHostsPage.tsx
@@ -12,7 +12,7 @@ import { observer } from 'mobx-react-lite'
import { useAdminRole } from '../hooks/useAdminRole';
import Forbidden from './403';
-const FrigateHostsPage = observer(() => {
+const FrigateHostsPage = () => {
const queryClient = useQueryClient()
const { isPending: hostsPending, error: hostsError, data } = useQuery({
queryKey: [frigateQueryKeys.getFrigateHosts],
@@ -89,6 +89,6 @@ const FrigateHostsPage = observer(() => {
);
-})
+}
-export default FrigateHostsPage;
\ No newline at end of file
+export default observer(FrigateHostsPage);
\ No newline at end of file
diff --git a/src/pages/HostConfigPage.tsx b/src/pages/HostConfigPage.tsx
index 2d5102c..22bafb9 100644
--- a/src/pages/HostConfigPage.tsx
+++ b/src/pages/HostConfigPage.tsx
@@ -11,6 +11,7 @@ import CenterLoader from '../shared/components/loaders/CenterLoader';
import RetryErrorPage from './RetryErrorPage';
import { useAdminRole } from '../hooks/useAdminRole';
import Forbidden from './403';
+import { observer } from 'mobx-react-lite';
const HostConfigPage = () => {
@@ -115,4 +116,4 @@ const HostConfigPage = () => {
}
-export default HostConfigPage;
\ No newline at end of file
+export default observer(HostConfigPage);
\ No newline at end of file
diff --git a/src/pages/HostStoragePage.tsx b/src/pages/HostStoragePage.tsx
index 6fcd1a7..1a64951 100644
--- a/src/pages/HostStoragePage.tsx
+++ b/src/pages/HostStoragePage.tsx
@@ -3,6 +3,7 @@ import { useParams } from 'react-router-dom';
import { Context } from '..';
import { useAdminRole } from '../hooks/useAdminRole';
import Forbidden from './403';
+import { observer } from 'mobx-react-lite';
const HostStoragePage = () => {
let { id } = useParams<'id'>()
@@ -25,4 +26,4 @@ const HostStoragePage = () => {
);
};
-export default HostStoragePage;
\ No newline at end of file
+export default observer(HostStoragePage);
\ No newline at end of file
diff --git a/src/pages/HostSystemPage.tsx b/src/pages/HostSystemPage.tsx
index 6856a8a..7fa6c8c 100644
--- a/src/pages/HostSystemPage.tsx
+++ b/src/pages/HostSystemPage.tsx
@@ -3,6 +3,7 @@ import { useParams } from 'react-router-dom';
import { Context } from '..';
import { useAdminRole } from '../hooks/useAdminRole';
import Forbidden from './403';
+import { observer } from 'mobx-react-lite';
const HostSystemPage = () => {
let { id } = useParams<'id'>()
@@ -24,4 +25,4 @@ const HostSystemPage = () => {
);
};
-export default HostSystemPage;
\ No newline at end of file
+export default observer(HostSystemPage);
\ No newline at end of file
diff --git a/src/pages/LiveCameraPage.tsx b/src/pages/LiveCameraPage.tsx
index 673c1ee..3022208 100644
--- a/src/pages/LiveCameraPage.tsx
+++ b/src/pages/LiveCameraPage.tsx
@@ -12,7 +12,7 @@ import { strings } from '../shared/strings/strings';
import { routesPath } from '../router/routes.path';
import { recordingsPageQuery } from './RecordingsPage';
-const LiveCameraPage = observer(() => {
+const LiveCameraPage = () => {
const navigate = useNavigate()
let { id: cameraId } = useParams<'id'>()
if (!cameraId) throw Error('Camera id does not exist')
@@ -52,6 +52,6 @@ const LiveCameraPage = observer(() => {
);
-})
+}
-export default LiveCameraPage;
\ No newline at end of file
+export default observer(LiveCameraPage)
\ No newline at end of file
diff --git a/src/pages/PlayRecordPage.tsx b/src/pages/PlayRecordPage.tsx
index 16cfe6b..43a5c03 100644
--- a/src/pages/PlayRecordPage.tsx
+++ b/src/pages/PlayRecordPage.tsx
@@ -6,6 +6,7 @@ import { proxyURL } from '../shared/env.const';
import { proxyApi } from '../services/frigate.proxy/frigate.api';
import NotFound from './404';
import { Context } from '..';
+import { observer } from 'mobx-react-lite';
export const playRecordPageQuery = {
link: 'link',
@@ -33,4 +34,4 @@ const PlayRecordPage = () => {
);
};
-export default PlayRecordPage;
\ No newline at end of file
+export default observer(PlayRecordPage);
\ No newline at end of file
diff --git a/src/pages/RecordingsPage.tsx b/src/pages/RecordingsPage.tsx
index 8ac3122..e4b1fee 100644
--- a/src/pages/RecordingsPage.tsx
+++ b/src/pages/RecordingsPage.tsx
@@ -20,7 +20,7 @@ export const recordingsPageQuery = {
hour: 'hour',
}
-const RecordingsPage = observer(() => {
+const RecordingsPage = () => {
const { sideBarsStore, recordingsStore: recStore } = useContext(Context)
const location = useLocation()
@@ -123,6 +123,6 @@ const RecordingsPage = observer(() => {
}
)
-})
+}
-export default RecordingsPage
\ No newline at end of file
+export default observer(RecordingsPage)
\ No newline at end of file
diff --git a/src/pages/RetryErrorPage.tsx b/src/pages/RetryErrorPage.tsx
index 5967487..ec6ec28 100644
--- a/src/pages/RetryErrorPage.tsx
+++ b/src/pages/RetryErrorPage.tsx
@@ -5,6 +5,7 @@ import { strings } from '../shared/strings/strings';
import { useNavigate } from 'react-router-dom';
import { ExclamationCogWheel } from '../shared/components/svg/ExclamationCogWheel';
import { Context } from '..';
+import { observer } from 'mobx-react-lite';
interface RetryErrorPageProps {
onRetry?: () => void
@@ -14,8 +15,6 @@ const RetryErrorPage = ({ onRetry }: RetryErrorPageProps) => {
const navigate = useNavigate()
const { sideBarsStore } = useContext(Context)
-
-
useEffect(() => {
sideBarsStore.setLeftChildren(null)
sideBarsStore.setRightChildren(null)
@@ -48,4 +47,4 @@ const RetryErrorPage = ({ onRetry }: RetryErrorPageProps) => {
);
};
-export default RetryErrorPage;
\ No newline at end of file
+export default observer(RetryErrorPage);
\ No newline at end of file
diff --git a/src/pages/SettingsPage.tsx b/src/pages/SettingsPage.tsx
index 86d8965..7b28bb8 100644
--- a/src/pages/SettingsPage.tsx
+++ b/src/pages/SettingsPage.tsx
@@ -16,6 +16,7 @@ import { GetConfig } from '../services/frigate.proxy/frigate.schema';
import { Context } from '..';
import { useAdminRole } from '../hooks/useAdminRole';
import Forbidden from './403';
+import { observer } from 'mobx-react-lite';
const SettingsPage = () => {
const queryClient = useQueryClient()
@@ -133,4 +134,4 @@ const SettingsPage = () => {
);
};
-export default SettingsPage;
\ No newline at end of file
+export default observer(SettingsPage);
\ No newline at end of file
diff --git a/src/services/frigate.proxy/frigate.api.ts b/src/services/frigate.proxy/frigate.api.ts
index 93a45cb..a254e97 100644
--- a/src/services/frigate.proxy/frigate.api.ts
+++ b/src/services/frigate.proxy/frigate.api.ts
@@ -27,8 +27,9 @@ instanceApi.interceptors.request.use(
config => {
const token = getToken();
if (token) {
- config.headers.Authorization = `Bearer ${token}`;
+ config.headers.Authorization = `Bearer ${token}`
}
+ config.timeout = 60 * 1000
return config;
},
error => Promise.reject(error)
@@ -40,7 +41,6 @@ export const frigateApi = {
getHosts: () => instanceApi.get('apiv1/frigate-hosts').then(res => {
return res.data
}),
- // TODO change request to cameras
getHost: (id: string) => instanceApi.get(`apiv1/frigate-hosts/${id}`).then(res => {
return res.data
}),
@@ -100,7 +100,10 @@ export const proxyApi = {
cameraName: string,
timezone: string,
) =>
- instanceApi.get(`proxy/${hostName}/api/${cameraName}/recordings/summary`, { params: { timezone } }).then(res => res.data),
+ instanceApi.get(`proxy/${hostName}/api/${cameraName}/recordings/summary`, {
+ params: { timezone },
+ timeout: 5 * 60 * 1000
+ }).then(res => res.data),
// E.g. http://127.0.0.1:5000/api/events?before=1708534799&after=1708448400&camera=CameraName&has_clip=1&include_thumbnails=0&limit=5000
getEvents: (
@@ -133,7 +136,6 @@ export const proxyApi = {
getEventsSummary: (hostName: string, cameraName: string) =>
instanceApi.get(`proxy/${hostName}/api/${cameraName}/events/summary`).then(res => res.data),
- getEventsInProgress: (hostName: string) => instanceApi.get(`proxy/${hostName}/api/events?in_progress=1&include_thumbnails=0`),
cameraWsURL: (hostName: string, cameraName: string) =>
`ws://${proxyURL.host}/proxy-ws/${hostName}/live/jsmpeg/${cameraName}`,
cameraImageURL: (hostName: string, cameraName: string) =>
@@ -154,10 +156,8 @@ export const proxyApi = {
},
getExportedVideoList: (hostName: string) => instanceApi.get(`proxy/${hostName}/exports/`).then(res => res.data),
getVideoUrl: (hostName: string, fileName: string) => `${proxyPrefix}${hostName}/exports/${fileName}`,
- deleteExportedVideo: (hostName: string, videoName: string) => instanceApi.delete(`proxy/${hostName}/api/export/${videoName}`).then(res => res.data)
-
// filename example Home_1_Backyard_2024_02_26_16_25__2024_02_26_16_26.mp4
-
+ deleteExportedVideo: (hostName: string, videoName: string) => instanceApi.delete(`proxy/${hostName}/api/export/${videoName}`).then(res => res.data)
}
export const mapCamerasFromConfig = (config: FrigateConfig): string[] => {
diff --git a/src/services/frigate.proxy/frigate.schema.ts b/src/services/frigate.proxy/frigate.schema.ts
index 4ec9211..c17ed4d 100644
--- a/src/services/frigate.proxy/frigate.schema.ts
+++ b/src/services/frigate.proxy/frigate.schema.ts
@@ -1,4 +1,4 @@
-import { any, z } from "zod";
+import { z } from "zod";
import { CameraConfig, FrigateConfig } from "../../types/frigateConfig";
export const putConfigSchema = z.object({
diff --git a/src/shared/components/SideBar.tsx b/src/shared/components/SideBar.tsx
index ddb3795..89a3d51 100644
--- a/src/shared/components/SideBar.tsx
+++ b/src/shared/components/SideBar.tsx
@@ -42,7 +42,6 @@ const SideBar = ({ isHidden, side, children }: SideBarProps) => {
}
const { sideBarsStore } = useContext(Context)
-
useEffect(() => {
if (sideBarsStore.rightVisible && side === 'right' && !visible) {
open()
diff --git a/src/shared/components/UserMenu.tsx b/src/shared/components/UserMenu.tsx
index 63498cb..1f71810 100644
--- a/src/shared/components/UserMenu.tsx
+++ b/src/shared/components/UserMenu.tsx
@@ -1,11 +1,10 @@
import React, { useState } from 'react';
-import { Avatar, createStyles, Group, Menu, UnstyledButton, Text, Button, Flex } from "@mantine/core";
+import { Avatar, Group, Menu, Text, Button, Flex } from "@mantine/core";
import { useAuth } from 'react-oidc-context';
import { strings } from '../strings/strings';
import { useMediaQuery } from '@mantine/hooks';
import { dimensions } from '../dimensions/dimensions';
import ColorSchemeToggle from './buttons/ColorSchemeToggle';
-import { useNavigate } from 'react-router-dom';
import { keycloakConfig } from '../..';
interface UserMenuProps {
@@ -16,10 +15,9 @@ const UserMenu = ({ user }: UserMenuProps) => {
const [userMenuOpened, setUserMenuOpened] = useState(false);
const auth = useAuth()
const isMiddleScreen = useMediaQuery(dimensions.middleScreenSize)
- const navigate = useNavigate()
const handleAboutMe = () => {
- navigate(`USER_DETAILED_PATH`)
+ throw Error('Not yet implemented')
}
const handleLogout = async () => {
@@ -56,12 +54,12 @@ const UserMenu = ({ user }: UserMenuProps) => {
:
<>>
}
-
+ {/*
{strings.settings}
{strings.aboutMe}
-
+ */}
{strings.logout}
diff --git a/src/shared/components/accordion/CameraAccordion.tsx b/src/shared/components/accordion/CameraAccordion.tsx
index fd8eb10..f935c92 100644
--- a/src/shared/components/accordion/CameraAccordion.tsx
+++ b/src/shared/components/accordion/CameraAccordion.tsx
@@ -12,13 +12,9 @@ import { strings } from '../../strings/strings';
import { RecordSummary } from '../../../types/record';
interface CameraAccordionProps {
- // camera: GetCameraWHostWConfig,
- // host: GetFrigateHost
}
const CameraAccordion = ({
- // camera,
- // host
}: CameraAccordionProps) => {
const { recordingsStore: recStore } = useContext(Context)
diff --git a/src/shared/components/accordion/EventPanel.tsx b/src/shared/components/accordion/EventPanel.tsx
index 1d39fb6..da5108a 100644
--- a/src/shared/components/accordion/EventPanel.tsx
+++ b/src/shared/components/accordion/EventPanel.tsx
@@ -1,4 +1,4 @@
-import { Flex, Group, Button, Text, Image } from '@mantine/core';
+import { Flex, Button, Text } from '@mantine/core';
import { IconExternalLink } from '@tabler/icons-react';
import React from 'react';
import { proxyApi } from '../../../services/frigate.proxy/frigate.api';
diff --git a/src/shared/components/accordion/EventsAccordion.tsx b/src/shared/components/accordion/EventsAccordion.tsx
index d499281..3481740 100644
--- a/src/shared/components/accordion/EventsAccordion.tsx
+++ b/src/shared/components/accordion/EventsAccordion.tsx
@@ -36,7 +36,7 @@ interface EventsAccordionProps {
* @param cameraName e.g Backyard
* @param hostName proxy format, e.g hostName: localhost:4000
*/
-const EventsAccordion = observer(({
+const EventsAccordion = ({
day,
hour,
// TODO labels, score
@@ -184,6 +184,6 @@ const EventsAccordion = observer(({
))}
);
-})
+}
-export default EventsAccordion;
\ No newline at end of file
+export default observer(EventsAccordion);
\ No newline at end of file
diff --git a/src/shared/components/menu/DrawerMenu.tsx b/src/shared/components/menu/DrawerMenu.tsx
index 538f36a..abf6036 100644
--- a/src/shared/components/menu/DrawerMenu.tsx
+++ b/src/shared/components/menu/DrawerMenu.tsx
@@ -1,6 +1,5 @@
-import { Box, Burger, Button, Center, Collapse, Divider, Drawer, Flex, Group, Menu, ScrollArea, UnstyledButton, createStyles, rem, useMantineTheme } from '@mantine/core';
+import { Burger, Drawer, Flex, UnstyledButton, createStyles } from '@mantine/core';
import { useDisclosure } from '@mantine/hooks';
-import { IconChevronDown } from '@tabler/icons-react';
import React from 'react';
import { LinkItem } from '../../../widgets/header/HeaderAction';
import { useNavigate } from 'react-router-dom';
@@ -42,8 +41,6 @@ const DrawerMenu = ({
const { classes } = useStyles();
const [drawerOpened, { toggle: toggleDrawer, close: closeDrawer }] = useDisclosure(false)
- const theme = useMantineTheme();
-
const handleNavigate = (link: string) => {
navigate(link)
diff --git a/src/widgets/SelectedCameraList.tsx b/src/widgets/SelectedCameraList.tsx
index e0049f1..1d69b75 100644
--- a/src/widgets/SelectedCameraList.tsx
+++ b/src/widgets/SelectedCameraList.tsx
@@ -1,14 +1,12 @@
-import { Center, Flex, Text } from '@mantine/core';
+import { Flex, Text } from '@mantine/core';
import React, { Suspense, useContext } from 'react';
import CameraAccordion from '../shared/components/accordion/CameraAccordion';
-import { GetCameraWHostWConfig, GetFrigateHost } from '../services/frigate.proxy/frigate.schema';
import { useQuery } from '@tanstack/react-query';
import { Context } from '..';
import { frigateQueryKeys, frigateApi } from '../services/frigate.proxy/frigate.api';
-import { host } from '../shared/env.const';
-import CogwheelLoader from '../shared/components/loaders/CogwheelLoader';
import RetryErrorPage from '../pages/RetryErrorPage';
import CenterLoader from '../shared/components/loaders/CenterLoader';
+import { observer } from 'mobx-react-lite';
interface SelectedCameraListProps {
}
@@ -47,4 +45,4 @@ const SelectedCameraList = ({
)
};
-export default SelectedCameraList;
\ No newline at end of file
+export default observer(SelectedCameraList);
\ No newline at end of file
diff --git a/src/widgets/SelectedHostList.tsx b/src/widgets/SelectedHostList.tsx
index f4f58fb..b4d5e51 100644
--- a/src/widgets/SelectedHostList.tsx
+++ b/src/widgets/SelectedHostList.tsx
@@ -7,6 +7,7 @@ import { Context } from '..';
import CenterLoader from '../shared/components/loaders/CenterLoader';
import RetryErrorPage from '../pages/RetryErrorPage';
import { strings } from '../shared/strings/strings';
+import { observer } from 'mobx-react-lite';
const CameraAccordion = lazy(() => import('../shared/components/accordion/CameraAccordion'));
@@ -74,4 +75,4 @@ const SelectedHostList = ({
)
};
-export default SelectedHostList;
\ No newline at end of file
+export default observer(SelectedHostList);
\ No newline at end of file