import {
EventMessage,
EventType,
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 { addEvent } from "@/models/grlEventsSlice";
import { addStatsData } from "@/models/grlStatsSlice";
import Home from "@/pages/Home";
import MagicLink from "@/pages/MagicLink";
import Preview from "@/pages/Preview";
import Result from "@/pages/Result";
import Work from "@/pages/Work";
import Transfer from "@/pages/Transfer";
import {
BrowserRouter,
Outlet,
Route,
Routes,
useSearchParams,
} from "react-router-dom";
import useWebSocket from "react-use-websocket";
import NewsTicker from "./components/EventMarquee";
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 isEventMessage(msg: Message): msg is EventMessage {
return msg.kind === "event";
}
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