86 lines
1.7 KiB
TypeScript
86 lines
1.7 KiB
TypeScript
import { DateTime } from "luxon"
|
|
|
|
export class Task {
|
|
constructor(
|
|
public id: number | undefined,
|
|
public title: string,
|
|
public description: string,
|
|
public done: boolean,
|
|
public estimated_time: number,
|
|
public due_date: DateTime | undefined,
|
|
public scheduled_at: DateTime | undefined
|
|
) { }
|
|
|
|
static fromSimpleTask(simpleTask: SimpleTask) {
|
|
return new Task(
|
|
simpleTask.id,
|
|
simpleTask.title,
|
|
simpleTask.description,
|
|
simpleTask.done,
|
|
simpleTask.estimated_time,
|
|
simpleTask.due_date,
|
|
simpleTask.scheduled_at
|
|
)
|
|
}
|
|
|
|
static fromSerializable(serializableTask: SerializableTask) {
|
|
console.log('dings', serializableTask.due_date)
|
|
return new Task(
|
|
serializableTask.id,
|
|
serializableTask.title,
|
|
serializableTask.description,
|
|
serializableTask.done,
|
|
serializableTask.estimated_time,
|
|
stringToDate(serializableTask.due_date),
|
|
stringToDate(serializableTask.scheduled_at),
|
|
)
|
|
}
|
|
|
|
isPersistent() {
|
|
return this.id !== undefined
|
|
}
|
|
|
|
isScheduled() {
|
|
return this.scheduled_at !== undefined
|
|
}
|
|
}
|
|
|
|
export type SimpleTask = {
|
|
id: number | undefined
|
|
title: string
|
|
description: string
|
|
done: boolean
|
|
estimated_time: number
|
|
scheduled_at: DateTime | undefined
|
|
due_date: DateTime | undefined
|
|
}
|
|
|
|
export type SerializableTask = {
|
|
id: number | undefined
|
|
title: string
|
|
description: string
|
|
done: boolean
|
|
estimated_time: number
|
|
due_date: string | undefined
|
|
scheduled_at: string | undefined
|
|
created_at: string
|
|
updated_at: string
|
|
userid: string
|
|
}
|
|
|
|
export type DraggedTask = {
|
|
target: Task,
|
|
dragInfo: {
|
|
top: number,
|
|
date: DateTime
|
|
height: number
|
|
} | undefined
|
|
}
|
|
|
|
function stringToDate(date: string | undefined) {
|
|
if (date === undefined) {
|
|
return undefined
|
|
}
|
|
return DateTime.fromISO(date)
|
|
}
|