add / edit / delete user warrens

This commit is contained in:
2025-07-21 19:27:41 +02:00
parent 50e066f794
commit 2c26002507
86 changed files with 2197 additions and 300 deletions

View File

@@ -1,7 +1,7 @@
<script setup lang="ts">
definePageMeta({
layout: 'admin',
middleware: ['is-admin'],
middleware: ['authenticated', 'is-admin'],
});
const session = useAuthSession();
@@ -12,13 +12,8 @@ const adminStore = useAdminStore();
<div class="grid gap-4 lg:grid-cols-2">
<Card class="overflow-hidden">
<CardHeader>
<CardTitle
><NuxtLink to="/admin/users">Users</NuxtLink></CardTitle
>
<CardDescription
>Add users or modify existing users' permissions or
warrens</CardDescription
>
<CardTitle>Users</CardTitle>
<CardDescription>Create or manage users</CardDescription>
</CardHeader>
<CardContent class="max-h-64 overflow-hidden">
<ScrollArea class="h-full w-full overflow-hidden">
@@ -34,8 +29,7 @@ const adminStore = useAdminStore();
variant="outline"
size="icon"
@click="
() =>
adminStore.openEditUserDialog(user)
() => adminStore.setEditUserDialog(user)
"
>
<Icon name="lucide:pencil" />
@@ -67,5 +61,44 @@ const adminStore = useAdminStore();
</div>
</CardFooter>
</Card>
<Card class="overflow-hidden">
<CardHeader>
<CardTitle>Warrens</CardTitle>
<CardDescription>Create or manage warrens</CardDescription>
</CardHeader>
<CardContent class="max-h-64 grow overflow-hidden">
<ScrollArea class="h-full w-full overflow-hidden">
<div class="flex w-full flex-col gap-2 overflow-hidden">
<AdminWarrenListing
v-for="warren in adminStore.resources.warrens"
:key="warren.id"
:warren
>
<template #actions>
<Button
class="m-1"
variant="outline"
size="icon"
><Icon name="lucide:pencil"
/></Button>
<Button
class="m-1"
variant="destructive"
size="icon"
><Icon name="lucide:trash-2"
/></Button>
</template>
</AdminWarrenListing>
</div>
</ScrollArea>
</CardContent>
<CardFooter>
<div class="mt-4 flex grow flex-row justify-end">
<Button @click="adminStore.openCreateUserDialog"
>Create</Button
>
</div>
</CardFooter>
</Card>
</div>
</template>

View File

@@ -1,10 +0,0 @@
<script setup lang="ts">
definePageMeta({
layout: 'admin',
middleware: ['is-admin'],
});
</script>
<template>
<p>/admin/stats</p>
</template>

View File

@@ -1,22 +0,0 @@
<script setup lang="ts">
definePageMeta({
layout: 'admin',
middleware: ['is-admin'],
});
const adminStore = useAdminStore();
</script>
<template>
<div class="flex h-full w-full">
<ScrollArea class="h-full grow">
<div class="flex w-full flex-col gap-2">
<AdminUserListing
v-for="user in adminStore.resources.users"
:key="user.id"
:user
/>
</div>
</ScrollArea>
</div>
</template>

View File

@@ -1,10 +0,0 @@
<script setup lang="ts">
definePageMeta({
layout: 'admin',
middleware: ['is-admin'],
});
</script>
<template>
<p>/admin/warrens</p>
</template>

View File

@@ -46,7 +46,7 @@ const onSubmit = form.handleSubmit(async (values) => {
</script>
<template>
<Card class="w-full max-w-sm">
<Card class="w-full max-w-sm border-0 md:border">
<CardHeader>
<CardTitle class="text-2xl">Login</CardTitle>
<CardDescription>

View File

@@ -45,7 +45,7 @@ const onSubmit = form.handleSubmit(async (values) => {
</script>
<template>
<Card class="w-full max-w-sm">
<Card class="w-full max-w-sm border-0 md:border">
<CardHeader>
<CardTitle class="text-2xl">Register</CardTitle>
<CardDescription>Create a new user account</CardDescription>

View File

@@ -1,6 +1,6 @@
<script setup lang="ts">
import { ScrollArea } from '@/components/ui/scroll-area';
import type { Warren } from '#shared/types/warrens';
import type { WarrenData } from '#shared/types/warrens';
definePageMeta({
middleware: ['authenticated'],
@@ -8,7 +8,7 @@ definePageMeta({
const store = useWarrenStore();
function selectWarren(warren: Warren) {
function selectWarren(warren: WarrenData) {
store.setCurrentWarren(warren.id, '/');
navigateTo({
path: '/warrens/files',