diff --git a/apps/hub/src/components/header/links/header-game-links.tsx b/apps/hub/src/components/header/links/header-game-links.tsx index aa27fc63..e8b8dea2 100644 --- a/apps/hub/src/components/header/links/header-game-links.tsx +++ b/apps/hub/src/components/header/links/header-game-links.tsx @@ -1,4 +1,4 @@ -import { faCircleDollar, faFolder, faGear, faKey } from "@rivet-gg/icons"; +import { faCircleDollar, faFolder, faGear } from "@rivet-gg/icons"; import { Link } from "@tanstack/react-router"; import { HeaderLink } from "../header-link"; @@ -18,11 +18,6 @@ export function HeaderGameLinks({ gameId }: HeaderGameLinksProps) { Environments - - - Tokens - - Billing diff --git a/apps/hub/src/domains/game/layouts/game-settings-layout.tsx b/apps/hub/src/domains/game/layouts/game-settings-layout.tsx index b4338aae..8255dde6 100644 --- a/apps/hub/src/domains/game/layouts/game-settings-layout.tsx +++ b/apps/hub/src/domains/game/layouts/game-settings-layout.tsx @@ -14,11 +14,19 @@ function GroupSettingsPage({ children, gameId }: GroupPageProps) { General + + Tokens + } > diff --git a/apps/hub/src/routeTree.gen.ts b/apps/hub/src/routeTree.gen.ts index 9680fb94..9b447d7c 100644 --- a/apps/hub/src/routeTree.gen.ts +++ b/apps/hub/src/routeTree.gen.ts @@ -36,6 +36,7 @@ import { Route as AuthenticatedLayoutGamesGameIdBillingImport } from './routes/_ import { Route as AuthenticatedLayoutTeamsGroupIdSettingsIndexImport } from './routes/_authenticated/_layout/teams/$groupId/settings/index' import { Route as AuthenticatedLayoutGamesGameIdSettingsIndexImport } from './routes/_authenticated/_layout/games/$gameId/settings/index' import { Route as AuthenticatedLayoutGamesGameIdEnvironmentsNamespaceIdImport } from './routes/_authenticated/_layout/games/$gameId_/environments/$namespaceId' +import { Route as AuthenticatedLayoutGamesGameIdSettingsTokensImport } from './routes/_authenticated/_layout/games/$gameId/settings/tokens' import { Route as AuthenticatedLayoutGamesGameIdNamespacesSplatImport } from './routes/_authenticated/_layout/games/$gameId/namespaces/$' import { Route as AuthenticatedLayoutGamesGameIdEnvironmentsNamespaceIdIndexImport } from './routes/_authenticated/_layout/games/$gameId_/environments/$namespaceId/index' import { Route as AuthenticatedLayoutGamesGameIdEnvironmentsNamespaceIdVersionsImport } from './routes/_authenticated/_layout/games/$gameId_/environments/$namespaceId/versions' @@ -197,6 +198,12 @@ const AuthenticatedLayoutGamesGameIdEnvironmentsNamespaceIdRoute = getParentRoute: () => AuthenticatedLayoutRoute, } as any) +const AuthenticatedLayoutGamesGameIdSettingsTokensRoute = + AuthenticatedLayoutGamesGameIdSettingsTokensImport.update({ + path: '/tokens', + getParentRoute: () => AuthenticatedLayoutGamesGameIdSettingsRoute, + } as any) + const AuthenticatedLayoutGamesGameIdNamespacesSplatRoute = AuthenticatedLayoutGamesGameIdNamespacesSplatImport.update({ path: '/namespaces/$', @@ -495,6 +502,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthenticatedLayoutGamesGameIdNamespacesSplatImport parentRoute: typeof AuthenticatedLayoutGamesGameIdImport } + '/_authenticated/_layout/games/$gameId/settings/tokens': { + id: '/_authenticated/_layout/games/$gameId/settings/tokens' + path: '/tokens' + fullPath: '/games/$gameId/settings/tokens' + preLoaderRoute: typeof AuthenticatedLayoutGamesGameIdSettingsTokensImport + parentRoute: typeof AuthenticatedLayoutGamesGameIdSettingsImport + } '/_authenticated/_layout/games/$gameId/environments/$namespaceId': { id: '/_authenticated/_layout/games/$gameId/environments/$namespaceId' path: '/games/$gameId/environments/$namespaceId' @@ -654,6 +668,7 @@ export const routeTree = rootRoute.addChildren({ AuthenticatedLayoutGamesGameIdBillingRoute, AuthenticatedLayoutGamesGameIdSettingsRoute: AuthenticatedLayoutGamesGameIdSettingsRoute.addChildren({ + AuthenticatedLayoutGamesGameIdSettingsTokensRoute, AuthenticatedLayoutGamesGameIdSettingsIndexRoute, }), AuthenticatedLayoutGamesGameIdTokensRoute, @@ -807,6 +822,7 @@ export const routeTree = rootRoute.addChildren({ "filePath": "_authenticated/_layout/games/$gameId/settings.tsx", "parent": "/_authenticated/_layout/games/$gameId", "children": [ + "/_authenticated/_layout/games/$gameId/settings/tokens", "/_authenticated/_layout/games/$gameId/settings/" ] }, @@ -841,6 +857,10 @@ export const routeTree = rootRoute.addChildren({ "filePath": "_authenticated/_layout/games/$gameId/namespaces/$.tsx", "parent": "/_authenticated/_layout/games/$gameId" }, + "/_authenticated/_layout/games/$gameId/settings/tokens": { + "filePath": "_authenticated/_layout/games/$gameId/settings/tokens.tsx", + "parent": "/_authenticated/_layout/games/$gameId/settings" + }, "/_authenticated/_layout/games/$gameId/environments/$namespaceId": { "filePath": "_authenticated/_layout/games/$gameId_/environments/$namespaceId.tsx", "parent": "/_authenticated/_layout", diff --git a/apps/hub/src/routes/_authenticated/_layout/games/$gameId/settings/tokens.tsx b/apps/hub/src/routes/_authenticated/_layout/games/$gameId/settings/tokens.tsx new file mode 100644 index 00000000..c4bbb257 --- /dev/null +++ b/apps/hub/src/routes/_authenticated/_layout/games/$gameId/settings/tokens.tsx @@ -0,0 +1,37 @@ +import { Button, DocsCard, Grid, Text } from "@rivet-gg/components"; +import { Link, createFileRoute } from "@tanstack/react-router"; + +function CloudTokenCard() { + return ( + <> + + Generate + + } + > + + Cloud tokens are used to access Rivet Cloud. They are used by the + client to access Rivet Cloud. + + + + ); +} + +function GameTokensRoute() { + return ( + + + + ); +} + +export const Route = createFileRoute( + "/_authenticated/_layout/games/$gameId/settings/tokens", +)({ + component: GameTokensRoute, +}); diff --git a/apps/hub/src/routes/_authenticated/_layout/games/$gameId/tokens.tsx b/apps/hub/src/routes/_authenticated/_layout/games/$gameId/tokens.tsx index 56b082ca..d4d2c309 100644 --- a/apps/hub/src/routes/_authenticated/_layout/games/$gameId/tokens.tsx +++ b/apps/hub/src/routes/_authenticated/_layout/games/$gameId/tokens.tsx @@ -1,37 +1,12 @@ -import { Button, DocsCard, Grid, Text } from "@rivet-gg/components"; -import { Link, createFileRoute } from "@tanstack/react-router"; - -function CloudTokenCard() { - return ( - <> - - Generate - - } - > - - Cloud tokens are used to access Rivet Cloud. They are used by the - client to access Rivet Cloud. - - - - ); -} - -function GameTokensRoute() { - return ( - - - - ); -} +import { createFileRoute, redirect } from "@tanstack/react-router"; export const Route = createFileRoute( "/_authenticated/_layout/games/$gameId/tokens", )({ - component: GameTokensRoute, + loader: ({ params }) => { + throw redirect({ + to: "/games/$gameId/settings/tokens", + params, + }); + }, }); diff --git a/apps/hub/tailwind.config.js b/apps/hub/tailwind.config.js index 5745c486..0bc636d3 100644 --- a/apps/hub/tailwind.config.js +++ b/apps/hub/tailwind.config.js @@ -7,6 +7,7 @@ module.exports = { "./src/lib/**/*.{ts,tsx}", "./src/**/hooks/**/*.{ts,tsx}", "./src/**/forms/**/*.{ts,tsx}", + "./src/**/layouts/**/*.{ts,tsx}", "../../node_modules/@rivet-gg/components/**/*.{ts,tsx}", ], presets: [require("@rivet-gg/components/tailwind-base")],