diff --git a/frontend/src/pages/Channels.jsx b/frontend/src/pages/Channels.jsx
index 7663276d..d09f0c41 100644
--- a/frontend/src/pages/Channels.jsx
+++ b/frontend/src/pages/Channels.jsx
@@ -1,14 +1,17 @@
-import React from 'react';
+import React, { lazy, Suspense } from 'react';
import ChannelsTable from '../components/tables/ChannelsTable';
-import StreamsTable from '../components/tables/StreamsTable';
-import { Box } from '@mantine/core';
+const StreamsTable = lazy(() => import('../components/tables/StreamsTable'));
+import { Box, Text } from '@mantine/core';
import { Allotment } from 'allotment';
import { USER_LEVELS } from '../constants';
import useAuthStore from '../store/auth';
import useLocalStorage from '../hooks/useLocalStorage';
+import ErrorBoundary from '../components/ErrorBoundary';
-const ChannelsPage = () => {
+const PageContent = () => {
const authUser = useAuthStore((s) => s.user);
+ if (!authUser.id) throw new Error()
+
const [allotmentSizes, setAllotmentSizes] = useLocalStorage(
'channels-splitter-sizes',
[50, 50]
@@ -22,9 +25,6 @@ const ChannelsPage = () => {
setAllotmentSizes(sizes);
};
- if (!authUser.id) {
- return <>>;
- }
if (authUser.user_level <= USER_LEVELS.STANDARD) {
return (
@@ -34,34 +34,41 @@ const ChannelsPage = () => {
}
return (
-
-
-
+
+
+
+
+
+ Loading...}>
+
+
+
+
+
-
+
+ );
+};
+
+const ChannelsPage = () => {
+ return (
+
+
+
);
};
diff --git a/frontend/src/pages/ContentSources.jsx b/frontend/src/pages/ContentSources.jsx
index 310abb7f..c9eaaffc 100644
--- a/frontend/src/pages/ContentSources.jsx
+++ b/frontend/src/pages/ContentSources.jsx
@@ -2,36 +2,38 @@ import useUserAgentsStore from '../store/userAgents';
import M3UsTable from '../components/tables/M3UsTable';
import EPGsTable from '../components/tables/EPGsTable';
import { Box, Stack } from '@mantine/core';
+import ErrorBoundary from '../components/ErrorBoundary'
-const ErrorBoundary = ({ children }) => {
+const PageContent = () => {
const error = useUserAgentsStore((state) => state.error);
- if (error) {
- return
Error: {error}
;
- }
- return children;
+ if (error) throw new Error(error);
+
+ return (
+
+
+
+
+
+
+
+
+
+ );
}
const M3UPage = () => {
return (
-
-
-
-
-
-
-
-
-
+
);
}
diff --git a/frontend/src/pages/Users.jsx b/frontend/src/pages/Users.jsx
index 570e49c1..e69f07f8 100644
--- a/frontend/src/pages/Users.jsx
+++ b/frontend/src/pages/Users.jsx
@@ -1,55 +1,25 @@
-import React, { useState } from 'react';
import UsersTable from '../components/tables/UsersTable';
import { Box } from '@mantine/core';
import useAuthStore from '../store/auth';
-import { USER_LEVELS } from '../constants';
+import ErrorBoundary from '../components/ErrorBoundary';
-const UsersPage = () => {
+const PageContent = () => {
const authUser = useAuthStore((s) => s.user);
-
- const [selectedUser, setSelectedUser] = useState(null);
- const [userModalOpen, setUserModalOpen] = useState(false);
- const [confirmDeleteOpen, setConfirmDeleteOpen] = useState(false);
- const [deleteTarget, setDeleteTarget] = useState(null);
- const [userToDelete, setUserToDelete] = useState(null);
-
- if (!authUser.id) {
- return <>>;
- }
-
- const closeUserModal = () => {
- setSelectedUser(null);
- setUserModalOpen(false);
- };
- const editUser = (user) => {
- setSelectedUser(user);
- setUserModalOpen(true);
- };
-
- const deleteUser = (id) => {
- // Get user details for the confirmation dialog
- const user = users.find((u) => u.id === id);
- setUserToDelete(user);
- setDeleteTarget(id);
-
- // Skip warning if it's been suppressed
- if (isWarningSuppressed('delete-user')) {
- return executeDeleteUser(id);
- }
-
- setConfirmDeleteOpen(true);
- };
-
- const executeDeleteUser = async (id) => {
- await API.deleteUser(id);
- setConfirmDeleteOpen(false);
- };
+ if (!authUser.id) throw new Error();
return (
-
+
);
+}
+
+const UsersPage = () => {
+ return (
+
+
+
+ );
};
export default UsersPage;