<template> <div @mouseenter="onMouseEnter" @mouseleave="onMouseLeave"> <span v-if="!href" class="navbar-menu__link navbar-menu__submenu-toggle" :class="{'navbar-menu__submenu-toggle--open': show}" @click="handleClick">{{ label }}</span> <a v-if="href" :href="href" class="navbar-menu__link navbar-menu__submenu-toggle" :class="{'navbar-menu__submenu-toggle--open': show}" @click.prevent="handleClick">{{ label }}</a> <div :class="{'navbar-menu__submenu-wrap--show': show}" class="navbar-menu__submenu-wrap"> <ul class="navbar-menu__submenu"> <li v-for="(item, index) in parsedItems" :key="index"> <a :href="item[1]" class="navbar-menu__link">{{ item[0] }}</a> </li> </ul> </div> </div> </template> <script> import { isLgScreenSize } from "../../utils"; export default { data() { return { show: false, parsedItems: JSON.parse(this.items), }; }, props: { href: { type: String, }, label: { type: String, }, items: { type: String, } }, methods: { onMouseEnter() { if (isLgScreenSize()) { this.$data.show = true; } }, onMouseLeave() { if (isLgScreenSize()) { this.$data.show = false; } }, handleClick(evt) { // On mobile screens, first click should just toggle and redir on second one if (isLgScreenSize() || this.$data.show) { if (this.$props.href) { window.location = this.$props.href; } } this.$data.show = !this.$data.show; } } } </script>