You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
3.8 KiB

<template>
<div style="display:inline;">
<v-tooltip bottom>
<template v-slot:activator="{ on }">
<v-btn
class="text-capitalize ps-1 pe-1"
min-width="36"
icon
v-on="on"
@click="dialog=true"
>
<v-icon>
mdi-chat
</v-icon>
</v-btn>
</template>
<span>{{ $t('annotation.commentTooltip') }}</span>
</v-tooltip>
<v-dialog
v-model="dialog"
width="800"
>
<base-card
:title="$t('annotation.commentPopupTitle')"
:cancel-text="$t('generic.close')"
@cancel="dialog=false"
>
<template #content>
<v-text-field
v-model="comment"
outlined
>
<template
v-slot:append
>
<v-btn
tile
large
icon
height="auto"
width="auto"
color="primary"
class="ma-0"
@click="addItem"
>
<v-icon>mdi-plus</v-icon>
</v-btn>
</template>
</v-text-field>
<v-data-table
:headers="headers"
:items="currentDoc.comments"
:items-per-page="10"
class="elevation-1"
>
<template v-slot:item.action="{ item }">
<v-icon
small
@click="deleteItem(item.id)"
>
mdi-delete
</v-icon>
</template>
<template v-slot:item.text="props">
<v-edit-dialog
large
persistent
@save="editItem"
@open="openEdit(props.item)"
>
<div>{{ props.item.text }}</div>
<template v-slot:input>
<div class="mt-4 title">
Update Comment
</div>
<v-text-field
v-model="editedComment.text"
label="Edit"
single-line
counter
autofocus
/>
</template>
</v-edit-dialog>
</template>
</v-data-table>
</template>
</base-card>
</v-dialog>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex'
import BaseCard from '@/components/molecules/BaseCard'
export default {
components: {
BaseCard
},
data() {
return {
dialog: false,
comment: '',
editedComment: {
text: '',
id: null
}
}
},
computed: {
...mapGetters('documents', ['currentDoc']),
headers() {
return [
{
text: 'Comments',
align: 'start',
sortable: false,
value: 'text'
},
{ text: 'Action', value: 'action', sortable: false }
]
}
},
methods: {
...mapActions('documents', ['addComment', 'deleteComment', 'updateComment']),
addItem() {
if (this.comment === '') {
return
}
const payload = {
text: this.comment,
projectId: this.$route.params.id
}
this.addComment(payload)
this.comment = ''
},
deleteItem(id) {
const payload = {
commentId: id,
projectId: this.$route.params.id
}
this.deleteComment(payload)
},
editItem() {
if (this.editedComment.text === '') {
this.deleteItem(this.editedComment.id)
} else {
this.updateComment({
projectId: this.$route.params.id,
commentId: this.editedComment.id,
text: this.editedComment.text
})
}
},
openEdit(item) {
Object.assign(this.editedComment, item)
}
}
}
</script>