From 66dedaa6d3e4c6fe948ec1c1bfcacc093ccd2ef4 Mon Sep 17 00:00:00 2001 From: "Mohamed (moaln)" Date: Mon, 27 Oct 2025 15:26:09 +0100 Subject: [PATCH 1/6] [IMP] awesome_owl: added counter and todolist comopnents --- .../inspectionProfiles/profiles_settings.xml | 6 +++ .idea/misc.xml | 7 ++++ .idea/tutorials.iml | 14 +++++++ .idea/vcs.xml | 7 ++++ .idea/workspace.xml | 40 +++++++++++++++++++ awesome_owl/run.sh | 2 + awesome_owl/static/src/card/card.js | 11 +++++ awesome_owl/static/src/card/card.xml | 14 +++++++ awesome_owl/static/src/counter/counter.js | 18 +++++++++ awesome_owl/static/src/counter/counter.xml | 10 +++++ awesome_owl/static/src/main.js | 1 + awesome_owl/static/src/playground.js | 17 +++++++- awesome_owl/static/src/playground.xml | 7 +++- awesome_owl/static/src/todo_list/todo_item.js | 22 ++++++++++ .../static/src/todo_list/todo_item.xml | 10 +++++ awesome_owl/static/src/todo_list/todo_list.js | 15 +++++++ .../static/src/todo_list/todo_list.xml | 11 +++++ estate/run.sh | 3 ++ 18 files changed, 212 insertions(+), 3 deletions(-) create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/tutorials.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100755 awesome_owl/run.sh create mode 100644 awesome_owl/static/src/card/card.js create mode 100644 awesome_owl/static/src/card/card.xml create mode 100644 awesome_owl/static/src/counter/counter.js create mode 100644 awesome_owl/static/src/counter/counter.xml create mode 100644 awesome_owl/static/src/todo_list/todo_item.js create mode 100644 awesome_owl/static/src/todo_list/todo_item.xml create mode 100644 awesome_owl/static/src/todo_list/todo_list.js create mode 100644 awesome_owl/static/src/todo_list/todo_list.xml create mode 100755 estate/run.sh diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000000..105ce2da2d6 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000000..ee63096aec0 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/tutorials.iml b/.idea/tutorials.iml new file mode 100644 index 00000000000..dca63c2a211 --- /dev/null +++ b/.idea/tutorials.iml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000000..e78f15fd998 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000000..348c7b020d7 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/awesome_owl/run.sh b/awesome_owl/run.sh new file mode 100755 index 00000000000..d7dd28756c2 --- /dev/null +++ b/awesome_owl/run.sh @@ -0,0 +1,2 @@ +cd "../../odoo" || exit +./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo-owl -u awesome_owl diff --git a/awesome_owl/static/src/card/card.js b/awesome_owl/static/src/card/card.js new file mode 100644 index 00000000000..784d7ed5448 --- /dev/null +++ b/awesome_owl/static/src/card/card.js @@ -0,0 +1,11 @@ +import {Component} from "@odoo/owl" + + +export class Card extends Component { + static template = "awesome_owl.card"; + + static props = { + title: String, + content: Object, + }; +} diff --git a/awesome_owl/static/src/card/card.xml b/awesome_owl/static/src/card/card.xml new file mode 100644 index 00000000000..343a66ccf2a --- /dev/null +++ b/awesome_owl/static/src/card/card.xml @@ -0,0 +1,14 @@ + + + + +
+
+
+

+ +

+
+
+
+
diff --git a/awesome_owl/static/src/counter/counter.js b/awesome_owl/static/src/counter/counter.js new file mode 100644 index 00000000000..4727466f97f --- /dev/null +++ b/awesome_owl/static/src/counter/counter.js @@ -0,0 +1,18 @@ +import {Component, useState} from "@odoo/owl"; + +export class Counter extends Component { + static template = "awesome_owl.counter"; + + static props = { + onChange: {type: Function, optional: true} + }; + + setup() { + this.state = useState({value: 0}); + } + + increment() { + this.state.value++; + this.props.onChange(); + } +} diff --git a/awesome_owl/static/src/counter/counter.xml b/awesome_owl/static/src/counter/counter.xml new file mode 100644 index 00000000000..08aba88f7fa --- /dev/null +++ b/awesome_owl/static/src/counter/counter.xml @@ -0,0 +1,10 @@ + + + + +
+

Counter:

+ +
+
+
diff --git a/awesome_owl/static/src/main.js b/awesome_owl/static/src/main.js index 1af6c827e0b..9a131ef4f0d 100644 --- a/awesome_owl/static/src/main.js +++ b/awesome_owl/static/src/main.js @@ -2,6 +2,7 @@ import { whenReady } from "@odoo/owl"; import { mountComponent } from "@web/env"; import { Playground } from "./playground"; + const config = { dev: true, name: "Owl Tutorial", diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index 657fb8b07bb..08abad8f577 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -1,7 +1,20 @@ /** @odoo-module **/ - -import { Component } from "@odoo/owl"; +import {useState, Component} from "@odoo/owl"; +import {Counter} from "./counter/counter"; +import {Card} from "./card/card" +import {TodoList} from "./todo_list/todo_list"; export class Playground extends Component { static template = "awesome_owl.playground"; + + static components = {Counter, Card, TodoList}; + + setup() { + this.state = useState({sum: 0}); + this.incrementSum = this.incrementSum.bind(this); + } + + incrementSum() { + this.state.sum++; + } } diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index 4fb905d59f9..31c45b25cda 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -4,7 +4,12 @@
hello world +
+ + +

The sum is:

+
+
- diff --git a/awesome_owl/static/src/todo_list/todo_item.js b/awesome_owl/static/src/todo_list/todo_item.js new file mode 100644 index 00000000000..d95771f0872 --- /dev/null +++ b/awesome_owl/static/src/todo_list/todo_item.js @@ -0,0 +1,22 @@ +import {Component} from "@odoo/owl" + + +export class TodoItem extends Component { + static template = "awesome_owl.todo.item"; + + static props = { + todo: {type: Object, shape: {id: Number, description: String, isCompleted: Boolean}} + } + + get id() { + return this.props.todo.id; + } + + get description() { + return this.props.todo.description; + } + + get isCompleted() { + return this.props.todo.isCompleted; + } +} diff --git a/awesome_owl/static/src/todo_list/todo_item.xml b/awesome_owl/static/src/todo_list/todo_item.xml new file mode 100644 index 00000000000..bcbadb95d75 --- /dev/null +++ b/awesome_owl/static/src/todo_list/todo_item.xml @@ -0,0 +1,10 @@ + + + + +

+ . + +

+
+
diff --git a/awesome_owl/static/src/todo_list/todo_list.js b/awesome_owl/static/src/todo_list/todo_list.js new file mode 100644 index 00000000000..529c814f759 --- /dev/null +++ b/awesome_owl/static/src/todo_list/todo_list.js @@ -0,0 +1,15 @@ +import {useState, Component} from "@odoo/owl" +import {TodoItem} from "./todo_item"; + +export class TodoList extends Component { + static template = "awesome_owl.todo.list"; + + static components = {TodoItem}; + + setup() { + this.todos = useState([ + {id: 2, description: "write tutorial", isCompleted: true}, + {id: 3, description: "buy milk", isCompleted: false}, + ]); + } +} diff --git a/awesome_owl/static/src/todo_list/todo_list.xml b/awesome_owl/static/src/todo_list/todo_list.xml new file mode 100644 index 00000000000..9976caea877 --- /dev/null +++ b/awesome_owl/static/src/todo_list/todo_list.xml @@ -0,0 +1,11 @@ + + + + +
+ + + +
+
+
diff --git a/estate/run.sh b/estate/run.sh new file mode 100755 index 00000000000..a18337eca57 --- /dev/null +++ b/estate/run.sh @@ -0,0 +1,3 @@ +cd "../../odoo" +kill $(lsof -i:8069) +./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo -u estate --dev xmlC \ No newline at end of file From ba6f6cd3c1f2669a570140d2eef31e213131aee3 Mon Sep 17 00:00:00 2001 From: "Mohamed (moaln)" Date: Mon, 27 Oct 2025 15:48:28 +0100 Subject: [PATCH 2/6] [REM] tutorials: removed .idea files --- .../inspectionProfiles/profiles_settings.xml | 6 --- .idea/misc.xml | 7 ---- .idea/tutorials.iml | 14 ------- .idea/vcs.xml | 7 ---- .idea/workspace.xml | 40 ------------------- 5 files changed, 74 deletions(-) delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/tutorials.iml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2da2d6..00000000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index ee63096aec0..00000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/tutorials.iml b/.idea/tutorials.iml deleted file mode 100644 index dca63c2a211..00000000000 --- a/.idea/tutorials.iml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index e78f15fd998..00000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 348c7b020d7..00000000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 55a272dcf06e50b0e03629686e9f72c9fcb9c0c5 Mon Sep 17 00:00:00 2001 From: "Mohamed (moaln)" Date: Tue, 28 Oct 2025 14:19:59 +0100 Subject: [PATCH 3/6] [IMP] awesome_owl: added toggling and deleting todos and made the card component genaric using slots --- awesome_owl/static/src/card/card.js | 19 +++++++++- awesome_owl/static/src/card/card.xml | 13 ++++--- awesome_owl/static/src/counter/counter.xml | 4 +- awesome_owl/static/src/playground.xml | 9 +++-- awesome_owl/static/src/todo_list/todo_item.js | 4 +- .../static/src/todo_list/todo_item.xml | 2 + awesome_owl/static/src/todo_list/todo_list.js | 38 ++++++++++++++++--- .../static/src/todo_list/todo_list.xml | 5 ++- awesome_owl/static/src/utils.js | 9 +++++ 9 files changed, 83 insertions(+), 20 deletions(-) create mode 100644 awesome_owl/static/src/utils.js diff --git a/awesome_owl/static/src/card/card.js b/awesome_owl/static/src/card/card.js index 784d7ed5448..d16482cb178 100644 --- a/awesome_owl/static/src/card/card.js +++ b/awesome_owl/static/src/card/card.js @@ -1,4 +1,4 @@ -import {Component} from "@odoo/owl" +import {useState, Component} from "@odoo/owl" export class Card extends Component { @@ -6,6 +6,21 @@ export class Card extends Component { static props = { title: String, - content: Object, + slots: Object, }; + + setup() { + const {title} = this.props; + this.title = title; + this.state = useState({isOpened: true}) + } + + get isOpened() { + return this.state.isOpened; + } + + toggle() { + console.log(this.isOpened); + this.state.isOpened = !this.isOpened; + } } diff --git a/awesome_owl/static/src/card/card.xml b/awesome_owl/static/src/card/card.xml index 343a66ccf2a..b6f68ed7ecb 100644 --- a/awesome_owl/static/src/card/card.xml +++ b/awesome_owl/static/src/card/card.xml @@ -2,12 +2,13 @@ -
-
-
-

- -

+
+
+

+ +
+
+
diff --git a/awesome_owl/static/src/counter/counter.xml b/awesome_owl/static/src/counter/counter.xml index 08aba88f7fa..a36e27a0b5f 100644 --- a/awesome_owl/static/src/counter/counter.xml +++ b/awesome_owl/static/src/counter/counter.xml @@ -2,8 +2,8 @@ -
-

Counter:

+
+ Counter:
diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index 31c45b25cda..1e42c1082fe 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -3,10 +3,13 @@
- hello world
- - + + + + + +

The sum is:


diff --git a/awesome_owl/static/src/todo_list/todo_item.js b/awesome_owl/static/src/todo_list/todo_item.js index d95771f0872..735f10805d7 100644 --- a/awesome_owl/static/src/todo_list/todo_item.js +++ b/awesome_owl/static/src/todo_list/todo_item.js @@ -5,7 +5,9 @@ export class TodoItem extends Component { static template = "awesome_owl.todo.item"; static props = { - todo: {type: Object, shape: {id: Number, description: String, isCompleted: Boolean}} + todo: {type: Object, shape: {id: Number, description: String, isCompleted: Boolean}}, + toggleState: {type: Function}, + deleteTodo: {type: Function}, } get id() { diff --git a/awesome_owl/static/src/todo_list/todo_item.xml b/awesome_owl/static/src/todo_list/todo_item.xml index bcbadb95d75..fab2a96ca5a 100644 --- a/awesome_owl/static/src/todo_list/todo_item.xml +++ b/awesome_owl/static/src/todo_list/todo_item.xml @@ -3,8 +3,10 @@

+ . +

diff --git a/awesome_owl/static/src/todo_list/todo_list.js b/awesome_owl/static/src/todo_list/todo_list.js index 529c814f759..132928d162c 100644 --- a/awesome_owl/static/src/todo_list/todo_list.js +++ b/awesome_owl/static/src/todo_list/todo_list.js @@ -1,15 +1,43 @@ -import {useState, Component} from "@odoo/owl" +import {onMounted, useRef, useState, Component} from "@odoo/owl" import {TodoItem} from "./todo_item"; +import {useAutofocus} from "../utils"; export class TodoList extends Component { static template = "awesome_owl.todo.list"; static components = {TodoItem}; + static idGen = 0; + + static get id() { + return this.idGen++; + } + setup() { - this.todos = useState([ - {id: 2, description: "write tutorial", isCompleted: true}, - {id: 3, description: "buy milk", isCompleted: false}, - ]); + this.todos = useState([]); + useAutofocus('todo_input'); + this.toggleTodo = this.toggleTodo.bind(this); + this.deleteTodo = this.deleteTodo.bind(this); + } + + addTodo(ev) { + if (ev.keyCode === 13 && ev.target.value) { + this.todos.push({id: this.constructor.id, description: ev.target.value, isCompleted: false}); + ev.target.value = ''; + } + } + + toggleTodo(id) { + const index = this.todos.findIndex((elem) => elem.id === id); + if(index !== -1) { + this.todos[index].isCompleted = !this.todos[index].isCompleted; + } + } + + deleteTodo(id) { + const index = this.todos.findIndex((elem) => elem.id === id); + if(index !== -1) { + this.todos.splice(index, 1); + } } } diff --git a/awesome_owl/static/src/todo_list/todo_list.xml b/awesome_owl/static/src/todo_list/todo_list.xml index 9976caea877..de084d90c09 100644 --- a/awesome_owl/static/src/todo_list/todo_list.xml +++ b/awesome_owl/static/src/todo_list/todo_list.xml @@ -2,9 +2,12 @@ +
+ +
- +
diff --git a/awesome_owl/static/src/utils.js b/awesome_owl/static/src/utils.js new file mode 100644 index 00000000000..647815151f4 --- /dev/null +++ b/awesome_owl/static/src/utils.js @@ -0,0 +1,9 @@ +import {onMounted, useRef} from "@odoo/owl"; + + +export function useAutofocus(name) { + const ref = useRef(name); + onMounted(() => { + ref.el.focus(); + }); +} From 61f568d52bcc7ac86edd1217c837202aa63780fe Mon Sep 17 00:00:00 2001 From: "Mohamed (moaln)" Date: Wed, 29 Oct 2025 09:43:26 +0100 Subject: [PATCH 4/6] [CLN] awesome_owl: removed empty lines and fixed import order --- awesome_owl/__init__.py | 2 +- awesome_owl/controllers/__init__.py | 2 +- awesome_owl/run.sh | 2 -- awesome_owl/static/src/card/card.js | 5 ++-- awesome_owl/static/src/card/card.xml | 1 - awesome_owl/static/src/playground.js | 6 ++-- awesome_owl/static/src/playground.xml | 3 +- awesome_owl/static/src/todo_list/todo_item.js | 14 +++++---- .../static/src/todo_list/todo_item.xml | 1 - awesome_owl/static/src/todo_list/todo_list.js | 29 ++++++++++++------- .../static/src/todo_list/todo_list.xml | 4 +-- 11 files changed, 36 insertions(+), 33 deletions(-) delete mode 100755 awesome_owl/run.sh diff --git a/awesome_owl/__init__.py b/awesome_owl/__init__.py index 457bae27e11..b0f26a9a602 100644 --- a/awesome_owl/__init__.py +++ b/awesome_owl/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -from . import controllers \ No newline at end of file +from . import controllers diff --git a/awesome_owl/controllers/__init__.py b/awesome_owl/controllers/__init__.py index 457bae27e11..b0f26a9a602 100644 --- a/awesome_owl/controllers/__init__.py +++ b/awesome_owl/controllers/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -from . import controllers \ No newline at end of file +from . import controllers diff --git a/awesome_owl/run.sh b/awesome_owl/run.sh deleted file mode 100755 index d7dd28756c2..00000000000 --- a/awesome_owl/run.sh +++ /dev/null @@ -1,2 +0,0 @@ -cd "../../odoo" || exit -./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo-owl -u awesome_owl diff --git a/awesome_owl/static/src/card/card.js b/awesome_owl/static/src/card/card.js index d16482cb178..711c29c0918 100644 --- a/awesome_owl/static/src/card/card.js +++ b/awesome_owl/static/src/card/card.js @@ -1,4 +1,4 @@ -import {useState, Component} from "@odoo/owl" +import {Component, useState} from "@odoo/owl" export class Card extends Component { @@ -6,7 +6,7 @@ export class Card extends Component { static props = { title: String, - slots: Object, + slots: {type: Object, optional: true}, }; setup() { @@ -20,7 +20,6 @@ export class Card extends Component { } toggle() { - console.log(this.isOpened); this.state.isOpened = !this.isOpened; } } diff --git a/awesome_owl/static/src/card/card.xml b/awesome_owl/static/src/card/card.xml index b6f68ed7ecb..397fcc42d2e 100644 --- a/awesome_owl/static/src/card/card.xml +++ b/awesome_owl/static/src/card/card.xml @@ -1,6 +1,5 @@ -
diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index 08abad8f577..e1e42a2f190 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -1,9 +1,9 @@ -/** @odoo-module **/ -import {useState, Component} from "@odoo/owl"; -import {Counter} from "./counter/counter"; import {Card} from "./card/card" +import {Component, useState} from "@odoo/owl"; +import {Counter} from "./counter/counter"; import {TodoList} from "./todo_list/todo_list"; + export class Playground extends Component { static template = "awesome_owl.playground"; diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index 1e42c1082fe..7c59c924ea9 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -1,9 +1,7 @@ -
-
@@ -12,6 +10,7 @@

The sum is:


+
diff --git a/awesome_owl/static/src/todo_list/todo_item.js b/awesome_owl/static/src/todo_list/todo_item.js index 735f10805d7..a9a13efbf50 100644 --- a/awesome_owl/static/src/todo_list/todo_item.js +++ b/awesome_owl/static/src/todo_list/todo_item.js @@ -5,20 +5,22 @@ export class TodoItem extends Component { static template = "awesome_owl.todo.item"; static props = { - todo: {type: Object, shape: {id: Number, description: String, isCompleted: Boolean}}, - toggleState: {type: Function}, - deleteTodo: {type: Function}, + id: Number, + description: String, + isCompleted: Boolean, + toggleState: Function, + deleteTodo: Function, } get id() { - return this.props.todo.id; + return this.props.id; } get description() { - return this.props.todo.description; + return this.props.description; } get isCompleted() { - return this.props.todo.isCompleted; + return this.props.isCompleted; } } diff --git a/awesome_owl/static/src/todo_list/todo_item.xml b/awesome_owl/static/src/todo_list/todo_item.xml index fab2a96ca5a..74910535b9f 100644 --- a/awesome_owl/static/src/todo_list/todo_item.xml +++ b/awesome_owl/static/src/todo_list/todo_item.xml @@ -1,6 +1,5 @@ -

diff --git a/awesome_owl/static/src/todo_list/todo_list.js b/awesome_owl/static/src/todo_list/todo_list.js index 132928d162c..1c0332ad114 100644 --- a/awesome_owl/static/src/todo_list/todo_list.js +++ b/awesome_owl/static/src/todo_list/todo_list.js @@ -1,7 +1,8 @@ -import {onMounted, useRef, useState, Component} from "@odoo/owl" +import {Component, useState} from "@odoo/owl" import {TodoItem} from "./todo_item"; import {useAutofocus} from "../utils"; + export class TodoList extends Component { static template = "awesome_owl.todo.list"; @@ -20,24 +21,30 @@ export class TodoList extends Component { this.deleteTodo = this.deleteTodo.bind(this); } - addTodo(ev) { - if (ev.keyCode === 13 && ev.target.value) { - this.todos.push({id: this.constructor.id, description: ev.target.value, isCompleted: false}); - ev.target.value = ''; + addTodo(event) { + if (event.keyCode === 13 && event.target.value) { + this.todos.push( + { + id: this.constructor.id, + description: event.target.value, + isCompleted: false + } + ); + event.target.value = ''; } } toggleTodo(id) { - const index = this.todos.findIndex((elem) => elem.id === id); - if(index !== -1) { - this.todos[index].isCompleted = !this.todos[index].isCompleted; + const idx = this.todos.findIndex((elem) => elem.id === id); + if(idx !== -1) { + this.todos[idx].isCompleted = !this.todos[idx].isCompleted; } } deleteTodo(id) { - const index = this.todos.findIndex((elem) => elem.id === id); - if(index !== -1) { - this.todos.splice(index, 1); + const idx = this.todos.findIndex((elem) => elem.id === id); + if(idx !== -1) { + this.todos.splice(idx, 1); } } } diff --git a/awesome_owl/static/src/todo_list/todo_list.xml b/awesome_owl/static/src/todo_list/todo_list.xml index de084d90c09..1fb064a645a 100644 --- a/awesome_owl/static/src/todo_list/todo_list.xml +++ b/awesome_owl/static/src/todo_list/todo_list.xml @@ -1,13 +1,13 @@ -

- +
From 1ae08355961d89f05cbfb9707904da80d7ab3b8a Mon Sep 17 00:00:00 2001 From: "Mohamed (moaln)" Date: Wed, 29 Oct 2025 10:04:10 +0100 Subject: [PATCH 5/6] [REM] estate: removed the run.sh script from git --- estate/run.sh | 3 --- 1 file changed, 3 deletions(-) delete mode 100755 estate/run.sh diff --git a/estate/run.sh b/estate/run.sh deleted file mode 100755 index a18337eca57..00000000000 --- a/estate/run.sh +++ /dev/null @@ -1,3 +0,0 @@ -cd "../../odoo" -kill $(lsof -i:8069) -./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo -u estate --dev xmlC \ No newline at end of file From 6d6a8622d5e8a4c8c3b4247b0888b06acb4392fe Mon Sep 17 00:00:00 2001 From: "Mohamed (moaln)" Date: Wed, 29 Oct 2025 10:38:07 +0100 Subject: [PATCH 6/6] [LINT] awesome_owl: linted js and xml files --- awesome_owl/static/src/card/card.xml | 2 +- awesome_owl/static/src/counter/counter.js | 6 +++--- awesome_owl/static/src/counter/counter.xml | 2 +- awesome_owl/static/src/playground.js | 12 ++++++------ awesome_owl/static/src/playground.xml | 2 +- awesome_owl/static/src/todo_list/todo_item.js | 2 +- awesome_owl/static/src/todo_list/todo_item.xml | 2 +- awesome_owl/static/src/todo_list/todo_list.js | 12 ++++++------ awesome_owl/static/src/todo_list/todo_list.xml | 2 +- awesome_owl/static/src/utils.js | 2 +- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/awesome_owl/static/src/card/card.xml b/awesome_owl/static/src/card/card.xml index 397fcc42d2e..95ee77a660b 100644 --- a/awesome_owl/static/src/card/card.xml +++ b/awesome_owl/static/src/card/card.xml @@ -1,4 +1,4 @@ - +
diff --git a/awesome_owl/static/src/counter/counter.js b/awesome_owl/static/src/counter/counter.js index 4727466f97f..ba5a550d3b2 100644 --- a/awesome_owl/static/src/counter/counter.js +++ b/awesome_owl/static/src/counter/counter.js @@ -1,14 +1,14 @@ -import {Component, useState} from "@odoo/owl"; +import { Component, useState } from "@odoo/owl"; export class Counter extends Component { static template = "awesome_owl.counter"; static props = { - onChange: {type: Function, optional: true} + onChange: { type: Function, optional: true } }; setup() { - this.state = useState({value: 0}); + this.state = useState({ value: 0 }); } increment() { diff --git a/awesome_owl/static/src/counter/counter.xml b/awesome_owl/static/src/counter/counter.xml index a36e27a0b5f..8bf995ba3c5 100644 --- a/awesome_owl/static/src/counter/counter.xml +++ b/awesome_owl/static/src/counter/counter.xml @@ -1,4 +1,4 @@ - + diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index e1e42a2f190..3aa35c68758 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -1,16 +1,16 @@ -import {Card} from "./card/card" -import {Component, useState} from "@odoo/owl"; -import {Counter} from "./counter/counter"; -import {TodoList} from "./todo_list/todo_list"; +import { Card } from "./card/card" +import { Component, useState } from "@odoo/owl"; +import { Counter } from "./counter/counter"; +import { TodoList } from "./todo_list/todo_list"; export class Playground extends Component { static template = "awesome_owl.playground"; - static components = {Counter, Card, TodoList}; + static components = { Counter, Card, TodoList }; setup() { - this.state = useState({sum: 0}); + this.state = useState({ sum: 0 }); this.incrementSum = this.incrementSum.bind(this); } diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index 7c59c924ea9..68fea7baa62 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -1,4 +1,4 @@ - +
diff --git a/awesome_owl/static/src/todo_list/todo_item.js b/awesome_owl/static/src/todo_list/todo_item.js index a9a13efbf50..29496144141 100644 --- a/awesome_owl/static/src/todo_list/todo_item.js +++ b/awesome_owl/static/src/todo_list/todo_item.js @@ -1,4 +1,4 @@ -import {Component} from "@odoo/owl" +import { Component } from "@odoo/owl" export class TodoItem extends Component { diff --git a/awesome_owl/static/src/todo_list/todo_item.xml b/awesome_owl/static/src/todo_list/todo_item.xml index 74910535b9f..6c9c6fed585 100644 --- a/awesome_owl/static/src/todo_list/todo_item.xml +++ b/awesome_owl/static/src/todo_list/todo_item.xml @@ -1,4 +1,4 @@ - +

diff --git a/awesome_owl/static/src/todo_list/todo_list.js b/awesome_owl/static/src/todo_list/todo_list.js index 1c0332ad114..e02440d7142 100644 --- a/awesome_owl/static/src/todo_list/todo_list.js +++ b/awesome_owl/static/src/todo_list/todo_list.js @@ -1,12 +1,12 @@ -import {Component, useState} from "@odoo/owl" -import {TodoItem} from "./todo_item"; -import {useAutofocus} from "../utils"; +import { Component, useState } from "@odoo/owl" +import { TodoItem } from "./todo_item"; +import { useAutofocus } from "../utils"; export class TodoList extends Component { static template = "awesome_owl.todo.list"; - static components = {TodoItem}; + static components = { TodoItem }; static idGen = 0; @@ -36,14 +36,14 @@ export class TodoList extends Component { toggleTodo(id) { const idx = this.todos.findIndex((elem) => elem.id === id); - if(idx !== -1) { + if (idx !== -1) { this.todos[idx].isCompleted = !this.todos[idx].isCompleted; } } deleteTodo(id) { const idx = this.todos.findIndex((elem) => elem.id === id); - if(idx !== -1) { + if (idx !== -1) { this.todos.splice(idx, 1); } } diff --git a/awesome_owl/static/src/todo_list/todo_list.xml b/awesome_owl/static/src/todo_list/todo_list.xml index 1fb064a645a..aae7e639406 100644 --- a/awesome_owl/static/src/todo_list/todo_list.xml +++ b/awesome_owl/static/src/todo_list/todo_list.xml @@ -1,4 +1,4 @@ - +

diff --git a/awesome_owl/static/src/utils.js b/awesome_owl/static/src/utils.js index 647815151f4..88b545b216b 100644 --- a/awesome_owl/static/src/utils.js +++ b/awesome_owl/static/src/utils.js @@ -1,4 +1,4 @@ -import {onMounted, useRef} from "@odoo/owl"; +import { onMounted, useRef } from "@odoo/owl"; export function useAutofocus(name) {