<template> <li class="select__item" :class="{ active: view._.selected, 'select__item--loading': view._.loading, 'select__item--no-options': readOnly, }" > <a class="select__item-link" @click="$emit('selected', view)"> <div class="select__item-name"> <i class="select__item-icon fas fa-fw color-primary" :class="'fa-' + view._.type.iconClass" ></i> <Editable ref="rename" :value="view.name" @change="renameView(view, $event)" ></Editable> </div> </a> <template v-if="!readOnly"> <a ref="contextLink" class="select__item-options" @click="$refs.context.toggle($refs.contextLink, 'bottom', 'right', 0)" > <i class="fas fa-ellipsis-v"></i> </a> <Context ref="context"> <ul class="context__menu"> <li> <a @click="enableRename()"> <i class="context__menu-icon fas fa-fw fa-pen"></i> Rename view </a> </li> <li> <a @click="deleteView()"> <i class="context__menu-icon fas fa-fw fa-trash"></i> Delete view </a> </li> </ul> </Context> <DeleteViewModal ref="deleteViewModal" :view="view" /> </template> </li> </template> <script> import context from '@baserow/modules/core/mixins/context' import { notifyIf } from '@baserow/modules/core/utils/error' import DeleteViewModal from './DeleteViewModal' export default { name: 'ViewsContextItem', components: { DeleteViewModal }, mixins: [context], props: { view: { type: Object, required: true, }, readOnly: { type: Boolean, required: false, default: true, }, }, methods: { setLoading(view, value) { this.$store.dispatch('view/setItemLoading', { view, value }) }, enableRename() { this.$refs.context.hide() this.$refs.rename.edit() }, async renameView(view, event) { this.setLoading(view, true) try { await this.$store.dispatch('view/update', { view, values: { name: event.value, }, }) } catch (error) { notifyIf(error, 'view') } this.setLoading(view, false) }, deleteView() { this.$refs.context.hide() this.$refs.deleteViewModal.show() }, }, } </script>