Skip to content

Commit bae434a

Browse files
feat: add basic project settings layout
1 parent c7c8eab commit bae434a

File tree

5 files changed

+81
-4
lines changed

5 files changed

+81
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<script lang="ts">
2+
import type { Snippet } from "svelte";
3+
import Settings from "lucide-svelte/icons/settings";
4+
import Users from "lucide-svelte/icons/users";
5+
import Snowflake from "lucide-svelte/icons/snowflake";
6+
import ClipboardCheck from "lucide-svelte/icons/clipboard-check";
7+
import { cn } from "$lib/utils/shadcn-helper";
8+
import Separator from "$lib/components/primitives/separator/separator.svelte";
9+
10+
type TabValue = (typeof tabs)[number]["value"];
11+
interface Props {
12+
projectId: number;
13+
selectedTab: TabValue;
14+
children?: Snippet | undefined;
15+
}
16+
17+
let { projectId, selectedTab, children = undefined }: Props = $props();
18+
19+
const tabs = [
20+
{
21+
icon: Settings,
22+
label: "General",
23+
value: "general",
24+
href: `/project/${projectId}/settings/general`,
25+
},
26+
{
27+
icon: Users,
28+
label: "Members",
29+
value: "members",
30+
href: `/project/${projectId}/settings/members`,
31+
},
32+
{ icon: Snowflake, label: "SLR", value: "slr", href: `/project/${projectId}/settings/slr` },
33+
{
34+
icon: ClipboardCheck,
35+
label: "Review",
36+
value: "review",
37+
href: `/project/${projectId}/settings/review`,
38+
},
39+
] as const;
40+
</script>
41+
42+
<main class="flex flex-row w-full h-full px-[3.75rem] py-2.5 gap-4 overflow-hidden">
43+
<div class="flex flex-col w-full min-w-[9rem] max-w-[20%] h-full px-1.5 py-2.5 gap-2.5">
44+
{#each tabs as tab}
45+
<a
46+
class={cn(
47+
"flex flex-row w-full items-center h-12 px-3 gap-3",
48+
tab.value === selectedTab ? "bg-slate-200 rounded-lg" : "",
49+
)}
50+
href={tab.href}
51+
>
52+
<tab.icon class="size-4" />
53+
<span>{tab.label}</span>
54+
</a>
55+
{/each}
56+
</div>
57+
<Separator orientation="vertical" />
58+
<div class="flex flex-col w-full h-full p-2.5 gap-3 overflow-y-auto">
59+
{@render children?.()}
60+
</div>
61+
</main>

src/routes/project/[projectId]/settings/general/+page.svelte

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
2+
import ProjectSettingsLayout from "$lib/components/composites/project-components/settings/ProjectSettingsLayout.svelte";
3+
24
let { data } = $props();
3-
const { loadingProject } = data;
5+
const { projectId, loadingProject } = data;
46
</script>
57

68
<svelte:head>
@@ -12,3 +14,5 @@
1214
<title>General | Settings</title>
1315
{/await}
1416
</svelte:head>
17+
18+
<ProjectSettingsLayout {projectId} selectedTab="general">General content</ProjectSettingsLayout>

src/routes/project/[projectId]/settings/members/+page.svelte

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
2+
import ProjectSettingsLayout from "$lib/components/composites/project-components/settings/ProjectSettingsLayout.svelte";
3+
24
let { data } = $props();
3-
const { loadingProject } = data;
5+
const { projectId, loadingProject } = data;
46
</script>
57

68
<svelte:head>
@@ -12,3 +14,5 @@
1214
<title>Members | Settings</title>
1315
{/await}
1416
</svelte:head>
17+
18+
<ProjectSettingsLayout {projectId} selectedTab="members">Members content</ProjectSettingsLayout>

src/routes/project/[projectId]/settings/review/+page.svelte

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
2+
import ProjectSettingsLayout from "$lib/components/composites/project-components/settings/ProjectSettingsLayout.svelte";
3+
24
let { data } = $props();
3-
const { loadingProject } = data;
5+
const { projectId, loadingProject } = data;
46
</script>
57

68
<svelte:head>
@@ -12,3 +14,5 @@
1214
<title>Review | Settings</title>
1315
{/await}
1416
</svelte:head>
17+
18+
<ProjectSettingsLayout {projectId} selectedTab="review">Review content</ProjectSettingsLayout>

src/routes/project/[projectId]/settings/slr/+page.svelte

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
2+
import ProjectSettingsLayout from "$lib/components/composites/project-components/settings/ProjectSettingsLayout.svelte";
3+
24
let { data } = $props();
3-
const { loadingProject } = data;
5+
const { projectId, loadingProject } = data;
46
</script>
57

68
<svelte:head>
@@ -12,3 +14,5 @@
1214
<title>SLR | Settings</title>
1315
{/await}
1416
</svelte:head>
17+
18+
<ProjectSettingsLayout {projectId} selectedTab="slr">SLR content</ProjectSettingsLayout>

0 commit comments

Comments
 (0)