diff --git a/frontend/src/components/Sidebar.style.ts b/frontend/src/components/Sidebar.style.ts new file mode 100644 index 00000000..2af9dfa8 --- /dev/null +++ b/frontend/src/components/Sidebar.style.ts @@ -0,0 +1,18 @@ +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; + } + + [role="region"] { + 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 e260a609..f37ff872 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -1,14 +1,63 @@ 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 { NestedAccordion } from "./Sidebar.style"; -type AccordianSubItem = { +// EDS requires an icon for accordion headers; a blank icon keeps nested labels aligned. +const blankIcon: IconData = { + name: "blank", + prefix: "eds", + height: "24", + width: "24", + svgPathData: "", +}; + +type AccordionSubItem = { label: string; to: string; + children?: AccordionSubItem[]; }; +function SidebarItem({ + item, + currentPath, +}: { + item: AccordionSubItem; + currentPath: string; +}) { + if (item.children) { + return ( + + + {item.children.map((child) => ( + + ))} + + + ); + } + + return ( + + ); +} + export function Sidebar() { const project = useProject(); const location = useLocation(); @@ -18,12 +67,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 +114,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/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 c3a9d025..feefe0aa 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -13,10 +13,18 @@ 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"; 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"; +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: "/", @@ -38,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", @@ -53,82 +56,173 @@ 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", + 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: "/wellbores", + path: "/wellbores", + getParentRoute: () => ProjectMappingsRoute, + } as any); +const ProjectMappingsStratigraphyRoute = + ProjectMappingsStratigraphyRouteImport.update({ + id: "/stratigraphy", + path: "/stratigraphy", + getParentRoute: () => ProjectMappingsRoute, + } as any); +const ProjectMappingsOverviewRoute = ProjectMappingsOverviewRouteImport.update({ + 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 ProjectRmsRoute; - "/project/stratigraphy": typeof ProjectStratigraphyRoute; + "/project/rms": typeof ProjectRmsRouteWithChildren; "/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; + "/project/mappings/": typeof ProjectMappingsIndexRoute; + "/project/rms/": typeof ProjectRmsIndexRoute; } export interface FileRoutesByTo { "/": typeof IndexRoute; "/project/history": typeof ProjectHistoryRoute; "/project/masterdata": typeof ProjectMasterdataRoute; - "/project/rms": typeof ProjectRmsRoute; - "/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; + "/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 ProjectRmsRoute; - "/project/stratigraphy": typeof ProjectStratigraphyRoute; + "/project/rms": typeof ProjectRmsRouteWithChildren; "/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; + "/project/mappings/": typeof ProjectMappingsIndexRoute; + "/project/rms/": typeof ProjectRmsIndexRoute; } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath; fullPaths: | "/" | "/project/history" + | "/project/mappings" | "/project/masterdata" | "/project/rms" - | "/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" + | "/project/mappings/" + | "/project/rms/"; fileRoutesByTo: FileRoutesByTo; to: | "/" | "/project/history" | "/project/masterdata" - | "/project/rms" - | "/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" + | "/project/mappings" + | "/project/rms"; id: | "__root__" | "/" | "/project/history" + | "/project/mappings" | "/project/masterdata" | "/project/rms" - | "/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" + | "/project/mappings/" + | "/project/rms/"; fileRoutesById: FileRoutesById; } export interface RootRouteChildren { IndexRoute: typeof IndexRoute; ProjectHistoryRoute: typeof ProjectHistoryRoute; + ProjectMappingsRoute: typeof ProjectMappingsRouteWithChildren; ProjectMasterdataRoute: typeof ProjectMasterdataRoute; - ProjectRmsRoute: typeof ProjectRmsRoute; - ProjectStratigraphyRoute: typeof ProjectStratigraphyRoute; + ProjectRmsRoute: typeof ProjectRmsRouteWithChildren; UserKeysRoute: typeof UserKeysRoute; UserRecoveryRoute: typeof UserRecoveryRoute; ProjectIndexRoute: typeof ProjectIndexRoute; @@ -164,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"; @@ -185,6 +272,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"; @@ -192,15 +286,107 @@ 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"; + 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: "/wellbores"; + fullPath: "/project/mappings/wellbores"; + preLoaderRoute: typeof ProjectMappingsWellboresRouteImport; + parentRoute: typeof ProjectMappingsRoute; + }; + "/project/mappings/stratigraphy": { + id: "/project/mappings/stratigraphy"; + path: "/stratigraphy"; + fullPath: "/project/mappings/stratigraphy"; + preLoaderRoute: typeof ProjectMappingsStratigraphyRouteImport; + parentRoute: typeof ProjectMappingsRoute; + }; + "/project/mappings/overview": { + id: "/project/mappings/overview"; + path: "/overview"; + fullPath: "/project/mappings/overview"; + preLoaderRoute: typeof ProjectMappingsOverviewRouteImport; + 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( + ProjectRmsRouteChildren, +); + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, ProjectHistoryRoute: ProjectHistoryRoute, + ProjectMappingsRoute: ProjectMappingsRouteWithChildren, ProjectMasterdataRoute: ProjectMasterdataRoute, - ProjectRmsRoute: ProjectRmsRoute, - ProjectStratigraphyRoute: ProjectStratigraphyRoute, + ProjectRmsRoute: ProjectRmsRouteWithChildren, UserKeysRoute: UserKeysRoute, UserRecoveryRoute: UserRecoveryRoute, ProjectIndexRoute: ProjectIndexRoute, diff --git a/frontend/src/routes/project/mappings.tsx b/frontend/src/routes/project/mappings.tsx new file mode 100644 index 00000000..f6e896e4 --- /dev/null +++ b/frontend/src/routes/project/mappings.tsx @@ -0,0 +1,9 @@ +import { createFileRoute, Outlet } from "@tanstack/react-router"; + +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 new file mode 100644 index 00000000..da908539 --- /dev/null +++ b/frontend/src/routes/project/mappings/overview.tsx @@ -0,0 +1,27 @@ +import { createFileRoute } from "@tanstack/react-router"; + +import { useProject } from "#services/project"; +import { + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/mappings/overview")({ + component: RouteComponent, +}); + +function RouteComponent() { + const project = useProject(); + + return ( + + Overview + + {project.status + ? "Mappings overview is coming soon." + : "Project not set."} + + + ); +} diff --git a/frontend/src/routes/project/stratigraphy.tsx b/frontend/src/routes/project/mappings/stratigraphy.tsx similarity index 97% rename from frontend/src/routes/project/stratigraphy.tsx rename to frontend/src/routes/project/mappings/stratigraphy.tsx index bb013d93..55ffb97a 100644 --- a/frontend/src/routes/project/stratigraphy.tsx +++ b/frontend/src/routes/project/mappings/stratigraphy.tsx @@ -18,7 +18,7 @@ import { setStorageItem, } from "#utils/storage"; -export const Route = createFileRoute("/project/stratigraphy")({ +export const Route = createFileRoute("/project/mappings/stratigraphy")({ component: RouteComponent, }); diff --git a/frontend/src/routes/project/mappings/wellbores.tsx b/frontend/src/routes/project/mappings/wellbores.tsx new file mode 100644 index 00000000..4d42b306 --- /dev/null +++ b/frontend/src/routes/project/mappings/wellbores.tsx @@ -0,0 +1,27 @@ +import { createFileRoute } from "@tanstack/react-router"; + +import { useProject } from "#services/project"; +import { + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/mappings/wellbores")({ + component: RouteComponent, +}); + +function RouteComponent() { + const project = useProject(); + + return ( + + 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 1aa44ae6..2101bde8 100644 --- a/frontend/src/routes/project/rms.tsx +++ b/frontend/src/routes/project/rms.tsx @@ -1,46 +1,9 @@ -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"; +import { createFileRoute, Outlet } 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 - - - }> - - - - ); + 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 new file mode 100644 index 00000000..b39e819c --- /dev/null +++ b/frontend/src/routes/project/rms/overview.tsx @@ -0,0 +1,45 @@ +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 { + 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 ( + <> + + 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..db9660e6 --- /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 ( + + + 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..6b9e5552 --- /dev/null +++ b/frontend/src/routes/project/rms/wellbores.tsx @@ -0,0 +1,27 @@ +import { createFileRoute } from "@tanstack/react-router"; + +import { useProject } from "#services/project"; +import { + PageHeader, + PageSectionWidthConstrained, + PageText, +} from "#styles/common"; + +export const Route = createFileRoute("/project/rms/wellbores")({ + component: RouteComponent, +}); + +function RouteComponent() { + const project = useProject(); + + return ( + + Wellbores + + {project.status + ? "Wellbore content is coming soon." + : "Project not set."} + + + ); +} diff --git a/frontend/src/services/tasks.ts b/frontend/src/services/tasks.ts index c571c8ca..468b82b2 100644 --- a/frontend/src/services/tasks.ts +++ b/frontend/src/services/tasks.ts @@ -51,9 +51,15 @@ 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", + 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", @@ -61,7 +67,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", }, ]; }