mirror of
https://github.com/amir20/dozzle.git
synced 2025-12-21 13:23:07 +01:00
* feat: moves to tailwindcss and better component library * update styles * creates toggle component * adds drop down component * cleans up components * removes unused components * uses tailwind for scroll view * removes table component * improves animation * cleans up more styles * uses more tailwind * cleans up more styles with flex * more styles * removes bulma * adds colors * updates modules * fixes bugs * stops importing styles.scss * more clean up * cleans up headers * cleans up title * fixes title * fixes mobile-hidden * fixes shadow * fixes colors * add tailwindcss/nesting * adds more colors * fixes more colors * updates colors * fixes colors * colors * fixes menu on left * menu and modal * menu and modal * fuzzy search * fixes menu on left * remove logs * cleans up search * adds host to search * remove outline from inputs * cleans up left search icon * removes unused styles * fixes docker * removes sass! * cleans up styles * Fixe smobile menu * fixes mobile menu * fixes typecheck * fixes seconday color * adds drop down for container * cleans header css * updates css * fixes other layouts * updates some tests * fixes border * fixes home screen font * fixes top header * fixes tests * fixes fieldlist * fixes complex * cleans up more * removes index * fixes tests * fixes tests * resolves conflicts
108 lines
3.0 KiB
Vue
108 lines
3.0 KiB
Vue
<template>
|
|
<nav class="fixed top-0 z-10 w-full border-b border-base-content/20 bg-base p-2" data-testid="navigation">
|
|
<div class="flex items-center">
|
|
<router-link :to="{ name: 'index' }">
|
|
<svg class="h-14 w-28 fill-secondary">
|
|
<use href="#logo"></use>
|
|
</svg>
|
|
</router-link>
|
|
|
|
<div class="ml-auto flex items-center gap-2">
|
|
<a class="btn btn-circle flex" @click="$emit('search')" :title="$t('tooltip.search')">
|
|
<mdi:light-magnify class="h-5 w-5" />
|
|
</a>
|
|
<label class="btn btn-circle swap swap-rotate" data-testid="hamburger">
|
|
<input type="checkbox" v-model="show" />
|
|
<mdi:close class="swap-on" />
|
|
<mdi:hamburger-menu class="swap-off" />
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<transition name="fade">
|
|
<div v-show="show">
|
|
<div class="mt-4 flex items-center justify-center gap-2">
|
|
<dropdown
|
|
v-model="sessionHost"
|
|
:options="hosts"
|
|
defaultLabel="Hosts"
|
|
class="btn-sm"
|
|
v-if="config.hosts.length > 1"
|
|
/>
|
|
<router-link :to="{ name: 'settings' }" class="btn btn-outline btn-sm">
|
|
<mdi:light-cog /> {{ $t("button.settings") }}
|
|
</router-link>
|
|
<a class="btn btn-outline btn-sm" :href="`${base}/logout`" :title="$t('button.logout')" v-if="secured">
|
|
<mdi:light-logout /> {{ $t("button.logout") }}
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="menu">
|
|
<li class="menu-title">{{ $t("label.containers") }}</li>
|
|
<li v-for="item in sortedContainers" :key="item.id">
|
|
<router-link
|
|
:to="{ name: 'container-id', params: { id: item.id } }"
|
|
active-class="active-primary"
|
|
class="truncate"
|
|
:title="item.name"
|
|
>
|
|
{{ item.name }}
|
|
</router-link>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</transition>
|
|
</nav>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
const { base, secured } = config;
|
|
import { sessionHost } from "@/composables/storage";
|
|
const store = useContainerStore();
|
|
const route = useRoute();
|
|
const { visibleContainers } = storeToRefs(store);
|
|
|
|
const show = ref(false);
|
|
|
|
watch(route, () => {
|
|
show.value = false;
|
|
});
|
|
|
|
const sortedContainers = computed(() =>
|
|
visibleContainers.value
|
|
.filter((c) => c.host === sessionHost.value)
|
|
.sort((a, b) => {
|
|
if (a.state === "running" && b.state !== "running") {
|
|
return -1;
|
|
} else if (a.state !== "running" && b.state === "running") {
|
|
return 1;
|
|
} else {
|
|
return a.name.localeCompare(b.name);
|
|
}
|
|
}),
|
|
);
|
|
|
|
const hosts = computed(() => config.hosts.map(({ id, name }) => ({ value: id, label: name })));
|
|
</script>
|
|
<style scoped lang="postcss">
|
|
.fade-enter-active,
|
|
.fade-leave-active {
|
|
@apply transition-opacity;
|
|
}
|
|
|
|
.fade-enter-active .menu,
|
|
.fade-leave-active .menu {
|
|
@apply transition-transform;
|
|
}
|
|
|
|
.fade-enter-from,
|
|
.fade-leave-to {
|
|
@apply opacity-0;
|
|
}
|
|
|
|
.fade-enter-from .menu,
|
|
.fade-leave-to .menu {
|
|
@apply -translate-y-2;
|
|
}
|
|
</style>
|