mirror of https://github.com/doccano/doccano.git
pythondatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learningannotation-tool
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
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>
|