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.
 
 
 
 
 
 

207 lines
5.2 KiB

<template>
<v-toolbar class="toolbar-control" dense flat>
<v-row no-gutters>
<v-btn-toggle>
<button-review :is-reviewd="isReviewd" @click:review="$emit('click:review')" />
<button-filter :value="filterOption" @click:filter="changeFilter" />
<button-order :value="orderOption" @click:order="changeOrder" />
<button-guideline @click:guideline="dialogGuideline = true" />
<v-dialog v-model="dialogGuideline">
<form-guideline :guideline-text="guidelineText" @click:close="dialogGuideline = false" />
</v-dialog>
<button-comment @click:comment="dialogComment = true" />
<v-dialog v-model="dialogComment">
<form-comment :example-id="docId" @click:cancel="dialogComment = false" />
</v-dialog>
<button-auto-labeling @click:auto="dialogAutoLabeling = true" />
<v-dialog v-model="dialogAutoLabeling">
<form-auto-labeling
:is-enabled="enableAutoLabeling"
:error-message="errorMessage"
@click:cancel="dialogAutoLabeling = false"
@input="updateAutoLabeling"
/>
</v-dialog>
<button-clear @click:clear="dialogClear = true" />
<v-dialog v-model="dialogClear">
<form-clear-label
@click:ok="
$emit('click:clear-label')
dialogClear = false
"
@click:cancel="dialogClear = false"
/>
</v-dialog>
<button-keyboard-shortcut @click:open="dialogShortcut = true" />
<v-dialog v-model="dialogShortcut">
<form-keyboard-shortcut @click:close="dialogShortcut = false" />
</v-dialog>
</v-btn-toggle>
<slot />
<v-spacer />
<button-pagination
:value="page"
:total="total"
@click:prev="updatePage(page - 1)"
@click:next="updatePage(page + 1)"
@click:first="updatePage(1)"
@click:last="updatePage(total)"
@click:jump="updatePage($event)"
/>
</v-row>
</v-toolbar>
</template>
<script lang="ts">
import Vue from 'vue'
import ButtonAutoLabeling from './buttons/ButtonAutoLabeling.vue'
import ButtonClear from './buttons/ButtonClear.vue'
import ButtonComment from './buttons/ButtonComment.vue'
import ButtonFilter from './buttons/ButtonFilter.vue'
import ButtonGuideline from './buttons/ButtonGuideline.vue'
import ButtonOrder from './buttons/ButtonOrder.vue'
import ButtonPagination from './buttons/ButtonPagination.vue'
import ButtonReview from './buttons/ButtonReview.vue'
import ButtonKeyboardShortcut from './buttons/ButtonKeyboardShortcut.vue'
import FormAutoLabeling from './forms/FormAutoLabeling.vue'
import FormClearLabel from './forms/FormClearLabel.vue'
import FormComment from './forms/FormComment.vue'
import FormGuideline from './forms/FormGuideline.vue'
import FormKeyboardShortcut from './forms/FormKeyboardShortcut.vue'
export default Vue.extend({
components: {
ButtonAutoLabeling,
ButtonClear,
ButtonComment,
ButtonFilter,
ButtonGuideline,
ButtonOrder,
ButtonKeyboardShortcut,
ButtonPagination,
ButtonReview,
FormAutoLabeling,
FormClearLabel,
FormComment,
FormGuideline,
FormKeyboardShortcut
},
props: {
docId: {
type: Number,
required: true
},
enableAutoLabeling: {
type: Boolean,
default: false,
required: true
},
guidelineText: {
type: String,
default: '',
required: true
},
isReviewd: {
type: Boolean,
default: false
},
total: {
type: Number,
default: 1
}
},
data() {
return {
dialogAutoLabeling: false,
dialogClear: false,
dialogComment: false,
dialogGuideline: false,
dialogShortcut: false,
errorMessage: ''
}
},
computed: {
page(): number {
// @ts-ignore
return parseInt(this.$route.query.page, 10)
},
filterOption(): string {
// @ts-ignore
return this.$route.query.isChecked
},
orderOption(): string {
// @ts-ignore
return this.$route.query.ordering
}
},
methods: {
updatePage(page: number) {
this.$router.push({
query: {
page: page.toString(),
isChecked: this.filterOption,
ordering: this.$route.query.ordering,
q: this.$route.query.q
}
})
},
changeFilter(isChecked: string) {
this.$router.push({
query: {
page: '1',
isChecked,
ordering: this.$route.query.ordering,
q: this.$route.query.q
}
})
},
changeOrder(ordering: string) {
this.$router.push({
query: {
page: '1',
isChecked: this.filterOption,
q: this.$route.query.q,
ordering
}
})
},
updateAutoLabeling(isEnable: boolean) {
if (isEnable) {
this.$emit('update:enable-auto-labeling', true)
} else {
this.$emit('update:enable-auto-labeling', false)
}
}
}
})
</script>
<style scoped>
.toolbar-control {
position: sticky;
top: 68px;
z-index: 100;
}
.toolbar-control >>> .v-toolbar__content {
padding: 0px !important;
}
::v-deep .v-dialog {
width: 800px;
}
</style>