Skip to content

Commit 0df6704

Browse files
committed
simplified menu system using PrimeVue components
1 parent a402e4f commit 0df6704

File tree

6 files changed

+249
-160
lines changed

6 files changed

+249
-160
lines changed

resources/js/Components/LinksMenu.vue

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<script setup>
2+
import { ref } from 'vue';
3+
import Menu from 'primevue/menu';
4+
5+
const childRef = ref(null);
6+
7+
defineExpose({
8+
childRef,
9+
});
10+
</script>
11+
12+
<template>
13+
<Menu ref="childRef">
14+
<template #item="{ item, props }">
15+
<Link
16+
v-if="item.route"
17+
:href="item.route"
18+
class="p-menu-item-link"
19+
custom
20+
>
21+
<span v-show="item.icon" :class="item.icon" class="mr-1" />
22+
<span>{{ item.label }}</span>
23+
</Link>
24+
<a
25+
v-else
26+
:href="item.url"
27+
:target="item.target"
28+
v-bind="props.action"
29+
>
30+
<span v-show="item.icon" :class="item.icon" class="mr-1" />
31+
<span>{{ item.label }}</span>
32+
</a>
33+
</template>
34+
</Menu>
35+
</template>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<script setup>
2+
import { ref } from 'vue';
3+
import Menubar from 'primevue/menubar';
4+
5+
const childRef = ref(null);
6+
7+
defineExpose({
8+
childRef,
9+
});
10+
</script>
11+
12+
<template>
13+
<Menubar ref="childRef">
14+
<template v-if="$slots.start" #start>
15+
<slot name="start"></slot>
16+
</template>
17+
<template #item="{ item, props, hasSubmenu, root }">
18+
<Link
19+
v-if="item.route"
20+
:href="item.route"
21+
class="p-menubar-item-link"
22+
:class="
23+
item.active
24+
? 'text-primary'
25+
: 'text-surface-700 dark:text-surface-0'
26+
"
27+
custom
28+
>
29+
<span v-show="item.icon" :class="item.icon" class="mr-1" />
30+
<span>{{ item.label }}</span>
31+
</Link>
32+
<a
33+
v-else
34+
:href="item.url"
35+
:target="item.target"
36+
v-bind="props.action"
37+
class="p-menubar-item-link"
38+
>
39+
<span v-show="item.icon" :class="item.icon" class="mr-1" />
40+
<span>{{ item.label }}</span>
41+
<i
42+
v-if="hasSubmenu"
43+
:class="[
44+
'pi pi-angle-down',
45+
{
46+
'pi-angle-down ml-2': root,
47+
'pi-angle-right ml-auto': !root,
48+
},
49+
]"
50+
></i>
51+
</a>
52+
</template>
53+
<template v-if="$slots.end" #end>
54+
<slot name="end"></slot>
55+
</template>
56+
</Menubar>
57+
</template>

resources/js/Components/MobileNavLink.vue

Lines changed: 0 additions & 21 deletions
This file was deleted.

resources/js/Components/NavLink.vue

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<script setup>
2+
import PanelMenu from 'primevue/panelmenu';
3+
</script>
4+
5+
<template>
6+
<PanelMenu
7+
:pt="{
8+
root: {
9+
class: 'p-0 m-0 gap-1',
10+
},
11+
panel: {
12+
class: 'p-0 border-0',
13+
},
14+
header: {
15+
class: 'p-0 border-0',
16+
},
17+
itemContent: {
18+
class: 'gap-1',
19+
},
20+
}"
21+
>
22+
<template #item="{ item }">
23+
<Link
24+
v-if="item.route"
25+
:href="item.route"
26+
custom
27+
class="flex items-center cursor-pointer px-4 py-2"
28+
:class="
29+
item.active
30+
? 'text-primary'
31+
: 'text-surface-700 dark:text-surface-0'
32+
"
33+
>
34+
<span v-show="item.icon" :class="item.icon" class="mr-2" />
35+
<span>{{ item.label }}</span>
36+
</Link>
37+
<a
38+
v-else
39+
class="flex items-center cursor-pointer text-surface-700 dark:text-surface-0 px-4 py-2"
40+
:href="item.url"
41+
:target="item.target"
42+
>
43+
<span v-show="item.icon" :class="item.icon" class="mr-2" />
44+
<span>{{ item.label }}</span>
45+
<span v-if="item.items" class="pi pi-angle-down ml-auto" />
46+
</a>
47+
</template>
48+
</PanelMenu>
49+
</template>

0 commit comments

Comments
 (0)