import {
EventMessage,
PingMessage,
PongMessage,
PongMessageKindEnum,
StatsMessage,
StatusApi,
SubscribeMessage, SubscribeMessageKindEnum,
TaskStatusResponse,
UserWalletBalance,
UserWalletBalanceResponse,
WalletApi
} from "@/api_fsb";
import Footer from "@/components/Footer";
import { useAppDispatch } from "@/hooks";
import { bpid, routeBasename, tagManager } from "@/lib/utils";
import { setAssignmentID, setProductUserID, setTurkSubmitTo } from "@/models/appSlice";
import { addStatsData } from "@/models/grlStatsSlice";
import Home from "@/pages/Home";
import Preview from "@/pages/Preview";
import Result from "@/pages/Result";
import Work from "@/pages/Work";
import { BrowserRouter, Outlet, Route, Routes, useSearchParams } from "react-router-dom";
import useWebSocket from 'react-use-websocket';
import { useEffect } from "react";
import Wallet from "@/components/Wallet";
import "@/index.css";
import { setTaskStatus, setUserWalletBalance } from "@/models/appSlice";
import { Profiling } from "./components/Profiling";
type Message = PingMessage | PongMessage | SubscribeMessage | EventMessage | StatsMessage;
function isStatsMessage(msg: Message): msg is StatsMessage {
return msg.kind === 'stats';
}
function isPingMessage(msg: Message): msg is PingMessage {
return msg.kind === 'ping';
}
function QueryParamProcessor() {
const dispatch = useAppDispatch()
const [searchParams] = useSearchParams();
useEffect(() => {
const worker_id = searchParams.get('workerId');
const assignment_id = searchParams.get('assignmentId');
const tsid = searchParams.get('tsid');
const turkSubmitTo = searchParams.get('turkSubmitTo');
if (turkSubmitTo) {
dispatch(setTurkSubmitTo(turkSubmitTo))
}
if (worker_id) {
dispatch(setProductUserID(worker_id))
new WalletApi().getUserWalletBalanceProductIdWalletGet(
bpid, // productId
worker_id, // bpuid
).then(res => {
const response = res.data as UserWalletBalanceResponse;
const balance = response.wallet as UserWalletBalance;
dispatch(setUserWalletBalance(balance));
});
}
if (assignment_id) {
dispatch(setAssignmentID(assignment_id))
}
if (tsid) {
new StatusApi().getTaskStatusProductIdStatusTsidGet(
bpid, // productId
tsid).then(res => {
const response: TaskStatusResponse = res.data;
dispatch(setTaskStatus(response))
}).catch((error) => {
console.error("Error fetching task status:", error);
});
}
}, [searchParams]);
return