tethys.backend/resources/js/Components/NavBarItem.vue

91 lines
2.1 KiB
Vue
Raw Normal View History

2023-03-03 15:54:28 +00:00
<script setup>
import { StyleService } from '@/Stores/style';
2023-03-03 15:54:28 +00:00
// import { Link } from '@inertiajs/vue3'
import { Link } from '@inertiajs/vue3';
import { computed } from 'vue';
2023-03-03 15:54:28 +00:00
import { stardust } from '@eidellev/adonis-stardust/client';
const props = defineProps({
href: {
type: String,
default: null,
},
routeName: {
type: String,
default: null,
},
param: {
type: Number,
},
type: {
type: String,
default: 'flex',
},
activeColor: {
type: String,
default: null,
},
isDesktopIconOnly: Boolean,
dropdown: Boolean,
active: Boolean,
});
2023-03-03 15:54:28 +00:00
const is = computed(() => {
if (props.href) {
return 'a';
}
2023-03-03 15:54:28 +00:00
if (props.routeName) {
return Link;
}
2023-03-03 15:54:28 +00:00
return 'div';
});
2023-03-03 15:54:28 +00:00
const styleStore = StyleService();
2023-03-03 15:54:28 +00:00
const activeColor = props.activeColor ?? `${styleStore.navBarItemLabelActiveColorStyle} dark:text-slate-400`;
2023-03-03 15:54:28 +00:00
const activeClass = computed(
// () => props.routeName && route().current(props.routeName) == true ? props.activeColor : null
() => (props.routeName && stardust.isCurrent(props.routeName) ? props.activeColor : null),
);
2023-03-03 15:54:28 +00:00
// const itemRoute = computed(() => (props.routeName ? stardust.route(props.routeName): ''));
const componentClass = computed(() => {
const base = [
props.type,
props.active
? activeColor
: `${styleStore.navBarItemLabelStyle} dark:text-white dark:hover:text-slate-400 ${styleStore.navBarItemLabelHoverStyle}`,
];
2023-03-03 15:54:28 +00:00
if (props.type === 'block') {
base.push('lg:flex');
}
2023-03-03 15:54:28 +00:00
if (!props.dropdown) {
base.push('py-2', 'px-3');
} else {
base.push('p-0', 'lg:py-2', 'lg:px-3');
}
2023-03-03 15:54:28 +00:00
if (props.isDesktopIconOnly) {
base.push('lg:w-16', 'lg:justify-center');
}
2023-03-03 15:54:28 +00:00
return base;
});
2023-03-03 15:54:28 +00:00
</script>
<template>
<component
:is="is"
class="items-center grow-0 shrink-0 relative cursor-pointer"
:class="[componentClass, activeClass]"
:href="routeName ? stardust.route(props.routeName, [props.param]) : href"
>
<slot />
</component>
2023-03-03 15:54:28 +00:00
</template>