turboci-admin/src/hooks/use-app-init.ts
2026-03-10 08:56:20 +00:00

67 lines
1.8 KiB
TypeScript

import React, { useEffect } from "react";
import { PagePropsType, ToastType, WebSocketDataType } from "../types";
import useWebSocket from "@/twui/components/hooks/useWebSocket";
import useStatus from "@/twui/components/hooks/useStatus";
import useWebSocketEventHandler from "@/twui/components/hooks/useWebSocketEventHandler";
import { date } from "zod";
export default function useAppInit(pageProps: PagePropsType) {
const wsURL = pageProps.ws_url || "";
const { user } = pageProps;
const [toast, setToast] = React.useState<ToastType>({
toastOpen: false,
});
const { socket, sendData } = useWebSocket<WebSocketDataType>({
url: wsURL,
disableReconnect: false,
keepAliveDuration: 5000,
});
const { loading, setLoading, refresh, setRefresh } = useStatus();
const ws = { socket, sendData };
const { data } = useWebSocketEventHandler<WebSocketDataType>();
useEffect(() => {
if (data?.event == "server:error") {
setToast({
toastOpen: true,
toastMessage: data.message,
toastStyle: "error",
});
}
if (data?.event == "server:update") {
setToast({
toastOpen: true,
toastMessage: data.message,
toastStyle: "normal",
});
}
if (data?.event == "server:success") {
setToast({
toastOpen: true,
toastMessage: data.message,
toastStyle: "success",
});
}
}, [data]);
return {
socket,
sendData,
loading,
setLoading,
refresh,
setRefresh,
ws,
user,
pageProps,
toast,
setToast,
};
}