subscribe topics

main
alex 2023-09-01 23:27:33 +02:00
parent 6f55d2ec5a
commit d432da1ee1
14 changed files with 101 additions and 71 deletions

View File

@ -17,7 +17,7 @@ export default function App() {
const [notificationApi, notificationContextHolder] = const [notificationApi, notificationContextHolder] =
notification.useNotification(); notification.useNotification();
const { userSession, setUserSession } = UseUserSession(); const { userSession, setUserSession } = UseUserSession();
const [isWebSocketReady, setIsWebSocketReady] = useState(true); const [isWebSocketReady, setIsWebSocketReady] = useState(false);
if (!userSession) { if (!userSession) {
return <Login />; return <Login />;

View File

@ -48,17 +48,6 @@ function SuspenseFallback({ children }) {
export default function AppRoutes() { export default function AppRoutes() {
const appContext = useAppContext(); const appContext = useAppContext();
/*
<Route
path={Constants.ROUTE_PATHS.GROUP_TASKS_VIEW + ":paramGroupTaskId"}
element={
<SuspenseFallback>
<GroupTasks isGroupTasksViewModalOpen={true} />
</SuspenseFallback>
}
/>
*/
console.info("appRoutes"); console.info("appRoutes");
return ( return (
@ -169,7 +158,7 @@ export default function AppRoutes() {
Constants.PERMISSIONS.SCANNER.USE_SCANNERS Constants.PERMISSIONS.SCANNER.USE_SCANNERS
) && ( ) && (
<Route <Route
path="/scanners" path={Constants.ROUTE_PATHS.SCANNERS}
element={ element={
<SuspenseFallback> <SuspenseFallback>
<Scanners /> <Scanners />
@ -179,7 +168,7 @@ export default function AppRoutes() {
)} )}
<Route <Route
path="/users" path={Constants.ROUTE_PATHS.USERS}
element={ element={
<SuspenseFallback> <SuspenseFallback>
<AllUsers /> <AllUsers />
@ -188,7 +177,7 @@ export default function AppRoutes() {
/> />
<Route <Route
path="/user-profile" path={Constants.ROUTE_PATHS.USER_PROFILE}
element={ element={
<SuspenseFallback> <SuspenseFallback>
<UserProfile /> <UserProfile />
@ -204,7 +193,7 @@ export default function AppRoutes() {
Constants.PERMISSIONS.ADMIN_AREA.ROLES.MOVE_ROLE_UP_DOWN Constants.PERMISSIONS.ADMIN_AREA.ROLES.MOVE_ROLE_UP_DOWN
) && ( ) && (
<Route <Route
path="/admin-area/roles" path={Constants.ROUTE_PATHS.ADMIN_AREA_ROLES}
element={ element={
<SuspenseFallback> <SuspenseFallback>
<AdminAreaRoles /> <AdminAreaRoles />
@ -218,7 +207,7 @@ export default function AppRoutes() {
Constants.PERMISSIONS.ADMIN_AREA.LOGS Constants.PERMISSIONS.ADMIN_AREA.LOGS
) && ( ) && (
<Route <Route
path="/admin-area/logs" path={Constants.ROUTE_PATHS.ADMIN_AREA_LOGS}
element={ element={
<SuspenseFallback> <SuspenseFallback>
<AdminAreaLogs /> <AdminAreaLogs />

View File

@ -11,7 +11,7 @@ import {
} from "@ant-design/icons"; } from "@ant-design/icons";
import { Badge, Divider, Menu } from "antd"; import { Badge, Divider, Menu } from "antd";
import Sider from "antd/es/layout/Sider"; import Sider from "antd/es/layout/Sider";
import { useEffect, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { useLocation, useNavigate } from "react-router-dom"; import { useLocation, useNavigate } from "react-router-dom";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { Constants, hasOnePermission, hasPermission } from "../../utils"; import { Constants, hasOnePermission, hasPermission } from "../../utils";
@ -19,6 +19,8 @@ import { useTranslation } from "react-i18next";
import { MyUserAvatar } from "../MyAvatar"; import { MyUserAvatar } from "../MyAvatar";
import { useSideBarContext } from "../../Contexts/SideBarContext"; import { useSideBarContext } from "../../Contexts/SideBarContext";
import { useAppContext } from "../../Contexts/AppContext"; import { useAppContext } from "../../Contexts/AppContext";
import { useWebSocketContext } from "../../Contexts/WebSocketContext";
import { SentMessagesCommands } from "../../Handlers/WebSocketMessageHandler";
export default function SideMenu({ export default function SideMenu({
userSession, userSession,
@ -27,12 +29,12 @@ export default function SideMenu({
setIsSideMenuCollapsed, setIsSideMenuCollapsed,
}) { }) {
const appContext = useAppContext(); const appContext = useAppContext();
const webSocketContext = useWebSocketContext();
const sideBarContext = useSideBarContext(); const sideBarContext = useSideBarContext();
const location = useLocation(); const location = useLocation();
const [selectedKeys, setSelectedKeys] = useState("/"); const [selectedKeys, setSelectedKeys] = useState("/");
const { t } = useTranslation(); const { t } = useTranslation();
const lastSubscribedTopic = useRef("");
useEffect(() => setSelectedKeys(location.pathname), [location.pathname]);
const navigate = useNavigate(); const navigate = useNavigate();
@ -70,7 +72,7 @@ export default function SideMenu({
items.push({ items.push({
label: t("sideMenu.equipmentDocumentation"), label: t("sideMenu.equipmentDocumentation"),
icon: <BookOutlined />, icon: <BookOutlined />,
key: "/equipment-documentation", key: Constants.ROUTE_PATHS.EQUIPMENT_DOCUMENTATION,
}); });
} }
@ -148,7 +150,7 @@ export default function SideMenu({
adminArea.children.push({ adminArea.children.push({
label: t("sideMenu.adminArea.roles"), label: t("sideMenu.adminArea.roles"),
icon: <UsergroupAddOutlined />, icon: <UsergroupAddOutlined />,
key: "/admin-area/roles", key: Constants.ROUTE_PATHS.ADMIN_AREA_ROLES,
}); });
} }
@ -161,7 +163,7 @@ export default function SideMenu({
adminArea.children.push({ adminArea.children.push({
label: t("sideMenu.adminArea.logs"), label: t("sideMenu.adminArea.logs"),
icon: <FileTextOutlined />, icon: <FileTextOutlined />,
key: "/admin-area/logs", key: Constants.ROUTE_PATHS.ADMIN_AREA_LOGS,
}); });
} }
@ -184,7 +186,7 @@ export default function SideMenu({
items.push({ items.push({
icon: <ScanOutlined />, icon: <ScanOutlined />,
label: getCurrentUsedScannerName(), label: getCurrentUsedScannerName(),
key: "/scanners", key: Constants.ROUTE_PATHS.SCANNERS,
}); });
} }
@ -201,12 +203,12 @@ export default function SideMenu({
}`} }`}
/> />
), ),
key: "/users", key: Constants.ROUTE_PATHS.USERS,
}, },
{ {
label: ` ${sideBarContext.username}`, label: ` ${sideBarContext.username}`,
icon: <MyUserAvatar avatar={sideBarContext.avatar} />, icon: <MyUserAvatar avatar={sideBarContext.avatar} />,
key: "/user-profile", key: Constants.ROUTE_PATHS.USER_PROFILE,
}, },
{ {
label: t("sideMenu.logout"), label: t("sideMenu.logout"),
@ -230,6 +232,22 @@ export default function SideMenu({
return items; return items;
}; };
useEffect(() => {
console.log("useeffect side menu");
}, []);
useEffect(() => {
console.log("useeffect side menu 2");
setSelectedKeys(location.pathname);
lastSubscribedTopic.current = location.pathname;
webSocketContext.SendSocketMessage(SentMessagesCommands.SubscribeToTopic, {
topic: location.pathname,
});
}, [location.pathname]);
return ( return (
<Sider <Sider
theme="light" theme="light"
@ -274,7 +292,6 @@ export default function SideMenu({
theme="light" theme="light"
selectedKeys={[selectedKeys]} selectedKeys={[selectedKeys]}
items={getFirstMenuItems()} items={getFirstMenuItems()}
openKeys={["/admin-area", "/group-tasks"]}
defaultOpenKeys={["/admin-area", "/group-tasks"]} defaultOpenKeys={["/admin-area", "/group-tasks"]}
/> />
</div> </div>

View File

@ -2,7 +2,6 @@ import { createContext, useContext, useEffect, useRef } from "react";
import { Constants, myFetch } from "../utils"; import { Constants, myFetch } from "../utils";
import { useSideBarContext } from "./SideBarContext"; import { useSideBarContext } from "./SideBarContext";
import { useAppContext } from "./AppContext"; import { useAppContext } from "./AppContext";
import { message } from "antd";
import { handleWebSocketMessage } from "../Handlers/WebSocketMessageHandler"; import { handleWebSocketMessage } from "../Handlers/WebSocketMessageHandler";
import { useGroupTasksContext } from "./GroupTasksContext"; import { useGroupTasksContext } from "./GroupTasksContext";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
@ -23,6 +22,7 @@ export default function WebSocketProvider({
notificationApi, notificationApi,
}) { }) {
const ws = useRef(null); const ws = useRef(null);
const wsMessageCache = useRef([]);
const navigate = useNavigate(); const navigate = useNavigate();
const appContext = useAppContext(); const appContext = useAppContext();
const sideBarContext = useSideBarContext(); const sideBarContext = useSideBarContext();
@ -49,6 +49,15 @@ export default function WebSocketProvider({
sideBarContext.setAvatar(data.Avatar); sideBarContext.setAvatar(data.Avatar);
sideBarContext.setAvailableCategoryGroups(data.AvailableCategoryGroups); sideBarContext.setAvailableCategoryGroups(data.AvailableCategoryGroups);
}); });
if (wsMessageCache.current.length > 0) {
// send cached messages
wsMessageCache.current.forEach((message) => {
ws.current.send(JSON.stringify(message));
});
wsMessageCache.current = [];
}
}; };
ws.current.onmessage = (event) => { ws.current.onmessage = (event) => {
@ -88,7 +97,7 @@ export default function WebSocketProvider({
}; };
const SendSocketMessage = (cmd, body) => { const SendSocketMessage = (cmd, body) => {
if (isWebSocketReady) { if (isWebSocketReady && ws.current !== null) {
ws.current.send(JSON.stringify({ Cmd: cmd, Body: body })); ws.current.send(JSON.stringify({ Cmd: cmd, Body: body }));
} else { } else {
/*notificationApi["error"]({ /*notificationApi["error"]({
@ -96,7 +105,9 @@ export default function WebSocketProvider({
description: `Please check your internet connection`, description: `Please check your internet connection`,
}); */ }); */
message.error(`Websocket is not ready`); wsMessageCache.current.push({ Cmd: cmd, Body: body });
// message.error(`Websocket is not ready`);
} }
}; };

View File

@ -43,6 +43,7 @@ export const ReceivedMessagesCommands = {
InstallingGlobalPythonPackages: 36, InstallingGlobalPythonPackages: 36,
InstallingGlobalPythonPackagesFailed: 37, InstallingGlobalPythonPackagesFailed: 37,
InstallingGlobalPythonPackagesFinished: 38, InstallingGlobalPythonPackagesFinished: 38,
UpdateUsers: 39,
}; };
// commands sent to the backend server // commands sent to the backend server
@ -69,6 +70,7 @@ export const SentMessagesCommands = {
DeleteUserApiKey: 20, DeleteUserApiKey: 20,
GroupTasksInstallPythonPackages: 21, GroupTasksInstallPythonPackages: 21,
GroupTasksInstallGlobalPythonPackages: 22, GroupTasksInstallGlobalPythonPackages: 22,
SubscribeToTopic: 23,
}; };
export function handleWebSocketMessage( export function handleWebSocketMessage(
@ -89,20 +91,7 @@ export function handleWebSocketMessage(
switch (cmd) { switch (cmd) {
case ReceivedMessagesCommands.UpdateConnectedUsers: case ReceivedMessagesCommands.UpdateConnectedUsers:
sideBarContext.setConnectedUsers(body.WebSocketUsersCount); sideBarContext.setConnectedUsers(body);
usersContext.setUsers((arr) => {
const newArr = [...arr];
const arrIndex = arr.findIndex((arr1) => arr1.Id === body.UserId);
if (arrIndex !== -1) {
newArr[arrIndex].ConnectionStatus = body.ConnectionStatus;
newArr[arrIndex].LastOnline = body.LastOnline;
}
return newArr;
});
break; break;
case ReceivedMessagesCommands.NewGroupTaskStarted: case ReceivedMessagesCommands.NewGroupTaskStarted:
groupTasksContext.setGroupTasks((arr) => [...arr, body]); groupTasksContext.setGroupTasks((arr) => [...arr, body]);
@ -955,6 +944,20 @@ export function handleWebSocketMessage(
description: `You can now continue with the work`, description: `You can now continue with the work`,
}); });
break; break;
case ReceivedMessagesCommands.UpdateUsers:
usersContext.setUsers((arr) => {
const newArr = [...arr];
const arrIndex = arr.findIndex((arr1) => arr1.Id === body.UserId);
if (arrIndex !== -1) {
newArr[arrIndex].ConnectionStatus = body.ConnectionStatus;
newArr[arrIndex].LastOnline = body.LastOnline;
}
return newArr;
});
break;
default: default:
console.error("unknown command", cmd); console.error("unknown command", cmd);
break; break;

View File

@ -12,12 +12,7 @@ import {
Typography, Typography,
notification, notification,
} from "antd"; } from "antd";
import { import { Constants, hasPermission, myFetch } from "../../../utils";
Constants,
SentMessagesCommands,
hasPermission,
myFetch,
} from "../../../utils";
import { import {
ArrowDownOutlined, ArrowDownOutlined,
ArrowUpOutlined, ArrowUpOutlined,
@ -34,6 +29,7 @@ import { MyAvatar } from "../../../Components/MyAvatar";
import { useAdminAreaRolesContext } from "../../../Contexts/AdminAreaRolesContext"; import { useAdminAreaRolesContext } from "../../../Contexts/AdminAreaRolesContext";
import { useWebSocketContext } from "../../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../../Contexts/WebSocketContext";
import { useAppContext } from "../../../Contexts/AppContext"; import { useAppContext } from "../../../Contexts/AppContext";
import { SentMessagesCommands } from "../../../Handlers/WebSocketMessageHandler";
const { useBreakpoint } = Grid; const { useBreakpoint } = Grid;

View File

@ -1,15 +1,11 @@
import { Form, Input, Select } from "antd"; import { Form, Input, Select } from "antd";
import Modal from "antd/es/modal/Modal"; import Modal from "antd/es/modal/Modal";
import { import { Constants, EncodeStringToBase64, isEmailValid } from "../../utils";
Constants,
EncodeStringToBase64,
SentMessagesCommands,
isEmailValid,
} from "../../utils";
import { useState } from "react"; import { useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useWebSocketContext } from "../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../Contexts/WebSocketContext";
import { useUsersContext } from "../../Contexts/UsersContext"; import { useUsersContext } from "../../Contexts/UsersContext";
import { SentMessagesCommands } from "../../Handlers/WebSocketMessageHandler";
export default function CreateUserModal({ isModalOpen, setIsModalOpen }) { export default function CreateUserModal({ isModalOpen, setIsModalOpen }) {
const webSocketContext = useWebSocketContext(); const webSocketContext = useWebSocketContext();

View File

@ -11,7 +11,6 @@ import {
import { import {
Constants, Constants,
FormatDatetime, FormatDatetime,
SentMessagesCommands,
getConnectionStatusItem, getConnectionStatusItem,
hasOnePermission, hasOnePermission,
hasPermission, hasPermission,
@ -26,6 +25,7 @@ import { MyAvatar } from "../../Components/MyAvatar";
import { useUsersContext } from "../../Contexts/UsersContext"; import { useUsersContext } from "../../Contexts/UsersContext";
import { useAppContext } from "../../Contexts/AppContext"; import { useAppContext } from "../../Contexts/AppContext";
import { useWebSocketContext } from "../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../Contexts/WebSocketContext";
import { SentMessagesCommands } from "../../Handlers/WebSocketMessageHandler";
export default function AllUsers() { export default function AllUsers() {
const webSocketContext = useWebSocketContext(); const webSocketContext = useWebSocketContext();

View File

@ -19,7 +19,6 @@ import {
Constants, Constants,
FormatDatetime, FormatDatetime,
GetDuration, GetDuration,
SentMessagesCommands,
hasOneXYPermission, hasOneXYPermission,
hasXYPermission, hasXYPermission,
} from "../../../utils"; } from "../../../utils";
@ -27,6 +26,7 @@ import { useTranslation } from "react-i18next";
import { MyAvatar } from "../../../Components/MyAvatar"; import { MyAvatar } from "../../../Components/MyAvatar";
import { useWebSocketContext } from "../../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../../Contexts/WebSocketContext";
import { useAppContext } from "../../../Contexts/AppContext"; import { useAppContext } from "../../../Contexts/AppContext";
import { SentMessagesCommands } from "../../../Handlers/WebSocketMessageHandler";
const { useBreakpoint } = Grid; const { useBreakpoint } = Grid;

View File

@ -15,7 +15,6 @@ import { useNavigate, useParams } from "react-router-dom";
import { import {
Constants, Constants,
FormatDatetime, FormatDatetime,
SentMessagesCommands,
GetDuration, GetDuration,
getUserId, getUserId,
GroupTasksStepsLockedAndUserUpdateInputValueRememberId, GroupTasksStepsLockedAndUserUpdateInputValueRememberId,
@ -38,6 +37,7 @@ import MyAttachments from "../../../Components/MyAttachments";
import { useWebSocketContext } from "../../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../../Contexts/WebSocketContext";
import { useGroupTasksContext } from "../../../Contexts/GroupTasksContext"; import { useGroupTasksContext } from "../../../Contexts/GroupTasksContext";
import { useAppContext } from "../../../Contexts/AppContext"; import { useAppContext } from "../../../Contexts/AppContext";
import { SentMessagesCommands } from "../../../Handlers/WebSocketMessageHandler";
export default function GroupTasksViewModal({ isOpen }) { export default function GroupTasksViewModal({ isOpen }) {
const webSocketContext = useWebSocketContext(); const webSocketContext = useWebSocketContext();

View File

@ -10,12 +10,13 @@ import {
Tag, Tag,
notification, notification,
} from "antd"; } from "antd";
import { SentMessagesCommands, GetUuid } from "../../../utils"; import { GetUuid } from "../../../utils";
import { InfoCircleOutlined } from "@ant-design/icons"; import { InfoCircleOutlined } from "@ant-design/icons";
import TextArea from "antd/es/input/TextArea"; import TextArea from "antd/es/input/TextArea";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useWebSocketContext } from "../../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../../Contexts/WebSocketContext";
import { useGroupTasksContext } from "../../../Contexts/GroupTasksContext"; import { useGroupTasksContext } from "../../../Contexts/GroupTasksContext";
import { SentMessagesCommands } from "../../../Handlers/WebSocketMessageHandler";
export default function GroupTypeSelectionModal({ export default function GroupTypeSelectionModal({
isOpen, isOpen,

View File

@ -3,12 +3,7 @@ import { useEffect, useRef, useState } from "react";
import GroupTasksViewModal from "./GroupTasksViewModal"; import GroupTasksViewModal from "./GroupTasksViewModal";
import GroupTypeSelectionModal from "./GroupTypeSelectionModal"; import GroupTypeSelectionModal from "./GroupTypeSelectionModal";
import GroupTaskTableList from "./GroupTasksTableList"; import GroupTaskTableList from "./GroupTasksTableList";
import { import { Constants, hasPermission, myFetch } from "../../../utils";
Constants,
SentMessagesCommands,
hasPermission,
myFetch,
} from "../../../utils";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { ReloadOutlined } from "@ant-design/icons"; import { ReloadOutlined } from "@ant-design/icons";
import { useGroupTasksContext } from "../../../Contexts/GroupTasksContext"; import { useGroupTasksContext } from "../../../Contexts/GroupTasksContext";
@ -16,6 +11,7 @@ import { useAppContext } from "../../../Contexts/AppContext";
import { useWebSocketContext } from "../../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../../Contexts/WebSocketContext";
import { useParams } from "react-router-dom"; import { useParams } from "react-router-dom";
import MyPagination from "../../../Components/MyPagination"; import MyPagination from "../../../Components/MyPagination";
import { SentMessagesCommands } from "../../../Handlers/WebSocketMessageHandler";
export default function GroupTasks({ isGroupTasksViewModalOpen }) { export default function GroupTasks({ isGroupTasksViewModalOpen }) {
const webSocketContext = useWebSocketContext(); const webSocketContext = useWebSocketContext();
@ -31,6 +27,7 @@ export default function GroupTasks({ isGroupTasksViewModalOpen }) {
const { t } = useTranslation(); const { t } = useTranslation();
const [paginationPage, setPaginationPage] = useState(1); const [paginationPage, setPaginationPage] = useState(1);
const totalPages = useRef(0); const totalPages = useRef(0);
const previousParamCategory = useRef(null);
const showGroupTypeSelectionModal = (categoryGroup) => { const showGroupTypeSelectionModal = (categoryGroup) => {
setCurrentCategoryGroup(categoryGroup); setCurrentCategoryGroup(categoryGroup);
@ -62,10 +59,24 @@ export default function GroupTasks({ isGroupTasksViewModalOpen }) {
}; };
useEffect(() => { useEffect(() => {
if (paginationPage === 1) { // initially previousParamCategory.current is null on first render
fetchGroupTasks(1); if (previousParamCategory.current === null) {
previousParamCategory.current = paramCategory;
return;
}
if (paramCategory !== previousParamCategory.current) {
previousParamCategory.current = paramCategory;
if (paginationPage === 1) {
// if we are on page 1, we need to fetch the new category group
fetchGroupTasks(1);
} else {
// if we are not on page 1, we need to reset the page to 1 and this will trigger the useEffect below
setPaginationPage(1);
}
} else { } else {
setPaginationPage(1); fetchGroupTasks(paginationPage);
} }
}, [paramCategory]); }, [paramCategory]);

View File

@ -19,7 +19,6 @@ import {
Constants, Constants,
EncodeStringToBase64, EncodeStringToBase64,
FormatDatetime, FormatDatetime,
SentMessagesCommands,
getConnectionStatusItem, getConnectionStatusItem,
getUserSessionFromLocalStorage, getUserSessionFromLocalStorage,
hasPermission, hasPermission,
@ -40,6 +39,7 @@ import { useUserProfileContext } from "../../Contexts/UserProfileContext";
import { useWebSocketContext } from "../../Contexts/WebSocketContext"; import { useWebSocketContext } from "../../Contexts/WebSocketContext";
import { useAppContext } from "../../Contexts/AppContext"; import { useAppContext } from "../../Contexts/AppContext";
import { useSideBarContext } from "../../Contexts/SideBarContext"; import { useSideBarContext } from "../../Contexts/SideBarContext";
import { SentMessagesCommands } from "../../Handlers/WebSocketMessageHandler";
export default function UserProfile() { export default function UserProfile() {
const webSocketContext = useWebSocketContext(); const webSocketContext = useWebSocketContext();

View File

@ -49,6 +49,11 @@ export const Constants = {
EQUIPMENT_DOCUMENTATION_VIEW: "/equipment-documentation/", EQUIPMENT_DOCUMENTATION_VIEW: "/equipment-documentation/",
GROUP_TASKS: "/group-tasks/", GROUP_TASKS: "/group-tasks/",
GROUP_TASKS_HISTORY: "/group-tasks-history", GROUP_TASKS_HISTORY: "/group-tasks-history",
USERS: "/users",
SCANNERS: "/scanners",
USER_PROFILE: "/user-profile",
ADMIN_AREA_ROLES: "/admin-area/roles",
ADMIN_AREA_LOGS: "/admin-area/logs",
}, },
GROUP_TASKS_STATUS: { GROUP_TASKS_STATUS: {
FINISHED: 1, FINISHED: 1,
@ -224,6 +229,7 @@ let webSocketContextPreview = {
//export const WebSocketContext = createContext(webSocketContextPreview); //export const WebSocketContext = createContext(webSocketContextPreview);
/*
// commands received from the backend server // commands received from the backend server
export const ReceivedMessagesCommands = { export const ReceivedMessagesCommands = {
InitUserSocketConnection: 1, InitUserSocketConnection: 1,
@ -290,7 +296,7 @@ export const SentMessagesCommands = {
DeleteUserApiKey: 20, DeleteUserApiKey: 20,
GroupTasksInstallPythonPackages: 21, GroupTasksInstallPythonPackages: 21,
GroupTasksInstallGlobalPythonPackages: 22, GroupTasksInstallGlobalPythonPackages: 22,
}; }; */
/* /*
export function WebSocketProvider({ export function WebSocketProvider({
children, children,