Skip to content
Snippets Groups Projects
Commit f984712a authored by Valentin Rigal's avatar Valentin Rigal Committed by Erwan Rouchet
Browse files

Support toggling dataset element uniqueness

parent 1cf56b72
No related branches found
No related tags found
1 merge request!1665Support toggling dataset element uniqueness
......@@ -5,9 +5,9 @@ import { Dataset, DatasetElementList, ElementDatasetSet } from '@/types/dataset'
export interface DatasetListParameters extends CursorPaginationParameters { set?: string | null }
export type DatasetEdit = Pick<Dataset, 'id' | 'name' | 'description'>
export type DatasetEdit = Pick<Dataset, 'id' | 'name' | 'description' | 'unique_elements'>
export interface DatasetCreate extends Pick<Dataset, 'name' | 'description'> {
export interface DatasetCreate extends Pick<Dataset, 'name' | 'description' | 'unique_elements'> {
set_names: string[]
}
......
......@@ -80,6 +80,20 @@
</div>
</div>
</div>
<div class="field">
<div class="control">
<label class="checkbox">
<input
type="checkbox"
v-model="newDataset.unique_elements"
/>
Require unique elements among sets
</label>
</div>
<template v-if="fieldErrors.unique_elements">
<p class="help is-danger">{{ fieldErrors.unique_elements }}</p>
</template>
</div>
</form>
<template v-slot:footer="{ close }">
<button class="button" v-on:click="close">Cancel</button>
......@@ -135,7 +149,8 @@ export default {
newDataset: {
name: '',
description: '',
sets: []
sets: [],
unique_elements: true
},
loading: false,
fieldErrors: {}
......@@ -145,7 +160,8 @@ export default {
this.newDataset = {
name: this.datasetInstance.name,
description: this.datasetInstance.description,
sets: this.datasetInstance.sets
sets: this.datasetInstance.sets,
unique_elements: this.datasetInstance.unique_elements
}
}
},
......@@ -175,7 +191,8 @@ export default {
this.loading = true
const data = {
name: this.newDataset.name.trim(),
description: this.newDataset.description.trim()
description: this.newDataset.description.trim(),
unique_elements: this.newDataset.unique_elements
}
// Add list of set names to the payload when creating a new dataset
if (!this.datasetInstance) {
......@@ -234,13 +251,15 @@ export default {
this.newDataset = {
name: this.datasetInstance.name,
description: this.datasetInstance.description,
sets: this.datasetInstance.sets
sets: this.datasetInstance.sets,
unique_elements: this.datasetInstance.unique_elements
}
} else {
this.newDataset = {
name: '',
description: '',
sets: ['train', 'validation', 'test']
sets: ['train', 'validation', 'test'],
unique_elements: true
}
}
this.fieldErrors = {}
......
......@@ -5,6 +5,7 @@
<th>Name</th>
<th>Description</th>
<th>State</th>
<th>Unique elements</th>
<th class="is-narrow">Actions</th>
</tr>
</thead>
......@@ -16,7 +17,7 @@
:corpus-id="corpusId"
/>
<tr>
<td colspan="3"></td>
<td colspan="4"></td>
<td class="is-narrow has-text-right">
<button
class="button is-primary"
......
......@@ -12,6 +12,10 @@
<td>
<StateTag :state="dataset.state" />
</td>
<td>
<span v-if="dataset.unique_elements"></span>
<span v-else></span>
</td>
<td>
<span class="is-inline-flex">
<button
......
......@@ -72,6 +72,9 @@
</select>
</span>
</div>
<template v-if="fieldErrors.set_id">
<p v-for="err in fieldErrors.set_id" :key="err" class="help is-danger">{{ err }}</p>
</template>
</div>
</div>
</div>
......@@ -94,6 +97,7 @@
</template>
<script lang="ts">
import { isAxiosError } from 'axios'
import { mapState, mapActions } from 'pinia'
import { corporaMixin, truncateMixin } from '@/mixins'
import { UUID_REGEX } from '@/config'
......@@ -137,7 +141,8 @@ export default defineComponent({
/**
* Name of the set elements will be added to
*/
selectedSet: null as DatasetSet | null
selectedSet: null as DatasetSet | null,
fieldErrors: {} as { [key: string]: string[] | undefined }
}),
computed: {
...mapState(useDatasetStore, ['corpusDatasets', 'singleCorpusDatasets']),
......@@ -160,6 +165,7 @@ export default defineComponent({
if (!this.selectedDataset || !this.selectedSet) return
this.loading = true
this.fieldErrors = {}
try {
await this.addDatasetElementsSelection(
this.corpusId,
......@@ -169,6 +175,10 @@ export default defineComponent({
this.selectedDataset = null
this.selectedSet = null
this.$emit('update:modelValue', false)
} catch (err) {
if (isAxiosError(err) && err.response?.status === 400 && err.response.data) {
this.fieldErrors = err.response.data
}
} finally {
this.loading = false
}
......
......@@ -18,6 +18,7 @@ export interface Dataset {
corpus_id: UUID
creator: string
task_id: UUID | null
unique_elements: boolean
created: string
updated: string
}
......
......@@ -24,6 +24,11 @@
<label class="label mr-2">State</label>
<StateTag :state="dataset.state" />
</div>
<div class="field is-horizontal">
<label class="label mr-2">Unique elements</label>
<span v-if="dataset.unique_elements"></span>
<span v-else></span>
</div>
<div class="field">
<label class="label">Description</label>
<div class="control">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment