<template> <div> <button class="ml-2 btn" id="share-button" type="button" :class="shareClass" :title="shareValue" @click="openModal"> <span class="sn-icon sn-icon-shared"></span> <span class="text-sm"> {{ shareValue }} </span> </button> <div ref="modal"> <shareModalContainer :shared="share" :open="visibleShareModal" :shareableLinkUrl="shareableLinkUrl" :characterLimit="255" @enable="enableShare" @disable="disableShare" :canShare="canShare" @close="closeModal"/> </div> </div> </template> <script> import shareModalContainer from './components/shareable_link_modal.vue'; export default { name: 'ShareLinkContainer', components: { shareModalContainer }, props: { shared: { type: Boolean, default: false }, shareableLinkUrl: { type: String, required: true }, canShare: { type: Boolean, default: false } }, data() { return { share: false, visibleShareModal: false }; }, created() { this.share = this.shared; }, computed: { shareClass() { return this.share ? 'btn-shared' : 'btn-secondary'; }, shareValue() { return this.i18n.t(this.share ? 'my_modules.shareable_links.shared' : 'my_modules.shareable_links.share'); } }, mounted() { // move modal to body to avoid z-index issues $('body').append($(this.$refs.modal)); }, methods: { enableShare() { this.share = true; }, disableShare() { this.share = false; }, openModal() { this.visibleShareModal = true; }, closeModal() { this.visibleShareModal = false; } } }; </script>