From 991c2a2f057af3be5b1a5daebc8acb95bdefffd1 Mon Sep 17 00:00:00 2001 From: Sebastian Pietras Date: Thu, 30 Jul 2026 23:20:45 +0200 Subject: [PATCH] Added `RouteModal` component --- .../generic/components/route-modal/index.ts | 2 ++ .../generic/components/route-modal/main.tsx | 35 +++++++++++++++++++ .../generic/components/route-modal/types.ts | 10 ++++++ 3 files changed, 47 insertions(+) create mode 100644 src/src/isomorphic/generic/components/route-modal/index.ts create mode 100644 src/src/isomorphic/generic/components/route-modal/main.tsx create mode 100644 src/src/isomorphic/generic/components/route-modal/types.ts diff --git a/src/src/isomorphic/generic/components/route-modal/index.ts b/src/src/isomorphic/generic/components/route-modal/index.ts new file mode 100644 index 0000000..94a56ce --- /dev/null +++ b/src/src/isomorphic/generic/components/route-modal/index.ts @@ -0,0 +1,2 @@ +export { RouteModal } from "./main"; +export type { RouteModalInput } from "./types"; diff --git a/src/src/isomorphic/generic/components/route-modal/main.tsx b/src/src/isomorphic/generic/components/route-modal/main.tsx new file mode 100644 index 0000000..8ebb86c --- /dev/null +++ b/src/src/isomorphic/generic/components/route-modal/main.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { Modal } from "@mantine/core"; +import { useRouter } from "next/navigation"; +import { useCallback } from "react"; + +import type { RouteModalInput } from "./types"; + +import { useLocalization } from "../../../localization/hooks/use-localization"; +import { useHistory } from "../../hooks/use-history"; + +export function RouteModal({ fallback, title, ...props }: RouteModalInput) { + const router = useRouter(); + + const { history } = useHistory(); + const { localization } = useLocalization(); + + const handleClose = useCallback(() => { + if (history.entries.length > 1) router.back(); + else router.push(fallback); + }, [fallback, history.entries.length, router]); + + return ( + + ); +} diff --git a/src/src/isomorphic/generic/components/route-modal/types.ts b/src/src/isomorphic/generic/components/route-modal/types.ts new file mode 100644 index 0000000..33fb7ee --- /dev/null +++ b/src/src/isomorphic/generic/components/route-modal/types.ts @@ -0,0 +1,10 @@ +import type { MessageDescriptor } from "@lingui/core"; +import type { ModalProps } from "@mantine/core"; + +export type RouteModalInput = Omit< + ModalProps, + "onClose" | "opened" | "title" +> & { + fallback: string; + title?: MessageDescriptor | string; +};