aboutsummaryrefslogtreecommitdiffhomepage
path: root/frontend/app/routes
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/app/routes')
-rw-r--r--frontend/app/routes/golf.$gameId.play.tsx49
-rw-r--r--frontend/app/routes/golf.$gameId.watch.tsx54
2 files changed, 89 insertions, 14 deletions
diff --git a/frontend/app/routes/golf.$gameId.play.tsx b/frontend/app/routes/golf.$gameId.play.tsx
index bda563f..78ce585 100644
--- a/frontend/app/routes/golf.$gameId.play.tsx
+++ b/frontend/app/routes/golf.$gameId.play.tsx
@@ -8,26 +8,47 @@ export async function loader({ params, request }: LoaderFunctionArgs) {
const { token } = await isAuthenticated(request, {
failureRedirect: "/login",
});
- const { data, error } = await apiClient.GET("/games/{game_id}", {
- params: {
- path: {
- game_id: Number(params.gameId),
+
+ const fetchGame = async () => {
+ const { data, error } = await apiClient.GET("/games/{game_id}", {
+ params: {
+ path: {
+ game_id: Number(params.gameId),
+ },
+ header: {
+ Authorization: `Bearer ${token}`,
+ },
},
- header: {
- Authorization: `Bearer ${token}`,
+ });
+ if (error) {
+ throw new Error(error.message);
+ }
+ return data;
+ };
+
+ const fetchSockToken = async () => {
+ const { data, error } = await apiClient.GET("/token", {
+ params: {
+ header: {
+ Authorization: `Bearer ${token}`,
+ },
},
- },
- });
- if (error) {
- throw new Error(error.message);
- }
+ });
+ if (error) {
+ throw new Error(error.message);
+ }
+ return data.token;
+ };
+
+ const [game, sockToken] = await Promise.all([fetchGame(), fetchSockToken()]);
return {
- game: data,
+ game,
+ sockToken,
};
}
export default function GolfPlay() {
- const { game } = useLoaderData<typeof loader>();
+ const { game, sockToken } = useLoaderData<typeof loader>();
- return <GolfPlayApp game={game} />;
+ return <GolfPlayApp game={game} sockToken={sockToken} />;
}
diff --git a/frontend/app/routes/golf.$gameId.watch.tsx b/frontend/app/routes/golf.$gameId.watch.tsx
new file mode 100644
index 0000000..28c17cc
--- /dev/null
+++ b/frontend/app/routes/golf.$gameId.watch.tsx
@@ -0,0 +1,54 @@
+import type { LoaderFunctionArgs } from "@remix-run/node";
+import { isAuthenticated } from "../.server/auth";
+import { apiClient } from "../.server/api/client";
+import { useLoaderData } from "@remix-run/react";
+import GolfWatchApp from "../components/GolfWatchApp";
+
+export async function loader({ params, request }: LoaderFunctionArgs) {
+ const { token } = await isAuthenticated(request, {
+ failureRedirect: "/login",
+ });
+
+ const fetchGame = async () => {
+ const { data, error } = await apiClient.GET("/games/{game_id}", {
+ params: {
+ path: {
+ game_id: Number(params.gameId),
+ },
+ header: {
+ Authorization: `Bearer ${token}`,
+ },
+ },
+ });
+ if (error) {
+ throw new Error(error.message);
+ }
+ return data;
+ };
+
+ const fetchSockToken = async () => {
+ const { data, error } = await apiClient.GET("/token", {
+ params: {
+ header: {
+ Authorization: `Bearer ${token}`,
+ },
+ },
+ });
+ if (error) {
+ throw new Error(error.message);
+ }
+ return data.token;
+ };
+
+ const [game, sockToken] = await Promise.all([fetchGame(), fetchSockToken()]);
+ return {
+ game,
+ sockToken,
+ };
+}
+
+export default function GolfWatch() {
+ const { game, sockToken } = useLoaderData<typeof loader>();
+
+ return <GolfWatchApp game={game} sockToken={sockToken} />;
+}