Moved to next js ssr (with fixes)
This commit is contained in:
+7
-2
@@ -1,4 +1,5 @@
|
||||
import type { Metadata, Viewport } from 'next';
|
||||
import { cookies } from 'next/headers';
|
||||
import '@/src/index.css';
|
||||
import '@/src/App.css';
|
||||
import '@/src/css/Unit.css';
|
||||
@@ -49,8 +50,12 @@ export default function RootLayout({
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
// Читаем тему из cookie на сервере, чтобы сразу отрендерить нужную тему без мерцания.
|
||||
const themeCookie = cookies().get('theme')?.value;
|
||||
const initialMode = themeCookie === 'light' ? 'light' : 'dark';
|
||||
|
||||
return (
|
||||
<html lang="en">
|
||||
<html lang="en" data-theme={initialMode} style={{ colorScheme: initialMode }}>
|
||||
<body>
|
||||
{/* Yandex.Metrika */}
|
||||
<script
|
||||
@@ -69,7 +74,7 @@ export default function RootLayout({
|
||||
/>
|
||||
</div>
|
||||
</noscript>
|
||||
<ThemeProvider>
|
||||
<ThemeProvider initialMode={initialMode}>
|
||||
<AppShell>{children}</AppShell>
|
||||
</ThemeProvider>
|
||||
</body>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { Metadata } from 'next';
|
||||
import ModPageClient from '@/components/pages/ModPageClient';
|
||||
import { getMod } from '@/lib/api-server';
|
||||
import { getMod, getUnitsForMod, getBuildingsForMod } from '@/lib/api-server';
|
||||
import { IRaceBuildings } from '@/src/types/IBuildingShort';
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
@@ -28,6 +29,15 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
||||
};
|
||||
}
|
||||
|
||||
export default function ModPage() {
|
||||
return <ModPageClient />;
|
||||
export default async function ModPage({ params }: Props) {
|
||||
const [mod, racesUnits] = await Promise.all([
|
||||
getMod(params.modId),
|
||||
getUnitsForMod(params.modId),
|
||||
]);
|
||||
const units = racesUnits ?? [];
|
||||
let racesBuildings: IRaceBuildings[] = [];
|
||||
if (units.length <= 10) {
|
||||
racesBuildings = (await getBuildingsForMod(params.modId)) ?? [];
|
||||
}
|
||||
return <ModPageClient initialMod={mod} racesUnits={units} racesBuildings={racesBuildings} />;
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
import type { Metadata } from 'next';
|
||||
import BuildingPageClient from '@/components/pages/BuildingPageClient';
|
||||
import { getBuilding, getMod } from '@/lib/api-server';
|
||||
import { IBuilding } from '@/src/types/IBuilding';
|
||||
import { IMod } from '@/src/types/Imod';
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
@@ -32,6 +34,16 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
||||
};
|
||||
}
|
||||
|
||||
export default function BuildingPage() {
|
||||
return <BuildingPageClient />;
|
||||
export default async function BuildingPage({ params }: Props) {
|
||||
const [mod, building] = await Promise.all([
|
||||
getMod(params.modId),
|
||||
getBuilding(params.buildingId),
|
||||
]);
|
||||
return (
|
||||
<BuildingPageClient
|
||||
key={params.buildingId}
|
||||
initialBuilding={building as IBuilding | null}
|
||||
initialMod={mod as IMod | null}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Metadata } from 'next';
|
||||
import RacePageClient from '@/components/pages/RacePageClient';
|
||||
import { getMod, getRace } from '@/lib/api-server';
|
||||
import { getMod, getRace, getRaceUnits, getRaceBuildings } from '@/lib/api-server';
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
@@ -28,6 +28,19 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
||||
};
|
||||
}
|
||||
|
||||
export default function RacePage() {
|
||||
return <RacePageClient />;
|
||||
export default async function RacePage({ params }: Props) {
|
||||
const [mod, race, raceUnits, raceBuildings] = await Promise.all([
|
||||
getMod(params.modId),
|
||||
getRace(params.raceId),
|
||||
getRaceUnits(params.modId, params.raceId),
|
||||
getRaceBuildings(params.modId, params.raceId),
|
||||
]);
|
||||
return (
|
||||
<RacePageClient
|
||||
initialMod={mod}
|
||||
initialRace={race}
|
||||
raceUnits={raceUnits}
|
||||
raceBuildings={raceBuildings}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
import type { Metadata } from 'next';
|
||||
import UnitPageClient from '@/components/pages/UnitPageClient';
|
||||
import { getMod, getUnit } from '@/lib/api-server';
|
||||
import { IUnit } from '@/src/types/IUnit';
|
||||
import { IMod } from '@/src/types/Imod';
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
@@ -30,6 +32,16 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
||||
};
|
||||
}
|
||||
|
||||
export default function UnitPage() {
|
||||
return <UnitPageClient />;
|
||||
export default async function UnitPage({ params }: Props) {
|
||||
const [mod, unit] = await Promise.all([
|
||||
getMod(params.modId),
|
||||
getUnit(params.unitId),
|
||||
]);
|
||||
return (
|
||||
<UnitPageClient
|
||||
key={params.unitId}
|
||||
initialUnit={unit as IUnit | null}
|
||||
initialMod={mod as IMod | null}
|
||||
/>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user