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.
 
 
 
 
 
 

77 lines
1.9 KiB

import { reactive } from '@nuxtjs/composition-api'
import { TextLabel } from '~/domain/models/tasks/textLabel'
export const useTextLabel = (repository: any, projectId: string) => {
const state = reactive({
labels: [] as TextLabel[],
error: ''
})
const validateText = (text: string) => {
if (state.labels.some((label) => label.text === text)) {
state.error = 'The label already exists.'
return false
}
return true
}
const add = async (exampleId: number, text: string) => {
const textLabel = TextLabel.create(text)
if (!validateText(textLabel.text)) {
return
}
try {
await repository.create(projectId, exampleId, textLabel)
await list(exampleId)
} catch (e: any) {
state.error = e.response.data.detail
}
}
const list = async (exampleId: number) => {
state.labels = await repository.list(projectId, exampleId)
}
const update = async (exampleId: number, labelId: number, text: string) => {
if (!validateText(text)) {
return
}
const label = state.labels.find((label) => label.id === labelId)!
label.updateText(text)
try {
await repository.update(projectId, exampleId, labelId, label)
await list(exampleId)
} catch (e: any) {
state.error = e.response.data.detail
}
}
const remove = async (exampleId: number, labelId: number) => {
await repository.delete(projectId, exampleId, labelId)
state.labels = state.labels.filter((label) => label.id !== labelId)
}
const clear = async (exampleId: number) => {
await repository.clear(projectId, exampleId)
state.labels = []
}
const autoLabel = async (exampleId: number) => {
try {
await repository.autoLabel(projectId, exampleId)
await list(exampleId)
} catch (e: any) {
state.error = e.response.data.detail
}
}
return {
state,
add,
list,
update,
remove,
clear,
autoLabel
}
}