diff --git a/app/bugs/[...slugs]/page.tsx b/app/bugs/[...slugs]/page.tsx
new file mode 100644
index 00000000..1e5dee83
--- /dev/null
+++ b/app/bugs/[...slugs]/page.tsx
@@ -0,0 +1,13 @@
+import { BugsRoute } from "../../../lib/routes/Bugs/BugsRoute";
+import { t } from "../../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("bugs-route.meta.title"),
+ description: t("bugs-route.meta.description"),
+ };
+}
+
+export default function BugsPage() {
+ return ;
+}
diff --git a/app/bugs/page.tsx b/app/bugs/page.tsx
deleted file mode 100644
index b33d1d8a..00000000
--- a/app/bugs/page.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- /* */
-}
-
-import { BugsRoute } from "../../lib/routes/Bugs/BugsRoute";
-import { t } from "../i18n";
-
-export async function generateMetadata() {
- return {
- title: t("bugs-route.title"),
- description: t("bugs-route.description"),
- };
-}
-
-export default function BugsPage() {
- return ;
-}
diff --git a/app/cards/[id]/page.tsx b/app/cards/[id]/page.tsx
new file mode 100644
index 00000000..a137bfbe
--- /dev/null
+++ b/app/cards/[id]/page.tsx
@@ -0,0 +1,13 @@
+import { CardCollectionRoute } from "../../../lib/routes/CardCollection/CardCollectionRoute";
+import { t } from "../../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("card-collection-route.meta.title"),
+ description: t("card-collection-route.meta.description"),
+ };
+}
+
+export default function CardCollectionPage() {
+ return ;
+}
diff --git a/app/characters/[id]/page.tsx b/app/characters/[id]/page.tsx
new file mode 100644
index 00000000..57a3b584
--- /dev/null
+++ b/app/characters/[id]/page.tsx
@@ -0,0 +1,13 @@
+import { CharacterRoute } from "../../../lib/routes/Character/CharacterRoute";
+import { t } from "../../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("character-route.meta.title"),
+ description: t("character-route.meta.description"),
+ };
+}
+
+export default function CharacterPage() {
+ return ;
+}
diff --git a/app/characters/[id]/print/page.tsx b/app/characters/[id]/print/page.tsx
new file mode 100644
index 00000000..17bfa81e
--- /dev/null
+++ b/app/characters/[id]/print/page.tsx
@@ -0,0 +1,13 @@
+import { CharacterPrintRoute } from "../../../../lib/routes/CharacterPrint/CharacterPrintRoute";
+import { t } from "../../../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("character-print-route.meta.title"),
+ description: t("character-print-route.meta.description"),
+ };
+}
+
+export default function CharacterPrintPage() {
+ return ;
+}
diff --git a/app/characters/new/[category]/[name]/page.tsx b/app/characters/new/[category]/[name]/page.tsx
new file mode 100644
index 00000000..288143ad
--- /dev/null
+++ b/app/characters/new/[category]/[name]/page.tsx
@@ -0,0 +1,13 @@
+import { NewCharacterRoute } from "../../../../../lib/routes/NewCharacter/NewCharacterRoute";
+import { t } from "../../../../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("new-character-route.meta.title"),
+ description: t("new-character-route.meta.description"),
+ };
+}
+
+export default function NewCharacterPage() {
+ return ;
+}
diff --git a/app/feature-requests/[...slugs]/page.tsx b/app/feature-requests/[...slugs]/page.tsx
new file mode 100644
index 00000000..327037d1
--- /dev/null
+++ b/app/feature-requests/[...slugs]/page.tsx
@@ -0,0 +1,13 @@
+import { FeatureRequestsRoute } from "../../../lib/routes/FeatureRequests/FeatureRequestsRoute";
+import { t } from "../../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("feature-requests-route.meta.title"),
+ description: t("feature-requests-route.meta.description"),
+ };
+}
+
+export default function FeatureRequestsPage() {
+ return ;
+}
diff --git a/app/feature-requests/page.tsx b/app/feature-requests/page.tsx
new file mode 100644
index 00000000..a883ba95
--- /dev/null
+++ b/app/feature-requests/page.tsx
@@ -0,0 +1,13 @@
+import { FeatureRequestsRoute } from "../../lib/routes/FeatureRequests/FeatureRequestsRoute";
+import { t } from "../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("feature-requests.meta.title"),
+ description: t("feature-requests.meta.description"),
+ };
+}
+
+export default function FeatureRequestsPage() {
+ return ;
+}
diff --git a/app/scenes/[id]/page.tsx b/app/scenes/[id]/page.tsx
new file mode 100644
index 00000000..f4e07e47
--- /dev/null
+++ b/app/scenes/[id]/page.tsx
@@ -0,0 +1,13 @@
+import { SceneRoute } from "../../../lib/routes/Scene/SceneRoute";
+import { t } from "../../i18n";
+
+export async function generateMetadata() {
+ return {
+ title: t("scene-route.meta.title"),
+ description: t("scene-route.meta.description"),
+ };
+}
+
+export default function ScenePage() {
+ return ;
+}
diff --git a/lib/components/Page/Page.tsx b/lib/components/Page/Page.tsx
index 2324593b..774765dd 100644
--- a/lib/components/Page/Page.tsx
+++ b/lib/components/Page/Page.tsx
@@ -600,7 +600,7 @@ export const Page: React.FC<{
label: "Documents",
links: [
{
- href: "https://fari.games/en/resources/fari-rpgs/fari-app-wiki",
+ href: "https://fari.community/creators/fari-rpgs/projects/fari-app-wiki",
label: t("menu.fari-wiki"),
icon: ,
},
diff --git a/lib/routes/Bugs/BugsRoute.tsx b/lib/routes/Bugs/BugsRoute.tsx
index 487b0622..eb464150 100644
--- a/lib/routes/Bugs/BugsRoute.tsx
+++ b/lib/routes/Bugs/BugsRoute.tsx
@@ -1,3 +1,4 @@
+"use client";
import BugReportIcon from "@mui/icons-material/BugReport";
import { Box, Container, useTheme } from "@mui/material";
import { Heading } from "../../components/Heading/Heading";
diff --git a/lib/routes/CardCollection/CardCollectionRoute.tsx b/lib/routes/CardCollection/CardCollectionRoute.tsx
index 13567a3a..8d01b185 100644
--- a/lib/routes/CardCollection/CardCollectionRoute.tsx
+++ b/lib/routes/CardCollection/CardCollectionRoute.tsx
@@ -1,3 +1,5 @@
+"use client";
+
import AddCircleOutlineIcon from "@mui/icons-material/AddCircleOutline";
import SaveIcon from "@mui/icons-material/Save";
import Masonry from "@mui/lab/Masonry";
@@ -13,9 +15,8 @@ import {
} from "@mui/material";
import { produce } from "immer";
import isEqual from "lodash/isEqual";
-import { useRouter } from "next/navigation";
+import { useParams, useRouter } from "next/navigation";
import { useContext, useEffect, useMemo, useState } from "react";
-import { useParams } from "react-router";
import {
ContentEditable,
@@ -25,7 +26,6 @@ import { FateLabel } from "../../components/FateLabel/FateLabel";
import { IndexCard } from "../../components/IndexCard/IndexCard";
import { MasonryResizer } from "../../components/MasonryResizer/MasonryResizer";
import { Page } from "../../components/Page/Page";
-import { PageMeta } from "../../components/PageMeta/PageMeta";
import { IndexCardCollectionsContext } from "../../contexts/IndexCardCollectionsContext/IndexCardCollectionsContext";
import { useLogger } from "../../contexts/InjectionsContext/hooks/useLogger";
import { MyBinderContext } from "../../contexts/MyBinderContext/MyBinderContext";
@@ -239,8 +239,8 @@ function useCardCollection(props: {
};
}
-function CardCollectionRoute() {
- const params = useParams<{ id: string }>();
+export function CardCollectionRoute() {
+ const params = useParams();
const indexCardCollectionsManager = useContext(IndexCardCollectionsContext);
const [selectedCardCollection, setSelectedCardCollection] = useState<
IIndexCardCollection | undefined
@@ -286,7 +286,6 @@ function CardCollectionRoute() {
return (
<>
-
diff --git a/lib/routes/Character/CharacterRoute.tsx b/lib/routes/Character/CharacterRoute.tsx
index 79088ceb..371910b3 100644
--- a/lib/routes/Character/CharacterRoute.tsx
+++ b/lib/routes/Character/CharacterRoute.tsx
@@ -1,8 +1,9 @@
+"use client";
+
import { Box, Snackbar, useTheme } from "@mui/material";
+import { useParams, useRouter } from "next/navigation";
import { useContext, useEffect, useRef, useState } from "react";
-import { useNavigate, useParams } from "react-router";
import { Page } from "../../components/Page/Page";
-import { PageMeta } from "../../components/PageMeta/PageMeta";
import { Toolbox } from "../../components/Toolbox/Toolbox";
import { CharactersContext } from "../../contexts/CharactersContext/CharactersContext";
import { useLogger } from "../../contexts/InjectionsContext/hooks/useLogger";
@@ -86,13 +87,13 @@ function DicePoolResultsSnackBar(props: {
);
}
-function CharacterRoute() {
+export function CharacterRoute() {
const theme = useTheme();
- const params = useParams<{ id: string }>();
+ const params = useParams();
const query = useQuery<"dialog" | "readonly">();
const dialogMode = query.get("dialog") === "true";
const readonly = query.get("readonly") === "true";
- const navigate = useNavigate();
+ const router = useRouter();
const charactersManager = useContext(CharactersContext);
const [dicePoolResults, setDicePoolResults] = useState<
Array
@@ -130,16 +131,13 @@ function CharacterRoute() {
if (characterToLoad) {
setSelectedCharacter(characterToLoad);
} else {
- navigate("/", {
- replace: true,
- });
+ router.replace("/");
myBinderManager.actions.open({ folder: "characters" });
}
}, [params.id, charactersManager.state.characters]);
return (
<>
-
();
+ const router = useRouter();
+ const params = useParams();
const charactersManager = useContext(CharactersContext);
const settingsManager = useContext(SettingsContext);
const [character, setCharacter] = useState(undefined);
@@ -46,9 +47,7 @@ function CharacterPrintRoute() {
if (characterToLoad) {
setCharacter(characterToLoad);
} else {
- navigate("/", {
- replace: true,
- });
+ router.replace("/");
myBinderManager.actions.open({ folder: "characters" });
}
}, [params.id, charactersManager.state.characters]);
@@ -57,8 +56,6 @@ function CharacterPrintRoute() {
return (
<>
-
-
diff --git a/lib/routes/FeatureRequests/FeatureRequestsRoute.tsx b/lib/routes/FeatureRequests/FeatureRequestsRoute.tsx
index 6c4b5197..d2455201 100644
--- a/lib/routes/FeatureRequests/FeatureRequestsRoute.tsx
+++ b/lib/routes/FeatureRequests/FeatureRequestsRoute.tsx
@@ -1,8 +1,9 @@
+"use client";
import QuestionAnswerIcon from "@mui/icons-material/QuestionAnswer";
+
import { Box, Container, useTheme } from "@mui/material";
import { Heading } from "../../components/Heading/Heading";
import { Page } from "../../components/Page/Page";
-import { PageMeta } from "../../components/PageMeta/PageMeta";
import { useCanny } from "../../hooks/useCanny/useCanny";
import { useTranslate } from "../../hooks/useTranslate/useTranslate";
@@ -20,10 +21,6 @@ export function FeatureRequestsRoute() {
return (
-
= () => {
src="https://img.icons8.com/plasticine/100/000000/contract.png"
/>
),
- href: "https://fari.games/en/resources/fari-rpgs/fari-app-wiki",
+ href: "https://fari.community/creators/fari-rpgs/projects/fari-app-wiki",
},
{
label: t("home-route.cards.fari-games.title"),
@@ -410,7 +410,7 @@ export const HomeRoute: React.FC<{}> = () => {
src="https://img.icons8.com/plasticine/100/000000/bookmark--v1.png"
/>
),
- href: "https://fari.games",
+ href: "https://fari.community",
},
];
return (
diff --git a/lib/routes/Scene/SceneRoute.tsx b/lib/routes/Scene/SceneRoute.tsx
index acafc58b..b640852a 100644
--- a/lib/routes/Scene/SceneRoute.tsx
+++ b/lib/routes/Scene/SceneRoute.tsx
@@ -1,9 +1,9 @@
+"use client";
import { Box } from "@mui/material";
+import { useParams, useRouter } from "next/navigation";
import { useContext, useEffect, useState } from "react";
-import { useNavigate, useParams } from "react-router";
import { previewContentEditable } from "../../components/ContentEditable/ContentEditable";
import { Page } from "../../components/Page/Page";
-import { PageMeta } from "../../components/PageMeta/PageMeta";
import { Scene } from "../../components/Scene/Scene";
import { Toolbox } from "../../components/Toolbox/Toolbox";
import { useLogger } from "../../contexts/InjectionsContext/hooks/useLogger";
@@ -14,14 +14,14 @@ import { useEvent } from "../../hooks/useEvent/useEvent";
import { useScene } from "../../hooks/useScene/useScene";
import { DiceDrawer } from "../DiceRoute/components/DiceDrawer";
-function SceneRoute() {
- const params = useParams<{ id: string }>();
+export function SceneRoute() {
+ const params = useParams();
const scenesManager = useContext(ScenesContext);
const sceneManager = useScene();
const sceneName = sceneManager.state.scene?.name ?? "";
const pageTitle = previewContentEditable({ value: sceneName });
- const navigate = useNavigate();
+ const router = useRouter();
const logger = useLogger();
const myBinderManager = useContext(MyBinderContext);
@@ -42,14 +42,13 @@ function SceneRoute() {
if (sceneToLoad) {
sceneManager.actions.loadScene(sceneToLoad);
} else {
- navigate("/", { replace: true });
+ router.replace("/");
myBinderManager.actions.open({ folder: "scenes" });
}
}, [params.id, scenesManager.state.scenes]);
return (
<>
-