front-hub/src/components/ProtectedLayout.tsx

97 lines
2.6 KiB
TypeScript
Raw Normal View History

2024-01-23 14:18:22 +00:00
import { Outlet } from "react-router-dom";
import Navbar from "./NavbarSite/Navbar";
2023-09-15 21:00:02 +00:00
import {
2024-01-23 14:18:22 +00:00
Ticket,
getMessageFromFetchError,
useAllTariffsFetcher,
usePrivilegeFetcher,
useSSESubscription,
useTicketsFetcher,
useToken,
} from "@frontend/kitui";
import {
updateTickets,
setTicketCount,
useTicketStore,
setTicketsFetchState,
} from "@root/stores/tickets";
import { enqueueSnackbar } from "notistack";
import { updateTariffs } from "@root/stores/tariffs";
import { useCustomTariffs } from "@root/utils/hooks/useCustomTariffs";
import { setCustomTariffs } from "@root/stores/customTariffs";
import { setPrivileges } from "@root/stores/privileges";
2023-11-10 14:51:50 +00:00
import { useHistoryData } from "@root/utils/hooks/useHistoryData";
2024-01-23 14:18:22 +00:00
import { useSSETab } from "@root/utils/hooks/useSSETab";
2023-08-29 13:38:05 +00:00
export default function ProtectedLayout() {
2024-01-23 14:18:22 +00:00
const token = useToken();
const ticketApiPage = useTicketStore((state) => state.apiPage);
const ticketsPerPage = useTicketStore((state) => state.ticketsPerPage);
const { isActiveSSETab, updateSSEValue } = useSSETab<Ticket[]>(
"auth",
(data) => {
updateTickets(data.filter((d) => Boolean(d.id)));
setTicketCount(data.length);
}
);
useSSESubscription<Ticket>({
enabled: isActiveSSETab,
url:
process.env.REACT_APP_DOMAIN +
2024-06-02 23:00:19 +00:00
`/heruvym/v1.0.0/subscribe?Authorization=${token}`,
2024-01-23 14:18:22 +00:00
onNewData: (data) => {
2025-05-18 08:45:18 +00:00
console.log("ProtectedLayout")
2024-01-23 14:18:22 +00:00
updateSSEValue(data);
updateTickets(data.filter((d) => Boolean(d.id)));
setTicketCount(data.length);
},
marker: "ticket",
});
2023-08-29 13:38:05 +00:00
2024-01-23 14:18:22 +00:00
useTicketsFetcher({
2024-06-02 23:00:19 +00:00
url: process.env.REACT_APP_DOMAIN + "/heruvym/v1.0.0/getTickets",
2024-01-23 14:18:22 +00:00
ticketsPerPage,
ticketApiPage,
onSuccess: (result) => {
if (result.data) updateTickets(result.data);
setTicketCount(result.count);
},
onError: (error: Error) => {
const message = getMessageFromFetchError(error);
if (message) enqueueSnackbar(message);
},
onFetchStateChange: setTicketsFetchState,
});
2023-08-29 13:38:05 +00:00
2024-01-23 14:18:22 +00:00
useAllTariffsFetcher({
2025-03-19 03:41:44 +00:00
baseUrl: process.env.REACT_APP_DOMAIN + "/strator/tariff/getList",
2024-01-23 14:18:22 +00:00
onSuccess: updateTariffs,
onError: (error) => {
const errorMessage = getMessageFromFetchError(error);
if (errorMessage) enqueueSnackbar(errorMessage);
},
});
2023-08-29 13:38:05 +00:00
2024-01-23 14:18:22 +00:00
useCustomTariffs({
onNewUser: setCustomTariffs,
onError: (error) => {
if (error) enqueueSnackbar(error);
},
});
2023-08-29 13:38:05 +00:00
2024-01-23 14:18:22 +00:00
usePrivilegeFetcher({
onSuccess: setPrivileges,
onError: (error) => {
2024-04-16 19:51:07 +00:00
console.error("usePrivilegeFetcher error :>> ", error);
2024-01-23 14:18:22 +00:00
},
});
2023-08-29 13:38:05 +00:00
2024-01-23 14:18:22 +00:00
useHistoryData();
2023-08-29 13:38:05 +00:00
2024-01-23 14:18:22 +00:00
return (
<Navbar>
<Outlet />
</Navbar>
);
2023-08-29 13:38:05 +00:00
}