diff --git a/src/App.tsx b/src/App.tsx
index ba06943..162b096 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -21,12 +21,13 @@ const App = observer(() => {
task.completed = e.target.checked)} />
+ onChange={e => task.completed = e.target.checked} />
task.title = e.target.value)} />
+ onChange={e => task.title = e.target.value} />
-
+
+ {task.$.title.error}
);
})}
diff --git a/src/Store.ts b/src/Store.ts
index 08e1915..7cf1586 100644
--- a/src/Store.ts
+++ b/src/Store.ts
@@ -1,15 +1,21 @@
-import { remult } from "remult";
+import { Remult, remult } from "remult";
import { Task } from "./shared/Task";
import { TasksController } from "./shared/TasksController";
-import { makeAutoObservable, runInAction } from 'mobx';
+import { action, createAtom, makeAutoObservable, runInAction } from 'mobx';
import { store } from "./App";
+// Make all remult entities observable mobx items
+Remult.entityRefInit = (ref, row) => ref.subscribe(createAtom("entity"));
+
export class Store {
taskRepo = remult.repo(Task);
tasks: Task[] = [];
hideCompleted = false;
constructor() {
makeAutoObservable(this);
+ this.taskRepo.addEventListener({
+ deleted: action(task => this.tasks = this.tasks.filter(t => t != task))
+ });
}
replaceTasks(tasks: Task[]) {
this.tasks = tasks;
@@ -22,20 +28,15 @@ export class Store {
}));
}
addTask() {
- this.tasks.push(new Task());
+ this.tasks.push(this.taskRepo.create());
}
async saveTask(task: Task) {
try {
- const savedTask = await this.taskRepo.save(task);
- runInAction(() => store.tasks[store.tasks.indexOf(task)] = savedTask);
+ await task.save();
} catch (error: any) {
alert(error.message);
}
}
- async deleteTask(task: Task) {
- await this.taskRepo.delete(task);
- runInAction(() => this.tasks = this.tasks.filter(t => t !== task));
- }
async setAll(completed: boolean) {
await TasksController.setAll(completed);
this.loadTasks();
diff --git a/src/shared/Task.ts b/src/shared/Task.ts
index 720b89d..313645b 100644
--- a/src/shared/Task.ts
+++ b/src/shared/Task.ts
@@ -1,5 +1,4 @@
-import { makeAutoObservable } from "mobx";
-import { Allow, Entity, Fields, Validators } from "remult";
+import { Allow, Entity, EntityBase, Fields, Validators } from "remult";
import { Roles } from "./Roles";
@Entity("tasks", {
@@ -8,10 +7,7 @@ import { Roles } from "./Roles";
allowApiInsert: Roles.admin,
allowApiDelete: Roles.admin
})
-export class Task {
- constructor(){
- makeAutoObservable(this);
- }
+export class Task extends EntityBase {
@Fields.uuid()
id!: string;