Merge backend + frontend #1
36
frontend/src/models.tsx
Normal file
36
frontend/src/models.tsx
Normal file
@ -0,0 +1,36 @@
|
||||
import { formatISO } from "date-fns";
|
||||
import * as yup from "yup";
|
||||
|
||||
const todoSchema = yup.object({
|
||||
complete: yup.boolean().required(),
|
||||
due: yup.date().nullable(),
|
||||
id: yup.number().required().positive().integer(),
|
||||
task: yup.string().trim().min(1).defined().strict(true),
|
||||
});
|
||||
|
||||
export class Todo {
|
||||
complete: boolean;
|
||||
due: Date | null;
|
||||
id: number;
|
||||
task: string;
|
||||
|
||||
constructor(data: any) {
|
||||
const validatedData = todoSchema.validateSync(data);
|
||||
this.complete = validatedData.complete;
|
||||
this.due = validatedData.due ?? null;
|
||||
this.id = validatedData.id;
|
||||
this.task = validatedData.task;
|
||||
}
|
||||
|
||||
toJSON(): any {
|
||||
return {
|
||||
complete: this.complete,
|
||||
due:
|
||||
this.due !== null
|
||||
? formatISO(this.due, { representation: "date" })
|
||||
: null,
|
||||
id: this.id,
|
||||
task: this.task,
|
||||
};
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user