diff --git a/package-lock.json b/package-lock.json index 3b671f5..c1d7269 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,14 @@ "next-themes": "^0.3.0", "react": "^18", "react-dom": "^18", + "react-responsive-masonry": "^2.2.0", "zod": "^3.23.8" }, "devDependencies": { "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/react-responsive-masonry": "^2.1.3", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", @@ -485,6 +487,15 @@ "@types/react": "*" } }, + "node_modules/@types/react-responsive-masonry": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@types/react-responsive-masonry/-/react-responsive-masonry-2.1.3.tgz", + "integrity": "sha512-aOFUtv3QwNMmy0BgpQpvivQ/+vivMTB6ARrzf9eTSXsLzXpVnfEtjpHpSknYDnr8KaQmlgeauAj8E7wo/qMOTg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@typescript-eslint/parser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", @@ -3744,6 +3755,11 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "node_modules/react-responsive-masonry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-responsive-masonry/-/react-responsive-masonry-2.2.0.tgz", + "integrity": "sha512-IYbnfe2tWCZ3pvyTLyBWPj7uv5ZmNOULYMcAZi5a47ZLhSotOck1vkkISq6gP2qiyWdMvPfeMhjvYzUYGw9BOQ==" + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/package.json b/package.json index 9f972d6..d27bd09 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,14 @@ "next-themes": "^0.3.0", "react": "^18", "react-dom": "^18", + "react-responsive-masonry": "^2.2.0", "zod": "^3.23.8" }, "devDependencies": { "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/react-responsive-masonry": "^2.1.3", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", diff --git a/src/app/games/[game_id]/page.tsx b/src/app/games/[game_id]/page.tsx index b94c7dd..f31f2db 100644 --- a/src/app/games/[game_id]/page.tsx +++ b/src/app/games/[game_id]/page.tsx @@ -1,126 +1,130 @@ import { GameService } from "@/entities/game"; import { GameCard } from "@/features/gameCard"; +import { getYouTubeID } from "@/shared/utils"; import { Section } from "@/widgets/section"; import clsx from "clsx"; import Image from "next/image"; import Link from "next/link"; export default async function Games({ - params: { game_id }, + params: { game_id }, }: { - params: { game_id: number }; + params: { game_id: number }; }) { - const gameCards = await GameService.getGameCards(); - const game = await GameService.getGame(game_id); - return ( - <> - {game && ( -
- {game.cover && ( -
- -
- )} - -

{game.title}

- {game.description && ( -

- {game.description} -

- )} -
-
- {[ - [ - { name: "Система", value: game.system }, - { name: "Процессор", value: game.processor }, - { name: "Оперативная память", value: game.memory }, - { name: "Видеокарта", value: game.graphics }, - { name: "Место на диске", value: game.storage }, - ], - [ - { - name: "Версия игры", - value: `${ - game.version - } (обновлена ${game.update_date.toLocaleDateString( - "ru-ru" - )})`, - }, - { name: "Язык", value: game.language }, - { name: "Разработчик", value: game.developer }, - { - name: "Год выхода", - value: game.release_date.toLocaleDateString("en-us", { - year: "numeric", - }), - }, - { name: "Объём загрузки", value: game.download_size }, - ], - ].map((section, i) => ( - - ))} -
- {game.trailer && ( -