vikunja-frontend/src/services/list.ts

70 lines
1.5 KiB
TypeScript
Raw Normal View History

import AbstractService from './abstractService'
import ListModel from '../models/list'
import TaskService from './task'
2020-03-02 21:55:22 +01:00
import {formatISO} from 'date-fns'
import {colorFromHex} from '@/helpers/color/colorFromHex'
export default class ListService extends AbstractService {
constructor() {
super({
create: '/namespaces/{namespaceId}/lists',
get: '/lists/{id}',
2020-04-18 14:39:56 +02:00
getAll: '/lists',
update: '/lists/{id}',
delete: '/lists/{id}',
})
}
processModel(model) {
model.created = formatISO(new Date(model.created))
model.updated = formatISO(new Date(model.updated))
return model
}
modelFactory(data) {
return new ListModel(data)
}
beforeUpdate(model) {
2022-02-15 13:07:34 +01:00
const taskService = new TaskService()
model.tasks = model.tasks.map(task => {
return taskService.beforeUpdate(task)
})
model.hexColor = colorFromHex(model.hexColor)
return model
}
beforeCreate(list) {
list.hexColor = colorFromHex(list.hexColor)
return list
}
update(model) {
const newModel = { ... model }
return super.update(newModel)
}
async background(list) {
if (list.background === null) {
return ''
}
const response = await this.http({
url: `/lists/${list.id}/background`,
method: 'GET',
responseType: 'blob',
})
return window.URL.createObjectURL(new Blob([response.data]))
}
2021-03-21 18:11:24 +01:00
async removeBackground(list) {
2021-03-21 18:11:24 +01:00
const cancel = this.setLoading()
try {
const response = await this.http.delete(`/lists/${list.id}/background`, list)
return response.data
} finally {
cancel()
}
2021-03-21 18:11:24 +01:00
}
}