From fb62104b9fcf09dffd1d7d7bea9882bdb2ccb447 Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Sun, 11 Sep 2022 18:40:42 +0300 Subject: [PATCH 1/9] test play with mobx --- db/tasks.json | 23 ++++------ package-lock.json | 44 ++++++++++++++++++ package.json | 1 + src/App.tsx | 113 +++++++++++++++++++++++++--------------------- 4 files changed, 115 insertions(+), 66 deletions(-) diff --git a/db/tasks.json b/db/tasks.json index b674c29..c55fd29 100644 --- a/db/tasks.json +++ b/db/tasks.json @@ -1,32 +1,27 @@ [ { "id": "ebf5cd37-02fc-4fac-9f0c-45170f1979d1", - "title": "Task a", - "completed": false + "title": "Task a1212313", + "completed": true }, { "id": "aa8b8a1d-bf1e-4508-9a4a-cee3acaff346", - "title": "Task b", - "completed": false + "title": "Task b123", + "completed": true }, { "id": "e4c586cb-316e-413b-a93d-ba5be59ac16e", - "title": "Task c", - "completed": false - }, - { - "id": "07292d0a-7c0f-4d7d-af90-2aa58b863fd5", - "title": "Task d121", + "title": "Task c123132", "completed": false }, { - "id": "cd2ed064-dd3b-45dc-9045-702bcdd512c8", - "title": "Task e", + "id": "9510a9ff-dd6d-4f65-b07b-0dc97428fb96", + "title": "12132123", "completed": false }, { - "id": "94c14437-ac2c-405b-931c-16659d271468", - "title": "jl;jkl;", + "id": "8dda3186-033f-46de-8a99-6cc786e6ba38", + "title": "123123", "completed": false } ] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 994fe64..4aa5638 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "express": "^4.18.1", "helmet": "^6.0.0", "heroku-ssl-redirect": "^0.1.1", + "mobx-react-lite": "^3.4.0", "pg": "^8.8.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -2455,6 +2456,37 @@ "node": ">=10" } }, + "node_modules/mobx": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.6.2.tgz", + "integrity": "sha512-IOpS0bf3+hXIhDIy+CmlNMBfFpAbHS0aVHcNC+xH/TFYEKIIVDKNYRh9eKlXuVfJ1iRKAp0cRVmO145CyJAMVQ==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + } + }, + "node_modules/mobx-react-lite": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.0.tgz", + "integrity": "sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.1.0", + "react": "^16.8.0 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5257,6 +5289,18 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "mobx": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.6.2.tgz", + "integrity": "sha512-IOpS0bf3+hXIhDIy+CmlNMBfFpAbHS0aVHcNC+xH/TFYEKIIVDKNYRh9eKlXuVfJ1iRKAp0cRVmO145CyJAMVQ==", + "peer": true + }, + "mobx-react-lite": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.0.tgz", + "integrity": "sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==", + "requires": {} + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", diff --git a/package.json b/package.json index 047efab..eb871e3 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "express": "^4.18.1", "helmet": "^6.0.0", "heroku-ssl-redirect": "^0.1.1", + "mobx-react-lite": "^3.4.0", "pg": "^8.8.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/src/App.tsx b/src/App.tsx index 10f565d..f75a8ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,87 +1,96 @@ -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { remult } from "remult"; import { Task } from "./shared/Task"; import { TasksController } from "./shared/TasksController"; +import { observer } from "mobx-react-lite"; +import { action, makeAutoObservable, observable, runInAction } from 'mobx'; -const taskRepo = remult.repo(Task); -async function fetchTasks(hideCompleted: boolean) { - return taskRepo.find({ - limit: 20, - orderBy: { completed: "asc" }, - where: { completed: hideCompleted ? false : undefined } - }); -} +class Store { + taskRepo = remult.repo(Task); + readonly tasks = observable([]); + hideCompleted = false; + constructor() { + makeAutoObservable(this); + } + replaceTasks(t: Task[]) { + this.tasks.replace(t.map(t => makeAutoObservable({ ...t }))); + } + async loadTasks() { + this.replaceTasks(await + this.taskRepo.find({ + limit: 20, + orderBy: { completed: "asc" }, + where: { completed: this.hideCompleted ? false : undefined } + })); + } + addTask() { + this.tasks.push(makeAutoObservable(new Task())) + } + async saveTask(task: Task) { + try { + const savedTask = await this.taskRepo.save(task); + runInAction(() => store.tasks[store.tasks.indexOf(task)] = savedTask); + } catch (error: any) { + alert(error.message); + } + } + async deleteTask(task: Task) { + await this.taskRepo.delete(task); + runInAction(() => store.tasks.remove(task)); + } + async setAll(completed: boolean) { + await TasksController.setAll(completed); + this.loadTasks(); + } +} +const store = new Store(); function App() { - const [tasks, setTasks] = useState([]); - const [hideCompleted, setHideCompleted] = useState(false); + return +} +const Todo: React.FC<{ store: Store }> = observer(({ store }) => { useEffect(() => { - fetchTasks(hideCompleted).then(setTasks); - }, [hideCompleted]); - - const addTask = () => { - setTasks([...tasks, new Task()]) - }; - const setAll = async (completed: boolean) => { - await TasksController.setAll(completed); - setTasks(await fetchTasks(hideCompleted)); - } - + store.loadTasks() + }, [store.hideCompleted]); return (
setHideCompleted(e.target.checked)} /> Hide Completed + checked={store.hideCompleted} + onChange={action(e => store.hideCompleted = e.target.checked)} /> Hide Completed
- {tasks.map(task => { - const handleChange = (values: Partial) => { - setTasks(tasks.map(t => t === task ? { ...task, ...values } : t)); - }; - - const saveTask = async () => { - try { - const savedTask = await taskRepo.save(task); - setTasks(tasks.map(t => t === task ? savedTask : t)); - } catch (error: any) { - alert(error.message); - } - } - - - const deleteTask = async () => { - await taskRepo.delete(task); - setTasks(tasks.filter(t => t !== task)); - }; - + {store.tasks.map(task => { return (
handleChange({ completed: e.target.checked })} /> + onChange={action(e => { + const prev = task.completed; + task.completed = e.target.checked; + })} /> handleChange({ title: e.target.value })} /> - - + onChange={action(e => task.title = e.target.value)} /> + +
); })}
- +
- - + +
); -} +}); export default App; From 635c7d797a82ee91d4dff2137eebfad2d83a8b9b Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Sun, 11 Sep 2022 18:45:30 +0300 Subject: [PATCH 2/9] installed mobx --- db/tasks.json | 23 ++++++++++++++--------- package-lock.json | 5 ++--- package.json | 1 + 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/db/tasks.json b/db/tasks.json index c55fd29..b674c29 100644 --- a/db/tasks.json +++ b/db/tasks.json @@ -1,27 +1,32 @@ [ { "id": "ebf5cd37-02fc-4fac-9f0c-45170f1979d1", - "title": "Task a1212313", - "completed": true + "title": "Task a", + "completed": false }, { "id": "aa8b8a1d-bf1e-4508-9a4a-cee3acaff346", - "title": "Task b123", - "completed": true + "title": "Task b", + "completed": false }, { "id": "e4c586cb-316e-413b-a93d-ba5be59ac16e", - "title": "Task c123132", + "title": "Task c", + "completed": false + }, + { + "id": "07292d0a-7c0f-4d7d-af90-2aa58b863fd5", + "title": "Task d121", "completed": false }, { - "id": "9510a9ff-dd6d-4f65-b07b-0dc97428fb96", - "title": "12132123", + "id": "cd2ed064-dd3b-45dc-9045-702bcdd512c8", + "title": "Task e", "completed": false }, { - "id": "8dda3186-033f-46de-8a99-6cc786e6ba38", - "title": "123123", + "id": "94c14437-ac2c-405b-931c-16659d271468", + "title": "jl;jkl;", "completed": false } ] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4aa5638..b8a36c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "express": "^4.18.1", "helmet": "^6.0.0", "heroku-ssl-redirect": "^0.1.1", + "mobx": "^6.6.2", "mobx-react-lite": "^3.4.0", "pg": "^8.8.0", "react": "^18.2.0", @@ -2460,7 +2461,6 @@ "version": "6.6.2", "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.6.2.tgz", "integrity": "sha512-IOpS0bf3+hXIhDIy+CmlNMBfFpAbHS0aVHcNC+xH/TFYEKIIVDKNYRh9eKlXuVfJ1iRKAp0cRVmO145CyJAMVQ==", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -5292,8 +5292,7 @@ "mobx": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.6.2.tgz", - "integrity": "sha512-IOpS0bf3+hXIhDIy+CmlNMBfFpAbHS0aVHcNC+xH/TFYEKIIVDKNYRh9eKlXuVfJ1iRKAp0cRVmO145CyJAMVQ==", - "peer": true + "integrity": "sha512-IOpS0bf3+hXIhDIy+CmlNMBfFpAbHS0aVHcNC+xH/TFYEKIIVDKNYRh9eKlXuVfJ1iRKAp0cRVmO145CyJAMVQ==" }, "mobx-react-lite": { "version": "3.4.0", diff --git a/package.json b/package.json index eb871e3..3403f47 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "express": "^4.18.1", "helmet": "^6.0.0", "heroku-ssl-redirect": "^0.1.1", + "mobx": "^6.6.2", "mobx-react-lite": "^3.4.0", "pg": "^8.8.0", "react": "^18.2.0", From e40af95019c7415f1c305db052122b9fa3fd6620 Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Tue, 13 Sep 2022 08:36:55 +0300 Subject: [PATCH 3/9] Update src/App.tsx Co-authored-by: Nick Ribal --- src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index f75a8ee..df26146 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -52,7 +52,7 @@ function App() { return } -const Todo: React.FC<{ store: Store }> = observer(({ store }) => { +const Todo = observer(({ store }: { store: Store }) => { useEffect(() => { store.loadTasks() }, [store.hideCompleted]); From 24e8ca442406ac73d5071803bca0b188ac8b8df6 Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Tue, 13 Sep 2022 08:44:51 +0300 Subject: [PATCH 4/9] implemented nick's comments --- db/tasks.json | 15 ++++++++++----- src/App.tsx | 25 +++++++++++-------------- src/shared/Task.ts | 30 +++++++++++++++++------------- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/db/tasks.json b/db/tasks.json index b674c29..70c6e1d 100644 --- a/db/tasks.json +++ b/db/tasks.json @@ -1,18 +1,18 @@ [ { "id": "ebf5cd37-02fc-4fac-9f0c-45170f1979d1", - "title": "Task a", + "title": "Task a12", "completed": false }, { "id": "aa8b8a1d-bf1e-4508-9a4a-cee3acaff346", "title": "Task b", - "completed": false + "completed": true }, { "id": "e4c586cb-316e-413b-a93d-ba5be59ac16e", - "title": "Task c", - "completed": false + "title": "Task c2", + "completed": true }, { "id": "07292d0a-7c0f-4d7d-af90-2aa58b863fd5", @@ -21,12 +21,17 @@ }, { "id": "cd2ed064-dd3b-45dc-9045-702bcdd512c8", - "title": "Task e", + "title": "Task e12313", "completed": false }, { "id": "94c14437-ac2c-405b-931c-16659d271468", "title": "jl;jkl;", "completed": false + }, + { + "id": "fad10663-7070-4679-9573-babd2b5ba57f", + "title": "123123", + "completed": false } ] \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index f75a8ee..31c025d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -10,13 +10,13 @@ import { action, makeAutoObservable, observable, runInAction } from 'mobx'; class Store { taskRepo = remult.repo(Task); - readonly tasks = observable([]); + tasks: Task[] = []; hideCompleted = false; constructor() { makeAutoObservable(this); } - replaceTasks(t: Task[]) { - this.tasks.replace(t.map(t => makeAutoObservable({ ...t }))); + replaceTasks(tasks: Task[]) { + this.tasks = tasks; } async loadTasks() { this.replaceTasks(await @@ -27,7 +27,7 @@ class Store { })); } addTask() { - this.tasks.push(makeAutoObservable(new Task())) + this.tasks.push(new Task()) } async saveTask(task: Task) { try { @@ -39,7 +39,7 @@ class Store { } async deleteTask(task: Task) { await this.taskRepo.delete(task); - runInAction(() => store.tasks.remove(task)); + runInAction(() => this.tasks = this.tasks.filter(t => t !== task)); } async setAll(completed: boolean) { await TasksController.setAll(completed); @@ -68,24 +68,21 @@ const Todo: React.FC<{ store: Store }> = observer(({ store }) => {
{ - const prev = task.completed; - task.completed = e.target.checked; - })} /> + onChange={action(e => task.completed = e.target.checked)} /> task.title = e.target.value)} /> - - + +
); })} - +
- - + +
diff --git a/src/shared/Task.ts b/src/shared/Task.ts index 3c7c3bb..3ee15ac 100644 --- a/src/shared/Task.ts +++ b/src/shared/Task.ts @@ -1,22 +1,26 @@ +import { makeAutoObservable } from "mobx"; import { Allow, Entity, Fields, Validators } from "remult"; import { Roles } from "./Roles"; @Entity("tasks", { - allowApiRead: Allow.authenticated, - allowApiUpdate: Allow.authenticated, - allowApiInsert: Roles.admin, - allowApiDelete: Roles.admin + allowApiRead: Allow.authenticated, + allowApiUpdate: Allow.authenticated, + allowApiInsert: Roles.admin, + allowApiDelete: Roles.admin }) export class Task { - @Fields.uuid() - id!: string; + constructor() { + makeAutoObservable(this); + } + @Fields.uuid() + id!: string; - @Fields.string({ - validate: Validators.required, - allowApiUpdate: Roles.admin - }) - title = ''; + @Fields.string({ + validate: Validators.required, + allowApiUpdate: Roles.admin + }) + title = ''; - @Fields.boolean() - completed = false; + @Fields.boolean() + completed = false; } From a988cbd95059a6b9fabdb9a25010bf8842ac894e Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Tue, 13 Sep 2022 08:45:51 +0300 Subject: [PATCH 5/9] tasks cleanup --- db/tasks.json | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/db/tasks.json b/db/tasks.json index 70c6e1d..b674c29 100644 --- a/db/tasks.json +++ b/db/tasks.json @@ -1,18 +1,18 @@ [ { "id": "ebf5cd37-02fc-4fac-9f0c-45170f1979d1", - "title": "Task a12", + "title": "Task a", "completed": false }, { "id": "aa8b8a1d-bf1e-4508-9a4a-cee3acaff346", "title": "Task b", - "completed": true + "completed": false }, { "id": "e4c586cb-316e-413b-a93d-ba5be59ac16e", - "title": "Task c2", - "completed": true + "title": "Task c", + "completed": false }, { "id": "07292d0a-7c0f-4d7d-af90-2aa58b863fd5", @@ -21,17 +21,12 @@ }, { "id": "cd2ed064-dd3b-45dc-9045-702bcdd512c8", - "title": "Task e12313", + "title": "Task e", "completed": false }, { "id": "94c14437-ac2c-405b-931c-16659d271468", "title": "jl;jkl;", "completed": false - }, - { - "id": "fad10663-7070-4679-9573-babd2b5ba57f", - "title": "123123", - "completed": false } ] \ No newline at end of file From f703f30d4c21f2fbdeac36f0d4181107e12e469a Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Tue, 13 Sep 2022 08:51:51 +0300 Subject: [PATCH 6/9] refactored store to a separate file --- src/App.tsx | 58 +++++----------------------------------------------- src/Store.ts | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 53 deletions(-) create mode 100644 src/Store.ts diff --git a/src/App.tsx b/src/App.tsx index faead24..35ad16a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,58 +1,12 @@ -import React, { useEffect, useState } from "react"; -import { remult } from "remult"; -import { Task } from "./shared/Task"; -import { TasksController } from "./shared/TasksController"; +import { useEffect } from "react"; import { observer } from "mobx-react-lite"; -import { action, makeAutoObservable, observable, runInAction } from 'mobx'; +import { action } from 'mobx'; +import { Store } from "./Store"; +export const store = new Store(); - -class Store { - taskRepo = remult.repo(Task); - tasks: Task[] = []; - hideCompleted = false; - constructor() { - makeAutoObservable(this); - } - replaceTasks(tasks: Task[]) { - this.tasks = tasks; - } - async loadTasks() { - this.replaceTasks(await - this.taskRepo.find({ - limit: 20, - orderBy: { completed: "asc" }, - where: { completed: this.hideCompleted ? false : undefined } - })); - } - addTask() { - this.tasks.push(new Task()) - } - async saveTask(task: Task) { - try { - const savedTask = await this.taskRepo.save(task); - runInAction(() => store.tasks[store.tasks.indexOf(task)] = savedTask); - } 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(); - } -} -const store = new Store(); - -function App() { - return - -} -const Todo = observer(({ store }: { store: Store }) => { +const App = observer(() => { useEffect(() => { store.loadTasks() }, [store.hideCompleted]); @@ -77,14 +31,12 @@ const Todo = observer(({ store }: { store: Store }) => { ); })} -
- ); }); diff --git a/src/Store.ts b/src/Store.ts new file mode 100644 index 0000000..08e1915 --- /dev/null +++ b/src/Store.ts @@ -0,0 +1,43 @@ +import { remult } from "remult"; +import { Task } from "./shared/Task"; +import { TasksController } from "./shared/TasksController"; +import { makeAutoObservable, runInAction } from 'mobx'; +import { store } from "./App"; + +export class Store { + taskRepo = remult.repo(Task); + tasks: Task[] = []; + hideCompleted = false; + constructor() { + makeAutoObservable(this); + } + replaceTasks(tasks: Task[]) { + this.tasks = tasks; + } + async loadTasks() { + this.replaceTasks(await this.taskRepo.find({ + limit: 20, + orderBy: { completed: "asc" }, + where: { completed: this.hideCompleted ? false : undefined } + })); + } + addTask() { + this.tasks.push(new Task()); + } + async saveTask(task: Task) { + try { + const savedTask = await this.taskRepo.save(task); + runInAction(() => store.tasks[store.tasks.indexOf(task)] = savedTask); + } 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(); + } +} From b9a379397feef895dfdd85255f5f1829a7b4a76b Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Tue, 13 Sep 2022 08:52:16 +0300 Subject: [PATCH 7/9] removed unnecessary spaces --- src/App.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 35ad16a..ba06943 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,7 +5,6 @@ import { Store } from "./Store"; export const store = new Store(); - const App = observer(() => { useEffect(() => { store.loadTasks() @@ -41,5 +40,4 @@ const App = observer(() => { ); }); - export default App; From 331497afee43347d1fa4c1696dff14e3c7142fef Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Tue, 13 Sep 2022 08:54:29 +0300 Subject: [PATCH 8/9] adjusted spaces --- src/shared/Task.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/shared/Task.ts b/src/shared/Task.ts index 3ee15ac..983eda5 100644 --- a/src/shared/Task.ts +++ b/src/shared/Task.ts @@ -3,24 +3,24 @@ import { Allow, Entity, Fields, Validators } from "remult"; import { Roles } from "./Roles"; @Entity("tasks", { - allowApiRead: Allow.authenticated, - allowApiUpdate: Allow.authenticated, - allowApiInsert: Roles.admin, - allowApiDelete: Roles.admin + allowApiRead: Allow.authenticated, + allowApiUpdate: Allow.authenticated, + allowApiInsert: Roles.admin, + allowApiDelete: Roles.admin }) export class Task { - constructor() { - makeAutoObservable(this); - } - @Fields.uuid() - id!: string; + constructor() { + makeAutoObservable(this); + } + @Fields.uuid() + id!: string; - @Fields.string({ - validate: Validators.required, - allowApiUpdate: Roles.admin - }) - title = ''; + @Fields.string({ + validate: Validators.required, + allowApiUpdate: Roles.admin + }) + title = ''; - @Fields.boolean() - completed = false; + @Fields.boolean() + completed = false; } From 62e59803e0bb375c7cf5945df9aa790d6a8f0c7d Mon Sep 17 00:00:00 2001 From: Noam Honig Date: Tue, 13 Sep 2022 08:55:38 +0300 Subject: [PATCH 9/9] updated indent to highlight differences --- src/shared/Task.ts | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/shared/Task.ts b/src/shared/Task.ts index 983eda5..720b89d 100644 --- a/src/shared/Task.ts +++ b/src/shared/Task.ts @@ -3,24 +3,24 @@ import { Allow, Entity, Fields, Validators } from "remult"; import { Roles } from "./Roles"; @Entity("tasks", { - allowApiRead: Allow.authenticated, - allowApiUpdate: Allow.authenticated, - allowApiInsert: Roles.admin, - allowApiDelete: Roles.admin + allowApiRead: Allow.authenticated, + allowApiUpdate: Allow.authenticated, + allowApiInsert: Roles.admin, + allowApiDelete: Roles.admin }) export class Task { - constructor() { - makeAutoObservable(this); - } - @Fields.uuid() - id!: string; + constructor(){ + makeAutoObservable(this); + } + @Fields.uuid() + id!: string; - @Fields.string({ - validate: Validators.required, - allowApiUpdate: Roles.admin - }) - title = ''; + @Fields.string({ + validate: Validators.required, + allowApiUpdate: Roles.admin + }) + title = ''; - @Fields.boolean() - completed = false; -} + @Fields.boolean() + completed = false; +} \ No newline at end of file