redirect to server show page if a gateway is not installed on a given server

This commit is contained in:
2025-04-24 19:08:21 +01:00
parent 6296c2d999
commit 46a76f7bce
7 changed files with 62 additions and 14 deletions

View File

@@ -1,19 +1,29 @@
<script setup>
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
import { Deferred, router } from '@inertiajs/vue3';
import { LoaderCircleIcon } from 'lucide-vue-next';
import { ref, watch } from 'vue';
import { Card } from './ui/card';
import { LoaderCircleIcon } from 'lucide-vue-next';
import ServiceCategory from '@/enums/ServiceCategory';
const props = defineProps({
servers: {
type: Array,
required: false,
},
serviceCategory: {
type: String,
required: false,
validate: (value) => {
return Object.keys(ServiceCategory).includes(value);
}
}
});
const isOpen = ref(false);
defineEmits(['select']);
watch(isOpen, () => {
if (isOpen.value && props.servers === undefined) {
router.reload({
@@ -36,28 +46,32 @@ watch(isOpen, () => {
<Deferred data="servers">
<template #fallback>
<div class="flex justify-center py-4">
<LoaderCircleIcon class="text-muted-foreground size-6 animate-spin" />
<LoaderCircleIcon class="size-6 animate-spin text-muted-foreground" />
</div>
</template>
<Card
v-for="(server, serverIndex) in servers"
:key="`serverPicker-${server.id}`"
:data-index="serverIndex"
class="flex gap-4 p-2"
class="group flex gap-4 p-2 justify-between text-muted-foreground hover:text-foreground transition"
:class="{
'rounded-b-none': serverIndex !== servers.length - 1,
'rounded-t-none': serverIndex !== 0,
'border-b-0': serverIndex !== servers.length - 1,
}"
@click="
$emit('select', server);
isOpen = false;
"
>
<div>{{ server.name }}</div>
<div></div>
<div class="cursor-default text-sm">{{ server.name }}</div>
<div v-if="serviceCategory" class="text-xs">{{ !!server.services.filter((s) => s.category === serviceCategory).length ? 'Has Gateway' : 'No Gateway Installed' }}</div>
</Card>
<Card v-if="servers.length === 0" class="p-2 text-sm text-muted-foreground"> No servers available </Card>
</Deferred>
</div>
</DialogHeader>
<DialogFooter> Dismiss </DialogFooter>
<!-- <DialogFooter> Dismiss </DialogFooter> -->
</DialogContent>
</Dialog>
</template>