<template> <Context ref="groupContext" class="select"> <div class="select-search"> <i class="select-search-icon fas fa-search"></i> <input type="text" class="select-search-input" placeholder="Search views" /> </div> <div v-if="isLoading" class="context-loading"> <div class="loading"></div> </div> <ul v-if="!isLoading && groups.length > 0" class="select-items"> <li v-for="group in groups" :key="group.id" class="select-item"> <a href="#" class="select-item-link">{{ group.name }}</a> <a :ref="'groupOptions' + group.id" class="select-item-options" @click="toggleContext(group.id)" > <i class="fas fa-ellipsis-v"></i> </a> </li> </ul> <div v-if="!isLoading && groups.length == 0" class="context-description"> No results found </div> <Context ref="groupsItemContext"> <ul class="context-menu"> <li> <a href="#"> <i class="context-menu-icon fas fa-fw fa-pen"></i> Rename group </a> </li> <li> <a href="#"> <i class="context-menu-icon fas fa-fw fa-trash"></i> Delete group </a> </li> </ul> </Context> <div class="select-footer"> <a class="select-footer-button" @click="$refs.createGroupModal.show()"> <i class="fas fa-plus"></i> Create group </a> </div> <CreateGroupModal ref="createGroupModal"></CreateGroupModal> </Context> </template> <script> import { mapGetters, mapState } from 'vuex' import CreateGroupModal from '@/components/group/CreateGroupModal' export default { name: 'GroupsItemContext', components: { CreateGroupModal }, data() { return { open: false } }, computed: { ...mapState({ groups: state => state.group.items }), ...mapGetters({ isLoading: 'group/isLoading' }) }, methods: { toggle(...args) { this.$store.dispatch('group/loadAll') this.$refs.groupContext.toggle(...args) }, toggleContext(groupId) { const target = this.$refs['groupOptions' + groupId][0] this.$refs.groupsItemContext.toggle(target, 'bottom', 'right', 0) } } } </script>