diff --git a/.storybook/MockRelayEnvironment.tsx b/.storybook/MockRelayEnvironment.tsx index 4c456ee9..0af2e469 100644 --- a/.storybook/MockRelayEnvironment.tsx +++ b/.storybook/MockRelayEnvironment.tsx @@ -62,6 +62,8 @@ export type WithRelayParameters MockPayloadGenerator.generate(operation, mockResolvers); - environment.mock.queueOperationResolver(resolver); - environment.mock.queuePendingOperation(query, variables); + MockRelayEnvironment.mock.queueOperationResolver(resolver); + MockRelayEnvironment.mock.queuePendingOperation(query, variables); return ( - + ); diff --git a/.storybook/preview.ts b/.storybook/preview.ts index acbb7ea3..a37412fe 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,4 +1,5 @@ import type { Preview } from "@storybook/react"; +import { withRouter } from "storybook-addon-remix-react-router"; import AddConfigDark from "./AddConfigDark"; import AddIntlEn from "./AddIntlEn"; @@ -15,7 +16,7 @@ const preview: Preview = { } } }, - decorators: [AddIntlEn, AddConfigDark, AddMockRelayEnvironment] + decorators: [AddIntlEn, AddConfigDark, AddMockRelayEnvironment, withRouter] }; export default preview; diff --git a/package.json b/package.json index 0a912f66..79caebac 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "react-hook-form": "^7.53.0", "react-intl": "^6.8.0", "react-relay": "^18.1.0", + "react-router-dom": "^6.27.0", "tailwind-merge": "^2.5.4", "tailwindcss-animate": "^1.0.7", "uuid": "^10.0.0", @@ -70,13 +71,19 @@ "@chromatic-com/storybook": "2.0.2", "@eslint/js": "^9.12.0", "@rollup/pluginutils": "^5.1.2", - "@storybook/addon-essentials": "^8.3.5", - "@storybook/addon-interactions": "^8.3.5", + "@storybook/addon-essentials": "^8.3.6", + "@storybook/addon-interactions": "^8.3.6", "@storybook/addon-links": "^8.3.5", "@storybook/blocks": "^8.3.5", - "@storybook/react": "^8.3.5", - "@storybook/react-vite": "^8.3.5", - "@storybook/test": "^8.3.5", + "@storybook/channels": "^8.3.6", + "@storybook/components": "^8.3.6", + "@storybook/core-events": "^8.3.6", + "@storybook/manager-api": "^8.3.6", + "@storybook/preview-api": "^8.3.6", + "@storybook/react": "^8.3.6", + "@storybook/react-vite": "^8.3.6", + "@storybook/test": "^8.3.6", + "@storybook/theming": "^8.3.6", "@types/node": "^22.7.6", "@types/react": "^18", "@types/react-dom": "^18.3.1", @@ -99,7 +106,8 @@ "relay-compiler": "^18.1.0", "relay-test-utils": "^18.1.0", "rollup-plugin-jsx-remove-attributes": "^2.0.3", - "storybook": "^8.3.5", + "storybook": "^8.3.6", + "storybook-addon-remix-react-router": "^3.0.1", "tailwindcss": "^3.4.14", "type-fest": "^4.26.1", "typescript": "^5.6.3", diff --git a/src/components/App.tsx b/src/components/App.tsx index e71aec9a..d08a44a8 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -10,10 +10,13 @@ import Locales from "../lib/translations/Locales"; import Loading from "./utils/Loading/Loading"; import icolibrary from "./utils/icolibrary"; -const RelayEnvironment = lazy(async () => { - await devDelay(); - return await import("@/components/core/RelayEnvironment/RelayEnvironment"); -}); +const Environment = lazy( + async () => + await devDelay( + () => import("@/components/core/Environment/Environment"), + "Component Load: Environment" + ) +); interface IProps { preferredLocales: readonly string[]; @@ -83,7 +86,7 @@ const App = (props: IProps) => { }> - + ) : ( diff --git a/src/components/core/RelayEnvironment/RelayEnvironment.tsx b/src/components/core/Environment/Environment.tsx similarity index 78% rename from src/components/core/RelayEnvironment/RelayEnvironment.tsx rename to src/components/core/Environment/Environment.tsx index 1cd8538c..d28de670 100644 --- a/src/components/core/RelayEnvironment/RelayEnvironment.tsx +++ b/src/components/core/Environment/Environment.tsx @@ -1,16 +1,16 @@ -import { useContext, useEffect, useMemo } from "react"; +import { useEffect, useMemo } from "react"; import { useIntl } from "react-intl"; import { RelayEnvironmentProvider } from "react-relay"; -import Layout from "../Layout/Layout"; +import Router from "../Router/Router"; import Pkg from "@/../package.json"; -import ConfigContext from "@/context/config/Context"; +import useConfig from "@/context/config/useConfig"; import ErrorsProvider from "@/context/errors/Provider"; import SessionProvider from "@/context/session/Provider"; import CreateRelayEnvironment from "@/lib/CreateRelayEnvironment"; -const RelayEnvironment = () => { +const Environment = () => { const version = Pkg.version; const intl = useIntl(); @@ -19,7 +19,7 @@ const RelayEnvironment = () => { document.title = intl.formatMessage({ id: "title" }, { version }); }); - const config = useContext(ConfigContext); + const config = useConfig(); const { relayEnviroment, setCredentials } = useMemo( () => CreateRelayEnvironment(config.ApiPath.value), @@ -30,7 +30,7 @@ const RelayEnvironment = () => { setCredentials(credentials, false)}> - setCredentials(credentials, true)} /> @@ -39,4 +39,4 @@ const RelayEnvironment = () => { ); }; -export default RelayEnvironment; +export default Environment; diff --git a/src/components/core/ErrorViewer/ErrorViewer.stories.tsx b/src/components/core/ErrorViewer/ErrorViewer.stories.tsx index 247f31a7..ecbae4dd 100644 --- a/src/components/core/ErrorViewer/ErrorViewer.stories.tsx +++ b/src/components/core/ErrorViewer/ErrorViewer.stories.tsx @@ -1,12 +1,12 @@ import { Meta, StoryObj } from "@storybook/react"; import { expect, userEvent, waitFor, within } from "@storybook/test"; -import { useContext, useEffect } from "react"; +import { useEffect } from "react"; import ErrorViewer from "./ErrorViewer"; import { ErrorMessageSingleFragment$data } from "@/components/graphql/__generated__/ErrorMessageSingleFragment.graphql"; -import ErrorsContext from "@/context/errors/Context"; import ErrorsProvider from "@/context/errors/Provider"; +import useErrors from "@/context/errors/useErrors"; import sleep from "@/lib/sleep"; interface IArgs { @@ -14,7 +14,7 @@ interface IArgs { } const InnerTestComponent = (props: IArgs) => { - const context = useContext(ErrorsContext); + const context = useErrors(); useEffect(() => { context.addErrors(props.errors ?? []); diff --git a/src/components/core/ErrorViewer/ErrorViewer.tsx b/src/components/core/ErrorViewer/ErrorViewer.tsx index 001b810f..ae6fe0c3 100644 --- a/src/components/core/ErrorViewer/ErrorViewer.tsx +++ b/src/components/core/ErrorViewer/ErrorViewer.tsx @@ -1,10 +1,8 @@ -import { useContext } from "react"; - import ErrorCard from "@/components/utils/ErrorCard/ErrorCard"; -import ErrorsContext from "@/context/errors/Context"; +import useErrors from "@/context/errors/useErrors"; const ErrorViewer = () => { - const context = useContext(ErrorsContext); + const context = useErrors(); return ( <> diff --git a/src/components/core/Layout/Layout.tsx b/src/components/core/Layout/Layout.tsx index 2120fb4c..f27be525 100644 --- a/src/components/core/Layout/Layout.tsx +++ b/src/components/core/Layout/Layout.tsx @@ -1,31 +1,32 @@ +import { Suspense } from "react"; +import { Outlet } from "react-router-dom"; + import ErrorViewer from "../ErrorViewer/ErrorViewer"; import Logo from "../Logo/Logo"; import Navbar from "../Navbar/Navbar"; import ReportIssue from "../ReportIssue/ReportIssue"; -import Router from "../Router/Router"; +import Loading from "@/components/utils/Loading/Loading"; import ErrorBoundary from "@/components/utils/ErrorBoundary/ErrorBoundary"; -import { ICredentials } from "@/lib/Credentials"; -interface IProps { - setTemporaryCredentials: (credentials: ICredentials) => void; -} -const Layout = (props: IProps) => { +const Layout = () => { return ( - + <> -
-
-
+
+
+ -
+ }> + + +
-
- + ); }; diff --git a/src/components/core/Navbar/Navbar.tsx b/src/components/core/Navbar/Navbar.tsx index e0d0b453..6fdefc15 100644 --- a/src/components/core/Navbar/Navbar.tsx +++ b/src/components/core/Navbar/Navbar.tsx @@ -2,6 +2,7 @@ import { Menu, X } from "lucide-react"; import { useState } from "react"; +import { Link } from "react-router-dom"; import { Button } from "@/components/ui/button"; import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"; @@ -9,31 +10,26 @@ import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"; const Navbar = () => { const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); - const navItems = [ - { name: "Home", href: "/" }, - { name: "About", href: "/about" }, - { name: "Services", href: "/services" }, - { name: "Contact", href: "/contact" } - ]; + const navItems = [{ name: "Configuration", href: "/config" }]; return (