{
[styles.item]: true,
[styles.itemDanger]: item.tone === "danger",
}}
- data-slot="profile-action"
- data-action-id={item.id}
- data-tone={item.tone ?? "default"}
- onClick={props.onSelect}
- >
+ data-slot="profile-action"
+ data-action-id={item.id}
+ data-tone={item.tone ?? "default"}
+ onClick={() => handleSelect(item.id)}
+ >
diff --git a/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.parts.tsx b/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.parts.tsx
index 15b4e2d..9309709 100644
--- a/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.parts.tsx
+++ b/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.parts.tsx
@@ -1,8 +1,10 @@
// Path: Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.parts.tsx
+import { useLocation, useNavigate } from "@solidjs/router";
import { For, Show, type JSX } from "solid-js";
import { ChevronRight } from "../../../lib/icons";
import { createLongPressGesture } from "../../../helper/createLongPressGesture";
+import { getWorkspaceSurfaceRoute } from "../../app-shell/data/workspace-routes";
import {
createWorkspaceStaticTarget,
createWorkspaceTreeTarget,
@@ -72,8 +74,12 @@ export const StaticRow = (props: { item: SidebarItem }): JSX.Element => {
export const WorkspaceStaticRow = (props: {
item: WorkspaceStaticItem;
onOpenActionSheet: (target: WorkspaceContextMenuTarget) => void;
+ onSelect: VoidFunction;
}): JSX.Element => {
+ const navigate = useNavigate();
+ const location = useLocation();
const target = createWorkspaceStaticTarget(props.item);
+ const isActive = (): boolean => location.pathname === getWorkspaceSurfaceRoute(props.item.contextKind);
const longPress = createLongPressGesture({
onLongPress: () => {
props.onOpenActionSheet(target);
@@ -84,16 +90,20 @@ export const WorkspaceStaticRow = (props: {
{
- event.preventDefault();
- props.onOpenActionSheet(target);
- }}
- {...longPress}
- >
-
-
- );
+ data-target-kind={target.kind}
+ onContextMenu={(event): void => {
+ event.preventDefault();
+ props.onOpenActionSheet(target);
+ }}
+ onClick={(): void => {
+ navigate(getWorkspaceSurfaceRoute(props.item.contextKind));
+ props.onSelect();
+ }}
+ {...longPress}
+ >
+
+
+ );
};
export const WorkspaceTreeBranch = (props: {
diff --git a/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.tsx b/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.tsx
index 780fc50..c2fa8f0 100644
--- a/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.tsx
+++ b/Frontend/src/components/workspace-navigation/MobileWorkspaceBrowser/MobileWorkspaceBrowser.tsx
@@ -72,12 +72,14 @@ export const MobileWorkspaceBrowser = (props: MobileWorkspaceBrowserProps): JSX.
Workspace
-
-
- {(item): JSX.Element => }
-
-
-
+
+
+ {(item): JSX.Element => (
+
+ )}
+
+
+
Items
diff --git a/Frontend/src/components/workspace-navigation/WorkspaceSidebar/WorkspaceSidebar.parts.tsx b/Frontend/src/components/workspace-navigation/WorkspaceSidebar/WorkspaceSidebar.parts.tsx
index 461763e..db701ae 100644
--- a/Frontend/src/components/workspace-navigation/WorkspaceSidebar/WorkspaceSidebar.parts.tsx
+++ b/Frontend/src/components/workspace-navigation/WorkspaceSidebar/WorkspaceSidebar.parts.tsx
@@ -1,7 +1,9 @@
// Path: Frontend/src/components/workspace-navigation/WorkspaceSidebar/WorkspaceSidebar.parts.tsx
+import { useLocation, useNavigate } from "@solidjs/router";
import { For, Show, type JSX } from "solid-js";
import { ChevronRight, Folder } from "../../../lib/icons";
+import { getWorkspaceSurfaceRoute } from "../../app-shell/data/workspace-routes";
import {
createWorkspaceStaticTarget,
createWorkspaceTreeTarget,
@@ -66,8 +68,11 @@ export const WorkspaceHomeEntry = (props: {
onOpenContextMenu: (event: MouseEvent, target: WorkspaceContextMenuTarget) => void;
onOpenContextMenuFromKeyboard: (element: HTMLElement, target: WorkspaceContextMenuTarget) => void;
}): JSX.Element => {
+ const navigate = useNavigate();
+ const location = useLocation();
const Icon = props.item.icon;
const target = createWorkspaceStaticTarget(props.item);
+ const isActive = (): boolean => location.pathname === getWorkspaceSurfaceRoute(props.item.contextKind);
return (
@@ -75,14 +80,17 @@ export const WorkspaceHomeEntry = (props: {
type="button"
classList={{
[styles.navItem]: true,
- [styles.navItemActive]: !!props.item.active,
+ [styles.navItemActive]: isActive(),
}}
- aria-current={props.item.active ? "page" : undefined}
+ aria-current={isActive() ? "page" : undefined}
aria-label={props.item.label}
title={props.item.label}
data-slot="workspace-static-item"
data-target-kind={target.kind}
- data-active={props.item.active ? "true" : "false"}
+ data-active={isActive() ? "true" : "false"}
+ onClick={(): void => {
+ navigate(getWorkspaceSurfaceRoute(props.item.contextKind));
+ }}
onContextMenu={(event): void => {
event.stopPropagation();
props.onOpenContextMenu(event, target);
diff --git a/Frontend/src/routes/index.tsx b/Frontend/src/routes/index.tsx
new file mode 100644
index 0000000..f505f9e
--- /dev/null
+++ b/Frontend/src/routes/index.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/index.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const IndexRoute = (): JSX.Element => {
+ return ;
+};
+
+export default IndexRoute;
diff --git a/Frontend/src/routes/settings.tsx b/Frontend/src/routes/settings.tsx
new file mode 100644
index 0000000..c1c36ed
--- /dev/null
+++ b/Frontend/src/routes/settings.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/settings.tsx
+
+import type { RouteSectionProps } from "@solidjs/router";
+import { AppShell } from "../components/app-shell/AppShell/AppShell";
+
+const SettingsLayoutRoute = (props: RouteSectionProps) => {
+ return {props.children};
+};
+
+export default SettingsLayoutRoute;
diff --git a/Frontend/src/routes/settings/account.tsx b/Frontend/src/routes/settings/account.tsx
new file mode 100644
index 0000000..f560830
--- /dev/null
+++ b/Frontend/src/routes/settings/account.tsx
@@ -0,0 +1,16 @@
+// Path: Frontend/src/routes/settings/account.tsx
+
+import { type JSX } from "solid-js";
+import { SettingsDetailPage } from "../../components/settings/SettingsDetailPage/SettingsDetailPage";
+
+const SettingsAccountRoute = (): JSX.Element => {
+ return (
+
+ );
+};
+
+export default SettingsAccountRoute;
diff --git a/Frontend/src/routes/settings/index.tsx b/Frontend/src/routes/settings/index.tsx
new file mode 100644
index 0000000..a8a8b20
--- /dev/null
+++ b/Frontend/src/routes/settings/index.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/settings/index.tsx
+
+import { type JSX } from "solid-js";
+import { SettingsWorkspace } from "../../components/settings/SettingsWorkspace/SettingsWorkspace";
+
+const SettingsIndexRoute = (): JSX.Element => {
+ return ;
+};
+
+export default SettingsIndexRoute;
diff --git a/Frontend/src/routes/settings/members.tsx b/Frontend/src/routes/settings/members.tsx
new file mode 100644
index 0000000..01d048e
--- /dev/null
+++ b/Frontend/src/routes/settings/members.tsx
@@ -0,0 +1,16 @@
+// Path: Frontend/src/routes/settings/members.tsx
+
+import { type JSX } from "solid-js";
+import { SettingsDetailPage } from "../../components/settings/SettingsDetailPage/SettingsDetailPage";
+
+const SettingsMembersRoute = (): JSX.Element => {
+ return (
+
+ );
+};
+
+export default SettingsMembersRoute;
diff --git a/Frontend/src/routes/settings/security.tsx b/Frontend/src/routes/settings/security.tsx
new file mode 100644
index 0000000..8083ca9
--- /dev/null
+++ b/Frontend/src/routes/settings/security.tsx
@@ -0,0 +1,16 @@
+// Path: Frontend/src/routes/settings/security.tsx
+
+import { type JSX } from "solid-js";
+import { SettingsDetailPage } from "../../components/settings/SettingsDetailPage/SettingsDetailPage";
+
+const SettingsSecurityRoute = (): JSX.Element => {
+ return (
+
+ );
+};
+
+export default SettingsSecurityRoute;
diff --git a/Frontend/src/routes/settings/server.tsx b/Frontend/src/routes/settings/server.tsx
new file mode 100644
index 0000000..4d7d846
--- /dev/null
+++ b/Frontend/src/routes/settings/server.tsx
@@ -0,0 +1,16 @@
+// Path: Frontend/src/routes/settings/server.tsx
+
+import { type JSX } from "solid-js";
+import { SettingsDetailPage } from "../../components/settings/SettingsDetailPage/SettingsDetailPage";
+
+const SettingsServerRoute = (): JSX.Element => {
+ return (
+
+ );
+};
+
+export default SettingsServerRoute;
diff --git a/Frontend/src/routes/settings/theme.tsx b/Frontend/src/routes/settings/theme.tsx
new file mode 100644
index 0000000..7500612
--- /dev/null
+++ b/Frontend/src/routes/settings/theme.tsx
@@ -0,0 +1,16 @@
+// Path: Frontend/src/routes/settings/theme.tsx
+
+import { type JSX } from "solid-js";
+import { SettingsDetailPage } from "../../components/settings/SettingsDetailPage/SettingsDetailPage";
+
+const SettingsThemeRoute = (): JSX.Element => {
+ return (
+
+ );
+};
+
+export default SettingsThemeRoute;
diff --git a/Frontend/src/routes/settings/workspace.tsx b/Frontend/src/routes/settings/workspace.tsx
new file mode 100644
index 0000000..d9b9f7b
--- /dev/null
+++ b/Frontend/src/routes/settings/workspace.tsx
@@ -0,0 +1,16 @@
+// Path: Frontend/src/routes/settings/workspace.tsx
+
+import { type JSX } from "solid-js";
+import { SettingsDetailPage } from "../../components/settings/SettingsDetailPage/SettingsDetailPage";
+
+const SettingsWorkspaceRoute = (): JSX.Element => {
+ return (
+
+ );
+};
+
+export default SettingsWorkspaceRoute;
diff --git a/Frontend/src/routes/workspace.tsx b/Frontend/src/routes/workspace.tsx
new file mode 100644
index 0000000..35e5a01
--- /dev/null
+++ b/Frontend/src/routes/workspace.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace.tsx
+
+import type { RouteSectionProps } from "@solidjs/router";
+import { AppShell } from "../components/app-shell/AppShell/AppShell";
+
+const WorkspaceLayout = (props: RouteSectionProps) => {
+ return {props.children};
+};
+
+export default WorkspaceLayout;
diff --git a/Frontend/src/routes/workspace/home.tsx b/Frontend/src/routes/workspace/home.tsx
new file mode 100644
index 0000000..209d315
--- /dev/null
+++ b/Frontend/src/routes/workspace/home.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/home.tsx
+
+import { type JSX } from "solid-js";
+import { WorkspaceHome } from "../../components/workspace-home/WorkspaceHome";
+
+const WorkspaceHomeRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceHomeRoute;
diff --git a/Frontend/src/routes/workspace/index.tsx b/Frontend/src/routes/workspace/index.tsx
new file mode 100644
index 0000000..407b31c
--- /dev/null
+++ b/Frontend/src/routes/workspace/index.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/index.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceIndexRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceIndexRoute;
diff --git a/Frontend/src/routes/workspace/settings.tsx b/Frontend/src/routes/workspace/settings.tsx
new file mode 100644
index 0000000..370d1a2
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings.tsx
@@ -0,0 +1,9 @@
+// Path: Frontend/src/routes/workspace/settings.tsx
+
+import type { RouteSectionProps } from "@solidjs/router";
+
+const WorkspaceSettingsLayoutRoute = (props: RouteSectionProps) => {
+ return props.children;
+};
+
+export default WorkspaceSettingsLayoutRoute;
diff --git a/Frontend/src/routes/workspace/settings/account.tsx b/Frontend/src/routes/workspace/settings/account.tsx
new file mode 100644
index 0000000..dfc0f65
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings/account.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/settings/account.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceSettingsAccountRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceSettingsAccountRoute;
diff --git a/Frontend/src/routes/workspace/settings/index.tsx b/Frontend/src/routes/workspace/settings/index.tsx
new file mode 100644
index 0000000..9e1dc07
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings/index.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/settings/index.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceSettingsIndexRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceSettingsIndexRoute;
diff --git a/Frontend/src/routes/workspace/settings/members.tsx b/Frontend/src/routes/workspace/settings/members.tsx
new file mode 100644
index 0000000..422a7b9
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings/members.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/settings/members.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceSettingsMembersRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceSettingsMembersRoute;
diff --git a/Frontend/src/routes/workspace/settings/security.tsx b/Frontend/src/routes/workspace/settings/security.tsx
new file mode 100644
index 0000000..20fdb43
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings/security.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/settings/security.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceSettingsSecurityRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceSettingsSecurityRoute;
diff --git a/Frontend/src/routes/workspace/settings/server.tsx b/Frontend/src/routes/workspace/settings/server.tsx
new file mode 100644
index 0000000..fd7bfbc
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings/server.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/settings/server.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceSettingsServerRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceSettingsServerRoute;
diff --git a/Frontend/src/routes/workspace/settings/theme.tsx b/Frontend/src/routes/workspace/settings/theme.tsx
new file mode 100644
index 0000000..d998cef
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings/theme.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/settings/theme.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceSettingsThemeRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceSettingsThemeRoute;
diff --git a/Frontend/src/routes/workspace/settings/workspace.tsx b/Frontend/src/routes/workspace/settings/workspace.tsx
new file mode 100644
index 0000000..230d5c0
--- /dev/null
+++ b/Frontend/src/routes/workspace/settings/workspace.tsx
@@ -0,0 +1,10 @@
+// Path: Frontend/src/routes/workspace/settings/workspace.tsx
+
+import { Navigate } from "@solidjs/router";
+import { type JSX } from "solid-js";
+
+const WorkspaceSettingsWorkspaceRoute = (): JSX.Element => {
+ return ;
+};
+
+export default WorkspaceSettingsWorkspaceRoute;