From b025b4fbf901500b5fc743aed3e62f52c511711c Mon Sep 17 00:00:00 2001 From: nourinmohd Date: Tue, 7 Jul 2026 10:18:55 +0200 Subject: [PATCH 1/4] ENH: Restucture menu --- frontend/src/components/Sidebar.style.ts | 22 +++ frontend/src/components/Sidebar.tsx | 86 +++++++--- .../src/components/project/rms/Overview.tsx | 41 ++--- frontend/src/routeTree.gen.ts | 154 +++++++++++++++++- .../src/routes/project/mappings/overview.tsx | 30 ++++ .../routes/project/mappings/stratigraphy.tsx | 114 +++++++++++++ .../src/routes/project/mappings/wellbores.tsx | 30 ++++ frontend/src/routes/project/rms.tsx | 46 ++---- frontend/src/routes/project/rms/overview.tsx | 46 ++++++ .../src/routes/project/rms/stratigraphy.tsx | 46 ++++++ frontend/src/routes/project/rms/wellbores.tsx | 30 ++++ frontend/src/routes/project/stratigraphy.tsx | 113 +------------ frontend/src/services/tasks.ts | 4 +- 13 files changed, 561 insertions(+), 201 deletions(-) create mode 100644 frontend/src/components/Sidebar.style.ts create mode 100644 frontend/src/routes/project/mappings/overview.tsx create mode 100644 frontend/src/routes/project/mappings/stratigraphy.tsx create mode 100644 frontend/src/routes/project/mappings/wellbores.tsx create mode 100644 frontend/src/routes/project/rms/overview.tsx create mode 100644 frontend/src/routes/project/rms/stratigraphy.tsx create mode 100644 frontend/src/routes/project/rms/wellbores.tsx diff --git a/frontend/src/components/Sidebar.style.ts b/frontend/src/components/Sidebar.style.ts new file mode 100644 index 00000000..651cd09e --- /dev/null +++ b/frontend/src/components/Sidebar.style.ts @@ -0,0 +1,22 @@ +import { tokens } from "@equinor/eds-tokens"; +import styled from "styled-components"; + +export const SidebarGroup = styled.div` + display: flex; + flex-direction: column; +`; + +export const SidebarGroupLabel = styled.div<{ $active: boolean }>` + padding: ${tokens.spacings.comfortable.small} + ${tokens.spacings.comfortable.medium} 0 + ${tokens.spacings.comfortable.x_large}; + color: ${({ $active }) => + $active + ? tokens.colors.interactive.primary__resting.hex + : tokens.colors.text.static_icons__tertiary.hex}; + font-weight: 500; +`; + +export const SidebarGroupItems = styled.div` + padding-left: ${tokens.spacings.comfortable.medium}; +`; diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index e260a609..751f5849 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -3,12 +3,54 @@ import { account_circle, dashboard, folder } from "@equinor/eds-icons"; import { Link, useLocation } from "@tanstack/react-router"; import { useProject } from "#services/project"; +import { + SidebarGroup, + SidebarGroupItems, + SidebarGroupLabel, +} from "./Sidebar.style"; -type AccordianSubItem = { +type AccordionSubItem = { label: string; to: string; + children?: AccordionSubItem[]; }; +function SidebarItem({ + item, + currentPath, +}: { + item: AccordionSubItem; + currentPath: string; +}) { + if (item.children) { + return ( + + + {item.label} + + + {item.children.map((child) => ( + + ))} + + + ); + } + + return ( + + ); +} + export function Sidebar() { const project = useProject(); const location = useLocation(); @@ -18,12 +60,28 @@ export function Sidebar() { const projectExpanded = currentPath.startsWith("/project"); const userExpanded = currentPath.startsWith("/user"); - const ProjectSubItems: AccordianSubItem[] = []; + const ProjectSubItems: AccordionSubItem[] = []; if (project.status) { - ProjectSubItems.push({ label: "Masterdata", to: "/masterdata" }); - ProjectSubItems.push({ label: "RMS", to: "/rms" }); - ProjectSubItems.push({ label: "Stratigraphy", to: "/stratigraphy" }); - ProjectSubItems.push({ label: "History", to: "/history" }); + ProjectSubItems.push({ label: "Masterdata", to: "/project/masterdata" }); + ProjectSubItems.push({ + label: "RMS", + to: "/project/rms", + children: [ + { label: "Overview", to: "/project/rms/overview" }, + { label: "Stratigraphy", to: "/project/rms/stratigraphy" }, + { label: "Wellbores", to: "/project/rms/wellbores" }, + ], + }); + ProjectSubItems.push({ + label: "Mappings", + to: "/project/mappings", + children: [ + { label: "Overview", to: "/project/mappings/overview" }, + { label: "Stratigraphy", to: "/project/mappings/stratigraphy" }, + { label: "Wellbores", to: "/project/mappings/wellbores" }, + ], + }); + ProjectSubItems.push({ label: "History", to: "/project/history" }); } return ( @@ -49,19 +107,9 @@ export function Sidebar() { active={currentPath === "/project"} /> - {ProjectSubItems.map((item) => { - const to = `/project${item.to}`; - - return ( - - ); - })} + {ProjectSubItems.map((item) => ( + + ))} - - - The following is the main RMS project located in the rms/model{" "} - directory. The version is detected automatically: - - - {rmsData ? ( - - ) : ( - No RMS project information found in the project. - )} - - - - - - - + + The following is the main RMS project located in the rms/model{" "} + directory. The version is detected automatically: + + + {rmsData ? ( + + ) : ( + No RMS project information found in the project. + )} + + - + + + ); } diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index c3a9d025..421f4282 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -17,6 +17,12 @@ import { Route as ProjectStratigraphyRouteImport } from "./routes/project/strati import { Route as ProjectRmsRouteImport } from "./routes/project/rms"; import { Route as ProjectMasterdataRouteImport } from "./routes/project/masterdata"; import { Route as ProjectHistoryRouteImport } from "./routes/project/history"; +import { Route as ProjectRmsWellboresRouteImport } from "./routes/project/rms/wellbores"; +import { Route as ProjectRmsStratigraphyRouteImport } from "./routes/project/rms/stratigraphy"; +import { Route as ProjectRmsOverviewRouteImport } from "./routes/project/rms/overview"; +import { Route as ProjectMappingsWellboresRouteImport } from "./routes/project/mappings/wellbores"; +import { Route as ProjectMappingsStratigraphyRouteImport } from "./routes/project/mappings/stratigraphy"; +import { Route as ProjectMappingsOverviewRouteImport } from "./routes/project/mappings/overview"; const IndexRoute = IndexRouteImport.update({ id: "/", @@ -58,37 +64,87 @@ const ProjectHistoryRoute = ProjectHistoryRouteImport.update({ path: "/project/history", getParentRoute: () => rootRouteImport, } as any); +const ProjectRmsWellboresRoute = ProjectRmsWellboresRouteImport.update({ + id: "/wellbores", + path: "/wellbores", + getParentRoute: () => ProjectRmsRoute, +} as any); +const ProjectRmsStratigraphyRoute = ProjectRmsStratigraphyRouteImport.update({ + id: "/stratigraphy", + path: "/stratigraphy", + getParentRoute: () => ProjectRmsRoute, +} as any); +const ProjectRmsOverviewRoute = ProjectRmsOverviewRouteImport.update({ + id: "/overview", + path: "/overview", + getParentRoute: () => ProjectRmsRoute, +} as any); +const ProjectMappingsWellboresRoute = + ProjectMappingsWellboresRouteImport.update({ + id: "/project/mappings/wellbores", + path: "/project/mappings/wellbores", + getParentRoute: () => rootRouteImport, + } as any); +const ProjectMappingsStratigraphyRoute = + ProjectMappingsStratigraphyRouteImport.update({ + id: "/project/mappings/stratigraphy", + path: "/project/mappings/stratigraphy", + getParentRoute: () => rootRouteImport, + } as any); +const ProjectMappingsOverviewRoute = ProjectMappingsOverviewRouteImport.update({ + id: "/project/mappings/overview", + path: "/project/mappings/overview", + getParentRoute: () => rootRouteImport, +} as any); export interface FileRoutesByFullPath { "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; "/project/masterdata": typeof ProjectMasterdataRoute; - "/project/rms": typeof ProjectRmsRoute; + "/project/rms": typeof ProjectRmsRouteWithChildren; "/project/stratigraphy": typeof ProjectStratigraphyRoute; "/user/keys": typeof UserKeysRoute; "/user/recovery": typeof UserRecoveryRoute; "/project/": typeof ProjectIndexRoute; + "/project/mappings/overview": typeof ProjectMappingsOverviewRoute; + "/project/mappings/stratigraphy": typeof ProjectMappingsStratigraphyRoute; + "/project/mappings/wellbores": typeof ProjectMappingsWellboresRoute; + "/project/rms/overview": typeof ProjectRmsOverviewRoute; + "/project/rms/stratigraphy": typeof ProjectRmsStratigraphyRoute; + "/project/rms/wellbores": typeof ProjectRmsWellboresRoute; } export interface FileRoutesByTo { "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; "/project/masterdata": typeof ProjectMasterdataRoute; - "/project/rms": typeof ProjectRmsRoute; + "/project/rms": typeof ProjectRmsRouteWithChildren; "/project/stratigraphy": typeof ProjectStratigraphyRoute; "/user/keys": typeof UserKeysRoute; "/user/recovery": typeof UserRecoveryRoute; "/project": typeof ProjectIndexRoute; + "/project/mappings/overview": typeof ProjectMappingsOverviewRoute; + "/project/mappings/stratigraphy": typeof ProjectMappingsStratigraphyRoute; + "/project/mappings/wellbores": typeof ProjectMappingsWellboresRoute; + "/project/rms/overview": typeof ProjectRmsOverviewRoute; + "/project/rms/stratigraphy": typeof ProjectRmsStratigraphyRoute; + "/project/rms/wellbores": typeof ProjectRmsWellboresRoute; } export interface FileRoutesById { __root__: typeof rootRouteImport; "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; "/project/masterdata": typeof ProjectMasterdataRoute; - "/project/rms": typeof ProjectRmsRoute; + "/project/rms": typeof ProjectRmsRouteWithChildren; "/project/stratigraphy": typeof ProjectStratigraphyRoute; "/user/keys": typeof UserKeysRoute; "/user/recovery": typeof UserRecoveryRoute; "/project/": typeof ProjectIndexRoute; + "/project/mappings/overview": typeof ProjectMappingsOverviewRoute; + "/project/mappings/stratigraphy": typeof ProjectMappingsStratigraphyRoute; + "/project/mappings/wellbores": typeof ProjectMappingsWellboresRoute; + "/project/rms/overview": typeof ProjectRmsOverviewRoute; + "/project/rms/stratigraphy": typeof ProjectRmsStratigraphyRoute; + "/project/rms/wellbores": typeof ProjectRmsWellboresRoute; } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath; @@ -100,7 +156,13 @@ export interface FileRouteTypes { | "/project/stratigraphy" | "/user/keys" | "/user/recovery" - | "/project/"; + | "/project/" + | "/project/mappings/overview" + | "/project/mappings/stratigraphy" + | "/project/mappings/wellbores" + | "/project/rms/overview" + | "/project/rms/stratigraphy" + | "/project/rms/wellbores"; fileRoutesByTo: FileRoutesByTo; to: | "/" @@ -110,7 +172,13 @@ export interface FileRouteTypes { | "/project/stratigraphy" | "/user/keys" | "/user/recovery" - | "/project"; + | "/project" + | "/project/mappings/overview" + | "/project/mappings/stratigraphy" + | "/project/mappings/wellbores" + | "/project/rms/overview" + | "/project/rms/stratigraphy" + | "/project/rms/wellbores"; id: | "__root__" | "/" @@ -120,18 +188,27 @@ export interface FileRouteTypes { | "/project/stratigraphy" | "/user/keys" | "/user/recovery" - | "/project/"; + | "/project/" + | "/project/mappings/overview" + | "/project/mappings/stratigraphy" + | "/project/mappings/wellbores" + | "/project/rms/overview" + | "/project/rms/stratigraphy" + | "/project/rms/wellbores"; fileRoutesById: FileRoutesById; } export interface RootRouteChildren { IndexRoute: typeof IndexRoute; ProjectHistoryRoute: typeof ProjectHistoryRoute; ProjectMasterdataRoute: typeof ProjectMasterdataRoute; - ProjectRmsRoute: typeof ProjectRmsRoute; + ProjectRmsRoute: typeof ProjectRmsRouteWithChildren; ProjectStratigraphyRoute: typeof ProjectStratigraphyRoute; UserKeysRoute: typeof UserKeysRoute; UserRecoveryRoute: typeof UserRecoveryRoute; ProjectIndexRoute: typeof ProjectIndexRoute; + ProjectMappingsOverviewRoute: typeof ProjectMappingsOverviewRoute; + ProjectMappingsStratigraphyRoute: typeof ProjectMappingsStratigraphyRoute; + ProjectMappingsWellboresRoute: typeof ProjectMappingsWellboresRoute; } declare module "@tanstack/react-router" { @@ -192,18 +269,79 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof ProjectHistoryRouteImport; parentRoute: typeof rootRouteImport; }; + "/project/rms/wellbores": { + id: "/project/rms/wellbores"; + path: "/wellbores"; + fullPath: "/project/rms/wellbores"; + preLoaderRoute: typeof ProjectRmsWellboresRouteImport; + parentRoute: typeof ProjectRmsRoute; + }; + "/project/rms/stratigraphy": { + id: "/project/rms/stratigraphy"; + path: "/stratigraphy"; + fullPath: "/project/rms/stratigraphy"; + preLoaderRoute: typeof ProjectRmsStratigraphyRouteImport; + parentRoute: typeof ProjectRmsRoute; + }; + "/project/rms/overview": { + id: "/project/rms/overview"; + path: "/overview"; + fullPath: "/project/rms/overview"; + preLoaderRoute: typeof ProjectRmsOverviewRouteImport; + parentRoute: typeof ProjectRmsRoute; + }; + "/project/mappings/wellbores": { + id: "/project/mappings/wellbores"; + path: "/project/mappings/wellbores"; + fullPath: "/project/mappings/wellbores"; + preLoaderRoute: typeof ProjectMappingsWellboresRouteImport; + parentRoute: typeof rootRouteImport; + }; + "/project/mappings/stratigraphy": { + id: "/project/mappings/stratigraphy"; + path: "/project/mappings/stratigraphy"; + fullPath: "/project/mappings/stratigraphy"; + preLoaderRoute: typeof ProjectMappingsStratigraphyRouteImport; + parentRoute: typeof rootRouteImport; + }; + "/project/mappings/overview": { + id: "/project/mappings/overview"; + path: "/project/mappings/overview"; + fullPath: "/project/mappings/overview"; + preLoaderRoute: typeof ProjectMappingsOverviewRouteImport; + parentRoute: typeof rootRouteImport; + }; } } +interface ProjectRmsRouteChildren { + ProjectRmsOverviewRoute: typeof ProjectRmsOverviewRoute; + ProjectRmsStratigraphyRoute: typeof ProjectRmsStratigraphyRoute; + ProjectRmsWellboresRoute: typeof ProjectRmsWellboresRoute; +} + +const ProjectRmsRouteChildren: ProjectRmsRouteChildren = { + ProjectRmsOverviewRoute: ProjectRmsOverviewRoute, + ProjectRmsStratigraphyRoute: ProjectRmsStratigraphyRoute, + ProjectRmsWellboresRoute: ProjectRmsWellboresRoute, +}; + +const ProjectRmsRouteWithChildren = ProjectRmsRoute._addFileChildren( + ProjectRmsRouteChildren, +); + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, ProjectHistoryRoute: ProjectHistoryRoute, ProjectMasterdataRoute: ProjectMasterdataRoute, - ProjectRmsRoute: ProjectRmsRoute, + ProjectRmsRoute: ProjectRmsRouteWithChildren, ProjectStratigraphyRoute: ProjectStratigraphyRoute, UserKeysRoute: UserKeysRoute, UserRecoveryRoute: UserRecoveryRoute, ProjectIndexRoute: ProjectIndexRoute, + ProjectMappingsOverviewRoute: ProjectMappingsOverviewRoute, + ProjectMappingsStratigraphyRoute: ProjectMappingsStratigraphyRoute, + ProjectMappingsWellboresRoute: ProjectMappingsWellboresRoute, }; export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/frontend/src/routes/project/mappings/overview.tsx b/frontend/src/routes/project/mappings/overview.tsx new file mode 100644 index 00000000..6afe16d2 --- /dev/null +++ b/frontend/src/routes/project/mappings/overview.tsx @@ -0,0 +1,30 @@ +import { createFileRoute } from "@tanstack/react-router"; + +import { useProject } from "#services/project"; +import { + PageContainerNotWidthConstrained, + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/mappings/overview")({ + component: RouteComponent, +}); + +function RouteComponent() { + const project = useProject(); + + return ( + + + Mappings overview + + {project.status + ? "No mappings overview content available yet." + : "Project not set."} + + + + ); +} diff --git a/frontend/src/routes/project/mappings/stratigraphy.tsx b/frontend/src/routes/project/mappings/stratigraphy.tsx new file mode 100644 index 00000000..2d5f37c6 --- /dev/null +++ b/frontend/src/routes/project/mappings/stratigraphy.tsx @@ -0,0 +1,114 @@ +import { Typography } from "@equinor/eds-core-react"; +import { createFileRoute } from "@tanstack/react-router"; +import { Suspense, useState } from "react"; + +import { Loading, SmdaHealthCheckInfo } from "#components/common"; +import { Overview } from "#components/project/stratigraphy/Overview"; +import { useProject } from "#services/project"; +import { useSmdaHealthCheck } from "#services/smda"; +import { + PageContainerNotWidthConstrained, + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; +import { + getStorageItem, + STORAGENAME_STRATIGRAPHY_EDIT_MODE, + setStorageItem, +} from "#utils/storage"; + +export const Route = createFileRoute("/project/mappings/stratigraphy")({ + component: RouteComponent, +}); + +function Content() { + const [editMode, setEditMode] = useState( + getStorageItem( + sessionStorage, + STORAGENAME_STRATIGRAPHY_EDIT_MODE, + "boolean", + ), + ); + const { setRequestAcquireSsoAccessToken } = Route.useRouteContext(); + + const project = useProject(); + const { data: healthCheck } = useSmdaHealthCheck(); + + function toggleEditMode() { + setEditMode((prevMode) => { + setStorageItem( + sessionStorage, + STORAGENAME_STRATIGRAPHY_EDIT_MODE, + !prevMode, + ); + + return !prevMode; + }); + } + + if (!project.status) { + return ( + + Project not set. + + ); + } + + return ( + <> + {project.data?.config.rms !== undefined && + project.data.config.rms !== null ? ( + <> + + + + {editMode ? ( + + ) : ( + + {" "} + 💡 To manage mappings,{" "} + + enable editing mode. + + + )} + + + ) : ( + + No RMS project is selected. + + )} + + ); +} + +function RouteComponent() { + return ( + + + Mappings stratigraphy + + + }> + + + + ); +} diff --git a/frontend/src/routes/project/mappings/wellbores.tsx b/frontend/src/routes/project/mappings/wellbores.tsx new file mode 100644 index 00000000..7708d53b --- /dev/null +++ b/frontend/src/routes/project/mappings/wellbores.tsx @@ -0,0 +1,30 @@ +import { createFileRoute } from "@tanstack/react-router"; + +import { useProject } from "#services/project"; +import { + PageContainerNotWidthConstrained, + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/mappings/wellbores")({ + component: RouteComponent, +}); + +function RouteComponent() { + const project = useProject(); + + return ( + + + Mappings wellbores + + {project.status + ? "No wellbore mapping content available yet." + : "Project not set."} + + + + ); +} diff --git a/frontend/src/routes/project/rms.tsx b/frontend/src/routes/project/rms.tsx index 1aa44ae6..55167e31 100644 --- a/frontend/src/routes/project/rms.tsx +++ b/frontend/src/routes/project/rms.tsx @@ -1,46 +1,20 @@ -import { createFileRoute } from "@tanstack/react-router"; -import { Suspense } from "react"; - -import { Loading } from "#components/common"; -import { Overview } from "#components/project/rms/Overview"; -import { useProject } from "#services/project"; import { - PageContainerNotWidthConstrained, - PageHeader, - PageSectionWidthConstrained, - PageText, -} from "#styles/common"; + createFileRoute, + Navigate, + Outlet, + useLocation, +} from "@tanstack/react-router"; export const Route = createFileRoute("/project/rms")({ component: RouteComponent, }); -function Content() { - const project = useProject(); - - return project.status && project.data ? ( - - ) : ( - - Project not set. - - ); -} - function RouteComponent() { - return ( - - - RMS - + const location = useLocation(); - }> - - - + return location.pathname === "/project/rms" ? ( + + ) : ( + ); } diff --git a/frontend/src/routes/project/rms/overview.tsx b/frontend/src/routes/project/rms/overview.tsx new file mode 100644 index 00000000..287d2cf8 --- /dev/null +++ b/frontend/src/routes/project/rms/overview.tsx @@ -0,0 +1,46 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { Suspense } from "react"; + +import { Loading } from "#components/common"; +import { Overview } from "#components/project/rms/Overview"; +import { useProject } from "#services/project"; +import { + PageContainerNotWidthConstrained, + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/rms/overview")({ + component: RouteComponent, +}); + +function Content() { + const project = useProject(); + + return project.status && project.data ? ( + + ) : ( + + Project not set. + + ); +} + +function RouteComponent() { + return ( + + + RMS overview + + + }> + + + + ); +} diff --git a/frontend/src/routes/project/rms/stratigraphy.tsx b/frontend/src/routes/project/rms/stratigraphy.tsx new file mode 100644 index 00000000..9c4c0876 --- /dev/null +++ b/frontend/src/routes/project/rms/stratigraphy.tsx @@ -0,0 +1,46 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { Suspense } from "react"; + +import { Loading } from "#components/common"; +import { Stratigraphy } from "#components/project/rms/Stratigraphy"; +import { useProject } from "#services/project"; +import { + PageContainerNotWidthConstrained, + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/rms/stratigraphy")({ + component: RouteComponent, +}); + +function Content() { + const project = useProject(); + + return project.status && project.data ? ( + + ) : ( + + Project not set. + + ); +} + +function RouteComponent() { + return ( + + + RMS stratigraphy + + + }> + + + + ); +} diff --git a/frontend/src/routes/project/rms/wellbores.tsx b/frontend/src/routes/project/rms/wellbores.tsx new file mode 100644 index 00000000..891a39c9 --- /dev/null +++ b/frontend/src/routes/project/rms/wellbores.tsx @@ -0,0 +1,30 @@ +import { createFileRoute } from "@tanstack/react-router"; + +import { useProject } from "#services/project"; +import { + PageContainerNotWidthConstrained, + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/rms/wellbores")({ + component: RouteComponent, +}); + +function RouteComponent() { + const project = useProject(); + + return ( + + + RMS wellbores + + {project.status + ? "No wellbore content available yet." + : "Project not set."} + + + + ); +} diff --git a/frontend/src/routes/project/stratigraphy.tsx b/frontend/src/routes/project/stratigraphy.tsx index bb013d93..18448f3a 100644 --- a/frontend/src/routes/project/stratigraphy.tsx +++ b/frontend/src/routes/project/stratigraphy.tsx @@ -1,114 +1,5 @@ -import { Typography } from "@equinor/eds-core-react"; -import { createFileRoute } from "@tanstack/react-router"; -import { Suspense, useState } from "react"; - -import { Loading, SmdaHealthCheckInfo } from "#components/common"; -import { Overview } from "#components/project/stratigraphy/Overview"; -import { useProject } from "#services/project"; -import { useSmdaHealthCheck } from "#services/smda"; -import { - PageContainerNotWidthConstrained, - PageHeader, - PageSectionWidthConstrained, - PageText, -} from "#styles/common"; -import { - getStorageItem, - STORAGENAME_STRATIGRAPHY_EDIT_MODE, - setStorageItem, -} from "#utils/storage"; +import { createFileRoute, Navigate } from "@tanstack/react-router"; export const Route = createFileRoute("/project/stratigraphy")({ - component: RouteComponent, + component: () => , }); - -function Content() { - const [editMode, setEditMode] = useState( - getStorageItem( - sessionStorage, - STORAGENAME_STRATIGRAPHY_EDIT_MODE, - "boolean", - ), - ); - const { setRequestAcquireSsoAccessToken } = Route.useRouteContext(); - - const project = useProject(); - const { data: healthCheck } = useSmdaHealthCheck(); - - function toggleEditMode() { - setEditMode((prevMode) => { - setStorageItem( - sessionStorage, - STORAGENAME_STRATIGRAPHY_EDIT_MODE, - !prevMode, - ); - - return !prevMode; - }); - } - - if (!project.status) { - return ( - - Project not set. - - ); - } - - return ( - <> - {project.data?.config.rms !== undefined && - project.data.config.rms !== null ? ( - <> - - - - {editMode ? ( - - ) : ( - - {" "} - 💡 To manage mappings,{" "} - - enable editing mode. - - - )} - - - ) : ( - - No RMS project is selected. - - )} - - ); -} - -function RouteComponent() { - return ( - - - Stratigraphy - - - }> - - - - ); -} diff --git a/frontend/src/services/tasks.ts b/frontend/src/services/tasks.ts index c571c8ca..ddd5fdd0 100644 --- a/frontend/src/services/tasks.ts +++ b/frontend/src/services/tasks.ts @@ -53,7 +53,7 @@ export function useTaskList(): Task[] { id: "rms", label: "Set RMS project and stratigraphy", done: !!config.rms?.path && (zones.length > 0 || horizons.length > 0), - to: "/project/rms", + to: "/project/rms/overview", }, { id: "mappings", @@ -61,7 +61,7 @@ export function useTaskList(): Task[] { done: (zones.length > 0 || horizons.length > 0) && [...zones, ...horizons].every((item) => mappedRmsIds.has(item.name)), - to: "/project/stratigraphy", + to: "/project/mappings/stratigraphy", }, ]; } From c6c6c1e65dce77f0b64b8d53223bfef359648a70 Mon Sep 17 00:00:00 2001 From: nourinmohd Date: Tue, 7 Jul 2026 13:30:52 +0200 Subject: [PATCH 2/4] Change after Gibrans review --- frontend/src/components/Sidebar.style.ts | 26 ++++++++------------ frontend/src/components/Sidebar.tsx | 30 ++++++++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/frontend/src/components/Sidebar.style.ts b/frontend/src/components/Sidebar.style.ts index 651cd09e..3d0577ca 100644 --- a/frontend/src/components/Sidebar.style.ts +++ b/frontend/src/components/Sidebar.style.ts @@ -1,22 +1,16 @@ import { tokens } from "@equinor/eds-tokens"; import styled from "styled-components"; -export const SidebarGroup = styled.div` - display: flex; - flex-direction: column; -`; +export const NestedAccordion = styled.div` + & > div { + border-bottom: none; + } -export const SidebarGroupLabel = styled.div<{ $active: boolean }>` - padding: ${tokens.spacings.comfortable.small} - ${tokens.spacings.comfortable.medium} 0 - ${tokens.spacings.comfortable.x_large}; - color: ${({ $active }) => - $active - ? tokens.colors.interactive.primary__resting.hex - : tokens.colors.text.static_icons__tertiary.hex}; - font-weight: 500; -`; + [role="region"] { + border-bottom: none; + } -export const SidebarGroupItems = styled.div` - padding-left: ${tokens.spacings.comfortable.medium}; + [role="region"] a { + padding-left: ${tokens.spacings.comfortable.medium}; + } `; diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 751f5849..628b5934 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -1,13 +1,18 @@ import { SideBar as EdsSideBar } from "@equinor/eds-core-react"; +import type { IconData } from "@equinor/eds-icons"; import { account_circle, dashboard, folder } from "@equinor/eds-icons"; import { Link, useLocation } from "@tanstack/react-router"; import { useProject } from "#services/project"; -import { - SidebarGroup, - SidebarGroupItems, - SidebarGroupLabel, -} from "./Sidebar.style"; +import { NestedAccordion } from "./Sidebar.style"; + +const blankIcon: IconData = { + name: "blank", + prefix: "eds", + height: "24", + width: "24", + svgPathData: "", +}; type AccordionSubItem = { label: string; @@ -24,11 +29,12 @@ function SidebarItem({ }) { if (item.children) { return ( - - - {item.label} - - + + {item.children.map((child) => ( ))} - - + + ); } From f7d8d013bbbb0a7b48ede54741e6d50fc2990d7f Mon Sep 17 00:00:00 2001 From: nourinmohd Date: Wed, 8 Jul 2026 10:37:42 +0200 Subject: [PATCH 3/4] Changes after PR comments from Gibran --- frontend/src/components/Sidebar.style.ts | 2 + frontend/src/components/Sidebar.tsx | 1 + .../components/project/rms/Stratigraphy.tsx | 2 - frontend/src/routeTree.gen.ts | 121 ++++++++++++++---- frontend/src/routes/project/mappings.tsx | 15 +++ .../src/routes/project/mappings/index.tsx | 5 + .../src/routes/project/mappings/overview.tsx | 4 +- .../routes/project/mappings/stratigraphy.tsx | 2 +- .../src/routes/project/mappings/wellbores.tsx | 4 +- frontend/src/routes/project/rms.tsx | 19 +-- frontend/src/routes/project/rms/index.tsx | 5 + frontend/src/routes/project/rms/overview.tsx | 2 +- .../src/routes/project/rms/stratigraphy.tsx | 2 +- frontend/src/routes/project/rms/wellbores.tsx | 4 +- frontend/src/services/tasks.ts | 10 +- 15 files changed, 147 insertions(+), 51 deletions(-) create mode 100644 frontend/src/routes/project/mappings.tsx create mode 100644 frontend/src/routes/project/mappings/index.tsx create mode 100644 frontend/src/routes/project/rms/index.tsx diff --git a/frontend/src/components/Sidebar.style.ts b/frontend/src/components/Sidebar.style.ts index 3d0577ca..2af9dfa8 100644 --- a/frontend/src/components/Sidebar.style.ts +++ b/frontend/src/components/Sidebar.style.ts @@ -2,6 +2,7 @@ import { tokens } from "@equinor/eds-tokens"; import styled from "styled-components"; export const NestedAccordion = styled.div` + /* Remove EDS accordion borders so nested groups read as one sidebar section. */ & > div { border-bottom: none; } @@ -10,6 +11,7 @@ export const NestedAccordion = styled.div` border-bottom: none; } + /* Indent nested links to keep child pages visually grouped under the parent. */ [role="region"] a { padding-left: ${tokens.spacings.comfortable.medium}; } diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 628b5934..f37ff872 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -6,6 +6,7 @@ import { Link, useLocation } from "@tanstack/react-router"; import { useProject } from "#services/project"; import { NestedAccordion } from "./Sidebar.style"; +// EDS requires an icon for accordion headers; a blank icon keeps nested labels aligned. const blankIcon: IconData = { name: "blank", prefix: "eds", diff --git a/frontend/src/components/project/rms/Stratigraphy.tsx b/frontend/src/components/project/rms/Stratigraphy.tsx index 3ad34740..3b885868 100644 --- a/frontend/src/components/project/rms/Stratigraphy.tsx +++ b/frontend/src/components/project/rms/Stratigraphy.tsx @@ -471,8 +471,6 @@ export function Stratigraphy({ return ( <> - Stratigraphy - The following is the model stratigraphy stored in the project, this can be a subset or the full RMS stratigraphy. It is only the stored diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index 421f4282..69deef3d 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -16,7 +16,10 @@ import { Route as UserKeysRouteImport } from "./routes/user/keys"; import { Route as ProjectStratigraphyRouteImport } from "./routes/project/stratigraphy"; import { Route as ProjectRmsRouteImport } from "./routes/project/rms"; import { Route as ProjectMasterdataRouteImport } from "./routes/project/masterdata"; +import { Route as ProjectMappingsRouteImport } from "./routes/project/mappings"; import { Route as ProjectHistoryRouteImport } from "./routes/project/history"; +import { Route as ProjectRmsIndexRouteImport } from "./routes/project/rms/index"; +import { Route as ProjectMappingsIndexRouteImport } from "./routes/project/mappings/index"; import { Route as ProjectRmsWellboresRouteImport } from "./routes/project/rms/wellbores"; import { Route as ProjectRmsStratigraphyRouteImport } from "./routes/project/rms/stratigraphy"; import { Route as ProjectRmsOverviewRouteImport } from "./routes/project/rms/overview"; @@ -59,11 +62,26 @@ const ProjectMasterdataRoute = ProjectMasterdataRouteImport.update({ path: "/project/masterdata", getParentRoute: () => rootRouteImport, } as any); +const ProjectMappingsRoute = ProjectMappingsRouteImport.update({ + id: "/project/mappings", + path: "/project/mappings", + getParentRoute: () => rootRouteImport, +} as any); const ProjectHistoryRoute = ProjectHistoryRouteImport.update({ id: "/project/history", path: "/project/history", getParentRoute: () => rootRouteImport, } as any); +const ProjectRmsIndexRoute = ProjectRmsIndexRouteImport.update({ + id: "/", + path: "/", + getParentRoute: () => ProjectRmsRoute, +} as any); +const ProjectMappingsIndexRoute = ProjectMappingsIndexRouteImport.update({ + id: "/", + path: "/", + getParentRoute: () => ProjectMappingsRoute, +} as any); const ProjectRmsWellboresRoute = ProjectRmsWellboresRouteImport.update({ id: "/wellbores", path: "/wellbores", @@ -81,25 +99,26 @@ const ProjectRmsOverviewRoute = ProjectRmsOverviewRouteImport.update({ } as any); const ProjectMappingsWellboresRoute = ProjectMappingsWellboresRouteImport.update({ - id: "/project/mappings/wellbores", - path: "/project/mappings/wellbores", - getParentRoute: () => rootRouteImport, + id: "/wellbores", + path: "/wellbores", + getParentRoute: () => ProjectMappingsRoute, } as any); const ProjectMappingsStratigraphyRoute = ProjectMappingsStratigraphyRouteImport.update({ - id: "/project/mappings/stratigraphy", - path: "/project/mappings/stratigraphy", - getParentRoute: () => rootRouteImport, + id: "/stratigraphy", + path: "/stratigraphy", + getParentRoute: () => ProjectMappingsRoute, } as any); const ProjectMappingsOverviewRoute = ProjectMappingsOverviewRouteImport.update({ - id: "/project/mappings/overview", - path: "/project/mappings/overview", - getParentRoute: () => rootRouteImport, + id: "/overview", + path: "/overview", + getParentRoute: () => ProjectMappingsRoute, } as any); export interface FileRoutesByFullPath { "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; + "/project/mappings": typeof ProjectMappingsRouteWithChildren; "/project/masterdata": typeof ProjectMasterdataRoute; "/project/rms": typeof ProjectRmsRouteWithChildren; "/project/stratigraphy": typeof ProjectStratigraphyRoute; @@ -112,12 +131,13 @@ export interface FileRoutesByFullPath { "/project/rms/overview": typeof ProjectRmsOverviewRoute; "/project/rms/stratigraphy": typeof ProjectRmsStratigraphyRoute; "/project/rms/wellbores": typeof ProjectRmsWellboresRoute; + "/project/mappings/": typeof ProjectMappingsIndexRoute; + "/project/rms/": typeof ProjectRmsIndexRoute; } export interface FileRoutesByTo { "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; "/project/masterdata": typeof ProjectMasterdataRoute; - "/project/rms": typeof ProjectRmsRouteWithChildren; "/project/stratigraphy": typeof ProjectStratigraphyRoute; "/user/keys": typeof UserKeysRoute; "/user/recovery": typeof UserRecoveryRoute; @@ -128,11 +148,14 @@ export interface FileRoutesByTo { "/project/rms/overview": typeof ProjectRmsOverviewRoute; "/project/rms/stratigraphy": typeof ProjectRmsStratigraphyRoute; "/project/rms/wellbores": typeof ProjectRmsWellboresRoute; + "/project/mappings": typeof ProjectMappingsIndexRoute; + "/project/rms": typeof ProjectRmsIndexRoute; } export interface FileRoutesById { __root__: typeof rootRouteImport; "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; + "/project/mappings": typeof ProjectMappingsRouteWithChildren; "/project/masterdata": typeof ProjectMasterdataRoute; "/project/rms": typeof ProjectRmsRouteWithChildren; "/project/stratigraphy": typeof ProjectStratigraphyRoute; @@ -145,12 +168,15 @@ export interface FileRoutesById { "/project/rms/overview": typeof ProjectRmsOverviewRoute; "/project/rms/stratigraphy": typeof ProjectRmsStratigraphyRoute; "/project/rms/wellbores": typeof ProjectRmsWellboresRoute; + "/project/mappings/": typeof ProjectMappingsIndexRoute; + "/project/rms/": typeof ProjectRmsIndexRoute; } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath; fullPaths: | "/" | "/project/history" + | "/project/mappings" | "/project/masterdata" | "/project/rms" | "/project/stratigraphy" @@ -162,13 +188,14 @@ export interface FileRouteTypes { | "/project/mappings/wellbores" | "/project/rms/overview" | "/project/rms/stratigraphy" - | "/project/rms/wellbores"; + | "/project/rms/wellbores" + | "/project/mappings/" + | "/project/rms/"; fileRoutesByTo: FileRoutesByTo; to: | "/" | "/project/history" | "/project/masterdata" - | "/project/rms" | "/project/stratigraphy" | "/user/keys" | "/user/recovery" @@ -178,11 +205,14 @@ export interface FileRouteTypes { | "/project/mappings/wellbores" | "/project/rms/overview" | "/project/rms/stratigraphy" - | "/project/rms/wellbores"; + | "/project/rms/wellbores" + | "/project/mappings" + | "/project/rms"; id: | "__root__" | "/" | "/project/history" + | "/project/mappings" | "/project/masterdata" | "/project/rms" | "/project/stratigraphy" @@ -194,21 +224,21 @@ export interface FileRouteTypes { | "/project/mappings/wellbores" | "/project/rms/overview" | "/project/rms/stratigraphy" - | "/project/rms/wellbores"; + | "/project/rms/wellbores" + | "/project/mappings/" + | "/project/rms/"; fileRoutesById: FileRoutesById; } export interface RootRouteChildren { IndexRoute: typeof IndexRoute; ProjectHistoryRoute: typeof ProjectHistoryRoute; + ProjectMappingsRoute: typeof ProjectMappingsRouteWithChildren; ProjectMasterdataRoute: typeof ProjectMasterdataRoute; ProjectRmsRoute: typeof ProjectRmsRouteWithChildren; ProjectStratigraphyRoute: typeof ProjectStratigraphyRoute; UserKeysRoute: typeof UserKeysRoute; UserRecoveryRoute: typeof UserRecoveryRoute; ProjectIndexRoute: typeof ProjectIndexRoute; - ProjectMappingsOverviewRoute: typeof ProjectMappingsOverviewRoute; - ProjectMappingsStratigraphyRoute: typeof ProjectMappingsStratigraphyRoute; - ProjectMappingsWellboresRoute: typeof ProjectMappingsWellboresRoute; } declare module "@tanstack/react-router" { @@ -262,6 +292,13 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof ProjectMasterdataRouteImport; parentRoute: typeof rootRouteImport; }; + "/project/mappings": { + id: "/project/mappings"; + path: "/project/mappings"; + fullPath: "/project/mappings"; + preLoaderRoute: typeof ProjectMappingsRouteImport; + parentRoute: typeof rootRouteImport; + }; "/project/history": { id: "/project/history"; path: "/project/history"; @@ -269,6 +306,20 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof ProjectHistoryRouteImport; parentRoute: typeof rootRouteImport; }; + "/project/rms/": { + id: "/project/rms/"; + path: "/"; + fullPath: "/project/rms/"; + preLoaderRoute: typeof ProjectRmsIndexRouteImport; + parentRoute: typeof ProjectRmsRoute; + }; + "/project/mappings/": { + id: "/project/mappings/"; + path: "/"; + fullPath: "/project/mappings/"; + preLoaderRoute: typeof ProjectMappingsIndexRouteImport; + parentRoute: typeof ProjectMappingsRoute; + }; "/project/rms/wellbores": { id: "/project/rms/wellbores"; path: "/wellbores"; @@ -292,38 +343,58 @@ declare module "@tanstack/react-router" { }; "/project/mappings/wellbores": { id: "/project/mappings/wellbores"; - path: "/project/mappings/wellbores"; + path: "/wellbores"; fullPath: "/project/mappings/wellbores"; preLoaderRoute: typeof ProjectMappingsWellboresRouteImport; - parentRoute: typeof rootRouteImport; + parentRoute: typeof ProjectMappingsRoute; }; "/project/mappings/stratigraphy": { id: "/project/mappings/stratigraphy"; - path: "/project/mappings/stratigraphy"; + path: "/stratigraphy"; fullPath: "/project/mappings/stratigraphy"; preLoaderRoute: typeof ProjectMappingsStratigraphyRouteImport; - parentRoute: typeof rootRouteImport; + parentRoute: typeof ProjectMappingsRoute; }; "/project/mappings/overview": { id: "/project/mappings/overview"; - path: "/project/mappings/overview"; + path: "/overview"; fullPath: "/project/mappings/overview"; preLoaderRoute: typeof ProjectMappingsOverviewRouteImport; - parentRoute: typeof rootRouteImport; + parentRoute: typeof ProjectMappingsRoute; }; } } +interface ProjectMappingsRouteChildren { + ProjectMappingsOverviewRoute: typeof ProjectMappingsOverviewRoute; + ProjectMappingsStratigraphyRoute: typeof ProjectMappingsStratigraphyRoute; + ProjectMappingsWellboresRoute: typeof ProjectMappingsWellboresRoute; + ProjectMappingsIndexRoute: typeof ProjectMappingsIndexRoute; +} + +const ProjectMappingsRouteChildren: ProjectMappingsRouteChildren = { + ProjectMappingsOverviewRoute: ProjectMappingsOverviewRoute, + ProjectMappingsStratigraphyRoute: ProjectMappingsStratigraphyRoute, + ProjectMappingsWellboresRoute: ProjectMappingsWellboresRoute, + ProjectMappingsIndexRoute: ProjectMappingsIndexRoute, +}; + +const ProjectMappingsRouteWithChildren = ProjectMappingsRoute._addFileChildren( + ProjectMappingsRouteChildren, +); + interface ProjectRmsRouteChildren { ProjectRmsOverviewRoute: typeof ProjectRmsOverviewRoute; ProjectRmsStratigraphyRoute: typeof ProjectRmsStratigraphyRoute; ProjectRmsWellboresRoute: typeof ProjectRmsWellboresRoute; + ProjectRmsIndexRoute: typeof ProjectRmsIndexRoute; } const ProjectRmsRouteChildren: ProjectRmsRouteChildren = { ProjectRmsOverviewRoute: ProjectRmsOverviewRoute, ProjectRmsStratigraphyRoute: ProjectRmsStratigraphyRoute, ProjectRmsWellboresRoute: ProjectRmsWellboresRoute, + ProjectRmsIndexRoute: ProjectRmsIndexRoute, }; const ProjectRmsRouteWithChildren = ProjectRmsRoute._addFileChildren( @@ -333,15 +404,13 @@ const ProjectRmsRouteWithChildren = ProjectRmsRoute._addFileChildren( const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, ProjectHistoryRoute: ProjectHistoryRoute, + ProjectMappingsRoute: ProjectMappingsRouteWithChildren, ProjectMasterdataRoute: ProjectMasterdataRoute, ProjectRmsRoute: ProjectRmsRouteWithChildren, ProjectStratigraphyRoute: ProjectStratigraphyRoute, UserKeysRoute: UserKeysRoute, UserRecoveryRoute: UserRecoveryRoute, ProjectIndexRoute: ProjectIndexRoute, - ProjectMappingsOverviewRoute: ProjectMappingsOverviewRoute, - ProjectMappingsStratigraphyRoute: ProjectMappingsStratigraphyRoute, - ProjectMappingsWellboresRoute: ProjectMappingsWellboresRoute, }; export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/frontend/src/routes/project/mappings.tsx b/frontend/src/routes/project/mappings.tsx new file mode 100644 index 00000000..8d472a40 --- /dev/null +++ b/frontend/src/routes/project/mappings.tsx @@ -0,0 +1,15 @@ +import { createFileRoute, Outlet } from "@tanstack/react-router"; + +import { PageContainerNotWidthConstrained } from "#styles/common"; + +export const Route = createFileRoute("/project/mappings")({ + component: RouteComponent, +}); + +function RouteComponent() { + return ( + + + + ); +} diff --git a/frontend/src/routes/project/mappings/index.tsx b/frontend/src/routes/project/mappings/index.tsx new file mode 100644 index 00000000..ed597d3c --- /dev/null +++ b/frontend/src/routes/project/mappings/index.tsx @@ -0,0 +1,5 @@ +import { createFileRoute, Navigate } from "@tanstack/react-router"; + +export const Route = createFileRoute("/project/mappings/")({ + component: () => , +}); diff --git a/frontend/src/routes/project/mappings/overview.tsx b/frontend/src/routes/project/mappings/overview.tsx index 6afe16d2..a5cb255e 100644 --- a/frontend/src/routes/project/mappings/overview.tsx +++ b/frontend/src/routes/project/mappings/overview.tsx @@ -18,10 +18,10 @@ function RouteComponent() { return ( - Mappings overview + Overview {project.status - ? "No mappings overview content available yet." + ? "Mappings overview is coming soon." : "Project not set."} diff --git a/frontend/src/routes/project/mappings/stratigraphy.tsx b/frontend/src/routes/project/mappings/stratigraphy.tsx index 2d5f37c6..55ffb97a 100644 --- a/frontend/src/routes/project/mappings/stratigraphy.tsx +++ b/frontend/src/routes/project/mappings/stratigraphy.tsx @@ -103,7 +103,7 @@ function RouteComponent() { return ( - Mappings stratigraphy + Stratigraphy }> diff --git a/frontend/src/routes/project/mappings/wellbores.tsx b/frontend/src/routes/project/mappings/wellbores.tsx index 7708d53b..c07502ac 100644 --- a/frontend/src/routes/project/mappings/wellbores.tsx +++ b/frontend/src/routes/project/mappings/wellbores.tsx @@ -18,10 +18,10 @@ function RouteComponent() { return ( - Mappings wellbores + Wellbores {project.status - ? "No wellbore mapping content available yet." + ? "Wellbore mappings are coming soon." : "Project not set."} diff --git a/frontend/src/routes/project/rms.tsx b/frontend/src/routes/project/rms.tsx index 55167e31..e31fb225 100644 --- a/frontend/src/routes/project/rms.tsx +++ b/frontend/src/routes/project/rms.tsx @@ -1,20 +1,15 @@ -import { - createFileRoute, - Navigate, - Outlet, - useLocation, -} from "@tanstack/react-router"; +import { createFileRoute, Outlet } from "@tanstack/react-router"; + +import { PageContainerNotWidthConstrained } from "#styles/common"; export const Route = createFileRoute("/project/rms")({ component: RouteComponent, }); function RouteComponent() { - const location = useLocation(); - - return location.pathname === "/project/rms" ? ( - - ) : ( - + return ( + + + ); } diff --git a/frontend/src/routes/project/rms/index.tsx b/frontend/src/routes/project/rms/index.tsx new file mode 100644 index 00000000..581fadb8 --- /dev/null +++ b/frontend/src/routes/project/rms/index.tsx @@ -0,0 +1,5 @@ +import { createFileRoute, Navigate } from "@tanstack/react-router"; + +export const Route = createFileRoute("/project/rms/")({ + component: () => , +}); diff --git a/frontend/src/routes/project/rms/overview.tsx b/frontend/src/routes/project/rms/overview.tsx index 287d2cf8..1342c64c 100644 --- a/frontend/src/routes/project/rms/overview.tsx +++ b/frontend/src/routes/project/rms/overview.tsx @@ -35,7 +35,7 @@ function RouteComponent() { return ( - RMS overview + Overview }> diff --git a/frontend/src/routes/project/rms/stratigraphy.tsx b/frontend/src/routes/project/rms/stratigraphy.tsx index 9c4c0876..db9660e6 100644 --- a/frontend/src/routes/project/rms/stratigraphy.tsx +++ b/frontend/src/routes/project/rms/stratigraphy.tsx @@ -35,7 +35,7 @@ function RouteComponent() { return ( - RMS stratigraphy + Stratigraphy }> diff --git a/frontend/src/routes/project/rms/wellbores.tsx b/frontend/src/routes/project/rms/wellbores.tsx index 891a39c9..771d24e9 100644 --- a/frontend/src/routes/project/rms/wellbores.tsx +++ b/frontend/src/routes/project/rms/wellbores.tsx @@ -18,10 +18,10 @@ function RouteComponent() { return ( - RMS wellbores + Wellbores {project.status - ? "No wellbore content available yet." + ? "Wellbore content is coming soon." : "Project not set."} diff --git a/frontend/src/services/tasks.ts b/frontend/src/services/tasks.ts index ddd5fdd0..468b82b2 100644 --- a/frontend/src/services/tasks.ts +++ b/frontend/src/services/tasks.ts @@ -51,10 +51,16 @@ export function useTaskList(): Task[] { }, { id: "rms", - label: "Set RMS project and stratigraphy", - done: !!config.rms?.path && (zones.length > 0 || horizons.length > 0), + label: "Set RMS project", + done: !!config.rms?.path, to: "/project/rms/overview", }, + { + id: "rms-stratigraphy", + label: "Set RMS stratigraphy", + done: zones.length > 0 || horizons.length > 0, + to: "/project/rms/stratigraphy", + }, { id: "mappings", label: "Set stratigraphy mappings", From 7f1f051baf23d6852a35d94d358fe8272bf8c377 Mon Sep 17 00:00:00 2001 From: nourinmohd Date: Wed, 8 Jul 2026 20:17:03 +0200 Subject: [PATCH 4/4] Changes after review # 2 --- frontend/src/routeTree.gen.ts | 21 ------------------- frontend/src/routes/project/mappings.tsx | 8 +------ .../src/routes/project/mappings/overview.tsx | 19 +++++++---------- .../src/routes/project/mappings/wellbores.tsx | 19 +++++++---------- frontend/src/routes/project/rms.tsx | 8 +------ frontend/src/routes/project/rms/overview.tsx | 5 ++--- frontend/src/routes/project/rms/wellbores.tsx | 19 +++++++---------- frontend/src/routes/project/stratigraphy.tsx | 5 ----- 8 files changed, 28 insertions(+), 76 deletions(-) delete mode 100644 frontend/src/routes/project/stratigraphy.tsx diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index 69deef3d..feefe0aa 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -13,7 +13,6 @@ import { Route as IndexRouteImport } from "./routes/index"; import { Route as ProjectIndexRouteImport } from "./routes/project/index"; import { Route as UserRecoveryRouteImport } from "./routes/user/recovery"; import { Route as UserKeysRouteImport } from "./routes/user/keys"; -import { Route as ProjectStratigraphyRouteImport } from "./routes/project/stratigraphy"; import { Route as ProjectRmsRouteImport } from "./routes/project/rms"; import { Route as ProjectMasterdataRouteImport } from "./routes/project/masterdata"; import { Route as ProjectMappingsRouteImport } from "./routes/project/mappings"; @@ -47,11 +46,6 @@ const UserKeysRoute = UserKeysRouteImport.update({ path: "/user/keys", getParentRoute: () => rootRouteImport, } as any); -const ProjectStratigraphyRoute = ProjectStratigraphyRouteImport.update({ - id: "/project/stratigraphy", - path: "/project/stratigraphy", - getParentRoute: () => rootRouteImport, -} as any); const ProjectRmsRoute = ProjectRmsRouteImport.update({ id: "/project/rms", path: "/project/rms", @@ -121,7 +115,6 @@ export interface FileRoutesByFullPath { "/project/mappings": typeof ProjectMappingsRouteWithChildren; "/project/masterdata": typeof ProjectMasterdataRoute; "/project/rms": typeof ProjectRmsRouteWithChildren; - "/project/stratigraphy": typeof ProjectStratigraphyRoute; "/user/keys": typeof UserKeysRoute; "/user/recovery": typeof UserRecoveryRoute; "/project/": typeof ProjectIndexRoute; @@ -138,7 +131,6 @@ export interface FileRoutesByTo { "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; "/project/masterdata": typeof ProjectMasterdataRoute; - "/project/stratigraphy": typeof ProjectStratigraphyRoute; "/user/keys": typeof UserKeysRoute; "/user/recovery": typeof UserRecoveryRoute; "/project": typeof ProjectIndexRoute; @@ -158,7 +150,6 @@ export interface FileRoutesById { "/project/mappings": typeof ProjectMappingsRouteWithChildren; "/project/masterdata": typeof ProjectMasterdataRoute; "/project/rms": typeof ProjectRmsRouteWithChildren; - "/project/stratigraphy": typeof ProjectStratigraphyRoute; "/user/keys": typeof UserKeysRoute; "/user/recovery": typeof UserRecoveryRoute; "/project/": typeof ProjectIndexRoute; @@ -179,7 +170,6 @@ export interface FileRouteTypes { | "/project/mappings" | "/project/masterdata" | "/project/rms" - | "/project/stratigraphy" | "/user/keys" | "/user/recovery" | "/project/" @@ -196,7 +186,6 @@ export interface FileRouteTypes { | "/" | "/project/history" | "/project/masterdata" - | "/project/stratigraphy" | "/user/keys" | "/user/recovery" | "/project" @@ -215,7 +204,6 @@ export interface FileRouteTypes { | "/project/mappings" | "/project/masterdata" | "/project/rms" - | "/project/stratigraphy" | "/user/keys" | "/user/recovery" | "/project/" @@ -235,7 +223,6 @@ export interface RootRouteChildren { ProjectMappingsRoute: typeof ProjectMappingsRouteWithChildren; ProjectMasterdataRoute: typeof ProjectMasterdataRoute; ProjectRmsRoute: typeof ProjectRmsRouteWithChildren; - ProjectStratigraphyRoute: typeof ProjectStratigraphyRoute; UserKeysRoute: typeof UserKeysRoute; UserRecoveryRoute: typeof UserRecoveryRoute; ProjectIndexRoute: typeof ProjectIndexRoute; @@ -271,13 +258,6 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof UserKeysRouteImport; parentRoute: typeof rootRouteImport; }; - "/project/stratigraphy": { - id: "/project/stratigraphy"; - path: "/project/stratigraphy"; - fullPath: "/project/stratigraphy"; - preLoaderRoute: typeof ProjectStratigraphyRouteImport; - parentRoute: typeof rootRouteImport; - }; "/project/rms": { id: "/project/rms"; path: "/project/rms"; @@ -407,7 +387,6 @@ const rootRouteChildren: RootRouteChildren = { ProjectMappingsRoute: ProjectMappingsRouteWithChildren, ProjectMasterdataRoute: ProjectMasterdataRoute, ProjectRmsRoute: ProjectRmsRouteWithChildren, - ProjectStratigraphyRoute: ProjectStratigraphyRoute, UserKeysRoute: UserKeysRoute, UserRecoveryRoute: UserRecoveryRoute, ProjectIndexRoute: ProjectIndexRoute, diff --git a/frontend/src/routes/project/mappings.tsx b/frontend/src/routes/project/mappings.tsx index 8d472a40..f6e896e4 100644 --- a/frontend/src/routes/project/mappings.tsx +++ b/frontend/src/routes/project/mappings.tsx @@ -1,15 +1,9 @@ import { createFileRoute, Outlet } from "@tanstack/react-router"; -import { PageContainerNotWidthConstrained } from "#styles/common"; - export const Route = createFileRoute("/project/mappings")({ component: RouteComponent, }); function RouteComponent() { - return ( - - - - ); + return ; } diff --git a/frontend/src/routes/project/mappings/overview.tsx b/frontend/src/routes/project/mappings/overview.tsx index a5cb255e..da908539 100644 --- a/frontend/src/routes/project/mappings/overview.tsx +++ b/frontend/src/routes/project/mappings/overview.tsx @@ -2,7 +2,6 @@ import { createFileRoute } from "@tanstack/react-router"; import { useProject } from "#services/project"; import { - PageContainerNotWidthConstrained, PageHeader, PageSectionWidthConstrained, PageText, @@ -16,15 +15,13 @@ function RouteComponent() { const project = useProject(); return ( - - - Overview - - {project.status - ? "Mappings overview is coming soon." - : "Project not set."} - - - + + Overview + + {project.status + ? "Mappings overview is coming soon." + : "Project not set."} + + ); } diff --git a/frontend/src/routes/project/mappings/wellbores.tsx b/frontend/src/routes/project/mappings/wellbores.tsx index c07502ac..4d42b306 100644 --- a/frontend/src/routes/project/mappings/wellbores.tsx +++ b/frontend/src/routes/project/mappings/wellbores.tsx @@ -2,7 +2,6 @@ import { createFileRoute } from "@tanstack/react-router"; import { useProject } from "#services/project"; import { - PageContainerNotWidthConstrained, PageHeader, PageSectionWidthConstrained, PageText, @@ -16,15 +15,13 @@ function RouteComponent() { const project = useProject(); return ( - - - Wellbores - - {project.status - ? "Wellbore mappings are coming soon." - : "Project not set."} - - - + + Wellbores + + {project.status + ? "Wellbore mappings are coming soon." + : "Project not set."} + + ); } diff --git a/frontend/src/routes/project/rms.tsx b/frontend/src/routes/project/rms.tsx index e31fb225..2101bde8 100644 --- a/frontend/src/routes/project/rms.tsx +++ b/frontend/src/routes/project/rms.tsx @@ -1,15 +1,9 @@ import { createFileRoute, Outlet } from "@tanstack/react-router"; -import { PageContainerNotWidthConstrained } from "#styles/common"; - export const Route = createFileRoute("/project/rms")({ component: RouteComponent, }); function RouteComponent() { - return ( - - - - ); + return ; } diff --git a/frontend/src/routes/project/rms/overview.tsx b/frontend/src/routes/project/rms/overview.tsx index 1342c64c..b39e819c 100644 --- a/frontend/src/routes/project/rms/overview.tsx +++ b/frontend/src/routes/project/rms/overview.tsx @@ -5,7 +5,6 @@ import { Loading } from "#components/common"; import { Overview } from "#components/project/rms/Overview"; import { useProject } from "#services/project"; import { - PageContainerNotWidthConstrained, PageHeader, PageSectionWidthConstrained, PageText, @@ -33,7 +32,7 @@ function Content() { function RouteComponent() { return ( - + <> Overview @@ -41,6 +40,6 @@ function RouteComponent() { }> - + ); } diff --git a/frontend/src/routes/project/rms/wellbores.tsx b/frontend/src/routes/project/rms/wellbores.tsx index 771d24e9..6b9e5552 100644 --- a/frontend/src/routes/project/rms/wellbores.tsx +++ b/frontend/src/routes/project/rms/wellbores.tsx @@ -2,7 +2,6 @@ import { createFileRoute } from "@tanstack/react-router"; import { useProject } from "#services/project"; import { - PageContainerNotWidthConstrained, PageHeader, PageSectionWidthConstrained, PageText, @@ -16,15 +15,13 @@ function RouteComponent() { const project = useProject(); return ( - - - Wellbores - - {project.status - ? "Wellbore content is coming soon." - : "Project not set."} - - - + + Wellbores + + {project.status + ? "Wellbore content is coming soon." + : "Project not set."} + + ); } diff --git a/frontend/src/routes/project/stratigraphy.tsx b/frontend/src/routes/project/stratigraphy.tsx deleted file mode 100644 index 18448f3a..00000000 --- a/frontend/src/routes/project/stratigraphy.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { createFileRoute, Navigate } from "@tanstack/react-router"; - -export const Route = createFileRoute("/project/stratigraphy")({ - component: () => , -});