diff --git a/frontend/components/tasks/toolbar/ToolbarLaptop.vue b/frontend/components/tasks/toolbar/ToolbarLaptop.vue index 381621a6..b6941580 100644 --- a/frontend/components/tasks/toolbar/ToolbarLaptop.vue +++ b/frontend/components/tasks/toolbar/ToolbarLaptop.vue @@ -6,6 +6,8 @@ + + @@ -64,6 +66,7 @@ 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' @@ -80,6 +83,7 @@ export default Vue.extend({ ButtonComment, ButtonFilter, ButtonGuideline, + ButtonOrder, ButtonKeyboardShortcut, ButtonPagination, ButtonReview, @@ -134,6 +138,10 @@ export default Vue.extend({ filterOption(): string { // @ts-ignore return this.$route.query.isChecked + }, + orderOption(): string { + // @ts-ignore + return this.$route.query.ordering } }, @@ -143,6 +151,7 @@ export default Vue.extend({ query: { page: page.toString(), isChecked: this.filterOption, + ordering: this.$route.query.ordering, q: this.$route.query.q } }) @@ -153,11 +162,23 @@ export default Vue.extend({ 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) diff --git a/frontend/composables/useExampleItem.ts b/frontend/composables/useExampleItem.ts index d616850b..ed9baca1 100644 --- a/frontend/composables/useExampleItem.ts +++ b/frontend/composables/useExampleItem.ts @@ -14,9 +14,14 @@ export const useExampleItem = () => { const getExample = async ( projectId: string, - { page, q, isChecked }: { page: string; q: string; isChecked: string } + { + page, + q, + isChecked, + ordering + }: { page: string; q: string; isChecked: string; ordering: string } ) => { - const examples = await exampleService.fetchOne(projectId, page, q, isChecked) + const examples = await exampleService.fetchOne(projectId, page, q, isChecked, ordering) state.totalExample = examples.count if (!_.isEmpty(examples) && examples.items.length !== 0) { state.example = examples.items[0] diff --git a/frontend/pages/projects/_id/image-captioning/index.vue b/frontend/pages/projects/_id/image-captioning/index.vue index f573cf71..83000f3b 100644 --- a/frontend/pages/projects/_id/image-captioning/index.vue +++ b/frontend/pages/projects/_id/image-captioning/index.vue @@ -112,7 +112,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const image = this.images.items[0] this.setImageSize(image) diff --git a/frontend/pages/projects/_id/image-classification/index.vue b/frontend/pages/projects/_id/image-classification/index.vue index 3bce0f34..5b256340 100644 --- a/frontend/pages/projects/_id/image-classification/index.vue +++ b/frontend/pages/projects/_id/image-classification/index.vue @@ -115,7 +115,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const image = this.images.items[0] this.setImageSize(image) diff --git a/frontend/pages/projects/_id/intent-detection-and-slot-filling/index.vue b/frontend/pages/projects/_id/intent-detection-and-slot-filling/index.vue index ed3236ae..326e4886 100644 --- a/frontend/pages/projects/_id/intent-detection-and-slot-filling/index.vue +++ b/frontend/pages/projects/_id/intent-detection-and-slot-filling/index.vue @@ -91,7 +91,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const doc = this.docs.items[0] await this.listSpan(doc.id) diff --git a/frontend/pages/projects/_id/object-detection/index.vue b/frontend/pages/projects/_id/object-detection/index.vue index 4d390f66..732149cc 100644 --- a/frontend/pages/projects/_id/object-detection/index.vue +++ b/frontend/pages/projects/_id/object-detection/index.vue @@ -134,7 +134,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const image = this.images.items[0] if (this.enableAutoLabeling) { diff --git a/frontend/pages/projects/_id/segmentation/index.vue b/frontend/pages/projects/_id/segmentation/index.vue index b62174c8..47c61bf5 100644 --- a/frontend/pages/projects/_id/segmentation/index.vue +++ b/frontend/pages/projects/_id/segmentation/index.vue @@ -135,7 +135,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const image = this.images.items[0] if (this.enableAutoLabeling) { diff --git a/frontend/pages/projects/_id/sequence-labeling/index.vue b/frontend/pages/projects/_id/sequence-labeling/index.vue index 3b132001..3f0bddf5 100644 --- a/frontend/pages/projects/_id/sequence-labeling/index.vue +++ b/frontend/pages/projects/_id/sequence-labeling/index.vue @@ -124,7 +124,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const doc = this.docs.items[0] if (this.enableAutoLabeling && !doc.isConfirmed) { diff --git a/frontend/pages/projects/_id/sequence-to-sequence/index.vue b/frontend/pages/projects/_id/sequence-to-sequence/index.vue index a68e4ad3..d250e77f 100644 --- a/frontend/pages/projects/_id/sequence-to-sequence/index.vue +++ b/frontend/pages/projects/_id/sequence-to-sequence/index.vue @@ -71,7 +71,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const doc = this.docs.items[0] if (this.enableAutoLabeling) { diff --git a/frontend/pages/projects/_id/speech-to-text/index.vue b/frontend/pages/projects/_id/speech-to-text/index.vue index 937326c9..ce893ebb 100644 --- a/frontend/pages/projects/_id/speech-to-text/index.vue +++ b/frontend/pages/projects/_id/speech-to-text/index.vue @@ -76,7 +76,8 @@ export default { this.projectId, this.$route.query.page, this.$route.query.q, - this.$route.query.isChecked + this.$route.query.isChecked, + this.$route.query.ordering ) const item = this.items.items[0] if (this.enableAutoLabeling) { diff --git a/frontend/repositories/example/apiDocumentRepository.ts b/frontend/repositories/example/apiDocumentRepository.ts index d1312c3b..2dfcd6fc 100644 --- a/frontend/repositories/example/apiDocumentRepository.ts +++ b/frontend/repositories/example/apiDocumentRepository.ts @@ -30,9 +30,9 @@ export class APIExampleRepository implements ExampleRepository { async list( projectId: string, - { limit = '10', offset = '0', q = '', isChecked = '' }: SearchOption + { limit = '10', offset = '0', q = '', isChecked = '', ordering = '' }: SearchOption ): Promise { - const url = `/projects/${projectId}/examples?limit=${limit}&offset=${offset}&q=${q}&confirmed=${isChecked}` + const url = `/projects/${projectId}/examples?limit=${limit}&offset=${offset}&q=${q}&confirmed=${isChecked}&ordering=${ordering}` const response = await this.request.get(url) return new ExampleItemList( response.data.count, diff --git a/frontend/services/application/example/exampleApplicationService.ts b/frontend/services/application/example/exampleApplicationService.ts index 69e8f760..8b77242f 100644 --- a/frontend/services/application/example/exampleApplicationService.ts +++ b/frontend/services/application/example/exampleApplicationService.ts @@ -19,14 +19,16 @@ export class ExampleApplicationService { projectId: string, page: string, q: string, - isChecked: string + isChecked: string, + ordering: string ): Promise { const offset = (parseInt(page, 10) - 1).toString() const options: SearchOption = { limit: '1', offset, q, - isChecked + isChecked, + ordering } return await this.list(projectId, options) }