From 6c0b46725d1b809fa6cb002c5be2677fc2b5b629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:26:02 -0500 Subject: [PATCH] feat: start of static --- bun.lockb | Bin 281164 -> 282031 bytes package.json | 7 +- packages/api/next-env.d.ts | 5 + packages/api/next.config.js | 4 + packages/api/package.json | 17 +++ packages/api/tsconfig.json | 7 ++ packages/bot/package.json | 1 + packages/scripts/package.json | 4 + packages/website/next.config.js | 11 +- packages/website/package.json | 4 +- .../tankopedia/[id]/components/Content.tsx | 107 ++++++++++++++++++ .../src/app/tools/tankopedia/[id]/layout.tsx | 6 + packages/website/tsconfig.json | 3 +- 13 files changed, 162 insertions(+), 14 deletions(-) create mode 100644 packages/api/next-env.d.ts create mode 100644 packages/api/next.config.js create mode 100644 packages/api/package.json create mode 100644 packages/api/tsconfig.json create mode 100644 packages/website/src/app/tools/tankopedia/[id]/components/Content.tsx diff --git a/bun.lockb b/bun.lockb index e1f371ddd49894e756cc47131e17c13daf63a64e..f554250ad2bb08e73ac210300f6db3bb5555ebab 100644 GIT binary patch delta 44514 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 diff --git a/package.json b/package.json index ce7ce2fbe..ca9008dd1 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "packages/*" ], "scripts": { - "build:assets": "bun scripts/buildAssets/index.ts", - "build:averages": "bun scripts/averages", + "build:assets": "bun --filter=@blitzkit/scripts run build:assets", + "build:averages": "bun --filter=@blitzkit/scripts run build:averages", "build:bot": "rm -rf dist/bot && mkdir -p dist/bot/prisma && bun build src/index.ts src/workers/bot.ts src/workers/render.ts --outdir dist/bot --target=bun --splitting --sourcemap=inline --external sharp && cp -R src/lang dist/bot/lang && prisma generate && cp prisma/schema.prisma dist/bot/prisma/schema.prisma && cp -R node_modules/prisma/*.node dist/bot/prisma && cd dist/bot && bun init -y && bun add sharp", "build:website": "prisma generate & bun build:sitemap && next build", "build:sitemap": "bun scripts/sitemap.ts", @@ -17,7 +17,8 @@ "build:ratingleaderboard": "bun --script scripts/buildRatingLeaderboard.ts", "dev:bot": "bun build:bot && bun start:bot", "dev:docs": "vitepress dev docs", - "dev:website": "next dev", + "dev:website": "bun --filter=@blitzkit/website run dev", + "dev:api": "bun --filter=@blitzkit/api run dev", "start:bot": "bun dist/bot/index.js", "start:website": "next start", "host:docs": "vitepress preview docs", diff --git a/packages/api/next-env.d.ts b/packages/api/next-env.d.ts new file mode 100644 index 000000000..40c3d6809 --- /dev/null +++ b/packages/api/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/packages/api/next.config.js b/packages/api/next.config.js new file mode 100644 index 000000000..4678774e6 --- /dev/null +++ b/packages/api/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +export default nextConfig; diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 000000000..071a58790 --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,17 @@ +{ + "name": "@blitzkit/api", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build" + }, + "dependencies": { + "react": "^18", + "react-dom": "^18", + "next": "14.2.8" + }, + "devDependencies": { + "@types/react": "^18", + "@types/react-dom": "^18" + } +} diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json new file mode 100644 index 000000000..4c3b321ed --- /dev/null +++ b/packages/api/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "plugins": [{ "name": "next" }] + }, + "include": ["src/**/*", "dist/website/types/**/*.ts"] +} diff --git a/packages/bot/package.json b/packages/bot/package.json index 6f5e0d645..626d16645 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -7,6 +7,7 @@ "satori": "^0.10.14", "@resvg/resvg-js": "^2.6.2", "discord.js": "^14.15.3", + "react": "^18.3.1", "@radix-ui/colors": "^3.0.0", "fuzzysort": "^2.0.4", "bepaint": "^0.1.0-beta.3", diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 362df4984..7c7ff9d4d 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -2,6 +2,10 @@ "name": "@blitzkit/scripts", "private": true, "type": "module", + "scripts": { + "build:assets": "bun src/buildAssets/index.ts", + "build:averages": "bun src/averages.ts" + }, "dependencies": { "progress": "^2.0.3", "@gltf-transform/core": "^3.10.1", diff --git a/packages/website/next.config.js b/packages/website/next.config.js index 08d77937f..98415da83 100644 --- a/packages/website/next.config.js +++ b/packages/website/next.config.js @@ -4,6 +4,8 @@ const withVanillaExtract = createVanillaExtractPlugin({ tests: /\.css$/ }); /** @type {import('next').NextConfig} */ const nextConfig = { + output: 'export', + ...withVanillaExtract({ webpack: (config) => { config.module.rules.push( @@ -21,15 +23,6 @@ const nextConfig = { }, }), - async headers() { - return [ - { - source: '/(.*)?', - headers: [{ key: 'X-Frame-Options', value: 'DENY' }], - }, - ]; - }, - distDir: 'dist/website', reactStrictMode: true, diff --git a/packages/website/package.json b/packages/website/package.json index 4ca157b56..ae6c64684 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -3,7 +3,8 @@ "private": true, "type": "module", "scripts": { - "dev": "next dev" + "dev": "next dev", + "build": "next build" }, "dependencies": { "@radix-ui/themes": "^3.1.3", @@ -31,6 +32,7 @@ "react-promise-suspense": "^0.3.4" }, "devDependencies": { + "@types/react-dom": "^18", "@types/lodash": "^4.17.7", "@types/three": "^0.160.0", "@vanilla-extract/next-plugin": "^2.4.5", diff --git a/packages/website/src/app/tools/tankopedia/[id]/components/Content.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Content.tsx new file mode 100644 index 000000000..fa5534f76 --- /dev/null +++ b/packages/website/src/app/tools/tankopedia/[id]/components/Content.tsx @@ -0,0 +1,107 @@ +'use client'; + +import { TIER_ROMAN_NUMERALS } from '@blitzkit/core'; +import strings from '@blitzkit/core/lang/en-US.json'; +import { invalidate } from '@react-three/fiber'; +import { useEffect } from 'react'; +import { AdMidSectionResponsive } from '../../../../../components/AdMidSectionResponsive'; +import PageWrapper from '../../../../../components/PageWrapper'; +import { useAdExempt } from '../../../../../hooks/useAdExempt'; +import * as Duel from '../../../../../stores/duel'; +import * as TankopediaEphemeral from '../../../../../stores/tankopediaEphemeral'; +import { CalloutsSection } from './CalloutsSection'; +import { HistorySection } from './HistorySection'; +import { CharacteristicsSection } from './Model/CharacteristicsSection'; +import { GameModeSection } from './Model/GameModeSection'; +import { HeroSection } from './Model/HeroSection'; +import { MetaSection } from './Model/MetaSection'; +import { TechTreeSection } from './Model/TechTreeSection'; +import { ShotDisplaySection } from './ShotDisplaySection'; +import { VideoSection } from './VideoSection'; + +export function Content() { + const exempt = useAdExempt(); + const mutateTankopediaEphemeral = TankopediaEphemeral.useMutation(); + const mutateDuel = Duel.useMutation(); + const duelStore = Duel.useStore(); + const tank = Duel.use((state) => state.protagonist.tank); + const title = `${tank.name} - Tier ${TIER_ROMAN_NUMERALS[tank.tier]} ${ + (strings.common.nations_adjectives as Record)[tank.nation] + } ${strings.common.tank_class_short[tank.class]}`; + + useEffect(() => { + function handleKeyDown(event: KeyboardEvent) { + if (document.activeElement instanceof HTMLInputElement) return; + + function wipeShot() { + mutateTankopediaEphemeral((draft) => { + draft.shot = undefined; + }); + } + + if (event.key === '1') { + invalidate(); + wipeShot(); + mutateDuel((draft) => { + draft.antagonist.shell = draft.antagonist.gun.shells[0]; + }); + } else if (event.key === '2') { + invalidate(); + wipeShot(); + mutateDuel((draft) => { + if (draft.antagonist.gun.shells[1]) { + draft.antagonist.shell = draft.antagonist.gun.shells[1]; + } + }); + } else if (event.key === '3') { + invalidate(); + wipeShot(); + mutateDuel((draft) => { + if (draft.antagonist.gun.shells[2]) { + draft.antagonist.shell = draft.antagonist.gun.shells[2]; + } + }); + } + } + + window.addEventListener('keydown', handleKeyDown); + + return () => { + window.removeEventListener('keydown', handleKeyDown); + }; + }, []); + + useEffect(() => { + const unsubscribe = duelStore.subscribe( + (state) => state.protagonist?.tank.id, + () => { + mutateTankopediaEphemeral((draft) => { + draft.shot = undefined; + }); + }, + ); + + return unsubscribe; + }, []); + + return ( + <> + {title} + + + + + + + {!exempt && } + + + {!exempt && } + + + + {!exempt && } + + + ); +} diff --git a/packages/website/src/app/tools/tankopedia/[id]/layout.tsx b/packages/website/src/app/tools/tankopedia/[id]/layout.tsx index 68acdf667..11db19895 100644 --- a/packages/website/src/app/tools/tankopedia/[id]/layout.tsx +++ b/packages/website/src/app/tools/tankopedia/[id]/layout.tsx @@ -2,6 +2,7 @@ import { modelDefinitions, provisionDefinitions, tankDefinitions, + tankDefinitionsArray, tankIcon, TIER_ROMAN_NUMERALS, } from '@blitzkit/core'; @@ -10,6 +11,11 @@ import { ReactNode } from 'react'; import * as Duel from '../../../../stores/duel'; import * as TankopediaEphemeral from '../../../../stores/tankopediaEphemeral'; +export async function generateStaticParams() { + const tanks = await tankDefinitionsArray; + return tanks.map((tank) => ({ id: `${tank.id}` })); +} + export default async function Layout({ children, params, diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json index 95694aa6c..a549a9571 100644 --- a/packages/website/tsconfig.json +++ b/packages/website/tsconfig.json @@ -9,6 +9,7 @@ }, "include": [ "src/**/*", - "dist/website/types/**/*.ts" + "dist/website/types/**/*.ts", + ".next/types/**/*.ts" ] }